diff options
| author | Mica White <botahamec@outlook.com> | 2026-10-26 11:04:14 -0400 |
|---|---|---|
| committer | Mica White <botahamec@outlook.com> | 2026-10-26 11:04:14 -0400 |
| commit | 2987e310e8e6eaeaa60546bb92a61d9c3713263a (patch) | |
| tree | 530ff5abe1b584bc1a6da5babd328d71d1e1173c /src/snake_controller.rs | |
Diffstat (limited to 'src/snake_controller.rs')
| -rw-r--r-- | src/snake_controller.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/snake_controller.rs b/src/snake_controller.rs new file mode 100644 index 0000000..0c48175 --- /dev/null +++ b/src/snake_controller.rs @@ -0,0 +1,38 @@ +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() +}; |
