summaryrefslogtreecommitdiff
path: root/src/main.rs
blob: 97f748d0605b73e60366eb9f8ac8c3fdb0962ac1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use macroquad::prelude::*;

use std::{cell::RefCell, rc::Rc};

use rust_lisp::default_env;
use rust_lisp::lisp;
use rust_lisp::parser::parse;
use rust_lisp::interpreter::eval;
use rust_lisp::model::{Value};

mod extended_environment;

#[macroquad::main("Snake")]
async fn main() {
    request_new_screen_size(34.0 * 18.0, 24.0 * 24.0);
    let env = Rc::new(RefCell::new(default_env()));

    // define new methods
    extended_environment::extend_environment(&env);

    let main_script = parse(include_str!("../scripts/main.el"));
    for exp in main_script {
        eval(env.clone(), &exp.unwrap()).unwrap();
    }
    
    loop {
        clear_background(extended_environment::BACKGROUND_COLOR);

        eval(env.clone(), &lisp! {
            (update { Value::Float(get_frame_time()) } )
        }).unwrap();
        eval(env.clone(), &lisp! { (draw) }).unwrap();

        next_frame().await
    }
}