use tortuise_script::{
input::{KeyCode, Position as MousePosition},
ScriptContext, TortuiseScript,
};
use crate::{Position, DIRECTION};
fn is_inside_box(mouse: Option<MousePosition>, button: MousePosition, size: u16) -> bool {
mouse.is_some_and(|mouse| {
(mouse.x >= button.x && mouse.x < button.x + size * 2)
&& (mouse.y >= button.y && mouse.y < button.y + size)
})
}
pub const SNAKE_CONTROLLER: TortuiseScript = TortuiseScript {
update: |context: ScriptContext| {
let mut direction = DIRECTION.get_mut(&context);
let mouse_location = context.mouse_location();
if is_inside_box(mouse_location, MousePosition { x: 4, y: 4 }, 3) {
*direction = Position { x: -1, y: 0 };
} else if is_inside_box(mouse_location, MousePosition { x: 16, y: 4 }, 3) {
*direction = Position { x: 1, y: 0 };
} else if is_inside_box(mouse_location, MousePosition { x: 10, y: 1 }, 3) {
*direction = Position { x: 0, y: -1 };
} else if is_inside_box(mouse_location, MousePosition { x: 10, y: 7 }, 3) {
*direction = Position { x: 0, y: 1 };
} else if context.is_key_pressed_this_frame(KeyCode::Up) {
*direction = Position { x: 0, y: -1 };
} else if context.is_key_pressed_this_frame(KeyCode::Right) {
*direction = Position { x: 1, y: 0 };
} else if context.is_key_pressed_this_frame(KeyCode::Left) {
*direction = Position { x: -1, y: 0 };
} else if context.is_key_pressed_this_frame(KeyCode::Down) {
*direction = Position { x: 0, y: 1 };
}
},
..TortuiseScript::empty()
};
|