#![cfg_attr(target_arch = "wasm32", no_std)] #![cfg_attr(target_arch = "wasm32", no_main)] extern crate alloc; mod exit_on_escape; mod move_snake; mod render; mod snake_controller; use alloc::vec::Vec; use core::time::Duration; use tortuise_script::{entity::Entity, time::Instant, TortuiseScene}; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] struct Position { pub x: i16, pub y: i16, } const GRID_SIZE: u16 = 16; static APPLE_LOCATION: Entity = Entity::new("apple_location", |_| Position { x: 2, y: 2 }); static SNAKE_CELLS: Entity> = Entity::new("snake_cells", |_| { alloc::vec![Position { x: 10, y: 5 }, Position { x: 9, y: 5 }] }); static DIRECTION: Entity = Entity::new("direction", |_| Position { x: 1, y: 0 }); static NEXT_MOVE_TIME: Entity = Entity::new("next_move_time", |cx| { Instant::now(cx) + Duration::from_millis(200) }); tortuise_script::game! { name: "snake", author: "botahamec", tld: "dev", first_scene: "main", scenes: { "main" => TortuiseScene { scripts: &["snake_controller", "exit_on_escape", "move_snake", "render"], } }, scripts: { "snake_controller" => snake_controller::SNAKE_CONTROLLER, "exit_on_escape" => exit_on_escape::EXIT_ON_ESCAPE, "move_snake" => move_snake::MOVE_SNAKE, "render" => render::RENDER } }