use super::types::*; use crate::ast; use crate::interpret; use macroquad::prelude::*; pub async fn setup(code: ast::Program) -> State { let font = load_ttf_font("./assets/fonts/monogram.ttf").await.unwrap(); let mut state = match interpret::setup(code) { Ok(state) => state, Err(err) => { println!("Error: {}", err); interpret::State::new("game".into()) } }; let game_state = match interpret::interpret(&mut state, "setup".into(), vec![]) { Ok(result) => result, Err(err) => { println!("Error: {}", err); ast::UNIT_VALUE } }; State { assets: Assets { font }, state, game_state, } } pub async fn migrate(mut state: State, code: ast::Program) -> State { match interpret::setup(code) { Err(err) => { println!("Error: {}", err); state } Ok(mut new_program_state) => { match interpret::value_to_stadnalone_expr(&state.state, state.game_state.clone()) { Err(err) => { println!("Error: {}", err); state } Ok(expanded_game_state) => { match interpret::interpret( &mut new_program_state, "migrate".into(), vec![expanded_game_state], ) { Err(err) => { println!("Error: {}", err); state } Ok(result) => { state.game_state = result; state.state = new_program_state; state } } } } } } } pub fn update(_state: &mut State, events: Events) {} pub fn fetch_events() -> Events { Events(vec![]) } pub fn draw(state: &State) { clear_background(Color::from_hex(0x081829)); set_default_camera(); let (w, h) = (SCREEN_WIDTH as f32 / 2., 400.0); set_camera(&Camera2D { zoom: vec2(2.2 / w, 2.2 / h), target: Vec2 { x: w / 2.2, y: 0.0 }, viewport: Some((0, 0, w as i32, h as i32)), ..Default::default() }); set_default_camera(); }