summaryrefslogtreecommitdiff
path: root/src/snake_controller.rs
diff options
context:
space:
mode:
authorMica White <botahamec@outlook.com>2026-10-26 11:04:14 -0400
committerMica White <botahamec@outlook.com>2026-10-26 11:04:14 -0400
commit2987e310e8e6eaeaa60546bb92a61d9c3713263a (patch)
tree530ff5abe1b584bc1a6da5babd328d71d1e1173c /src/snake_controller.rs
Snake exampleHEADmain
Diffstat (limited to 'src/snake_controller.rs')
-rw-r--r--src/snake_controller.rs38
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()
+};