ayin/src/runtime/runtime.rs
2025-12-19 13:05:08 +02:00

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();
}