85 lines
2.3 KiB
Rust
85 lines
2.3 KiB
Rust
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();
|
|
}
|