use tortuise_script::{ input::{KeyCode, Position as MousePosition}, ScriptContext, TortuiseScript, }; use crate::{Position, DIRECTION}; fn is_inside_box(mouse: Option, 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() };