From 8165182a3ec840726eaa75678ea23f7ef8e6938e Mon Sep 17 00:00:00 2001
From: David Luevano Alvarado <david@luevano.xyz>
Date: Sun, 29 May 2022 18:29:56 -0600
Subject: working kinematic snake, need to fix the scenes

---
 src/entities/actors/snake/snake.gd | 73 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)
 create mode 100644 src/entities/actors/snake/snake.gd

(limited to 'src')

diff --git a/src/entities/actors/snake/snake.gd b/src/entities/actors/snake/snake.gd
new file mode 100644
index 0000000..553309b
--- /dev/null
+++ b/src/entities/actors/snake/snake.gd
@@ -0,0 +1,73 @@
+class_name Snake
+extends KinematicBody2D
+
+export(float, 10.0, 1000.0, 10.0) var SPEED: float = 100.0
+
+var velocity: Vector2 = Vector2.ZERO
+
+enum {
+	NULL=-1,
+	UP,
+	DOWN,
+	LEFT,
+	RIGHT
+}
+
+var direction: Dictionary = {
+	UP: Vector2.UP,
+	DOWN: Vector2.DOWN,
+	LEFT: Vector2.LEFT,
+	RIGHT: Vector2.RIGHT
+}
+
+var _direction_state: int = UP
+var _input_direction: int = NULL
+
+
+func _physics_process(delta: float) -> void:
+	_input_direction = _get_direction_input()
+
+	match _direction_state:
+		NULL:
+			print("No input detected, not changing direction.")
+		UP:
+			if _input_direction == LEFT or _input_direction == RIGHT:
+				_change_direction_to(_input_direction)
+		DOWN:
+			if _input_direction == LEFT or _input_direction == RIGHT:
+				_change_direction_to(_input_direction)
+		LEFT:
+			if _input_direction == UP or _input_direction == DOWN:
+				_change_direction_to(_input_direction)
+		RIGHT:
+			if _input_direction == UP or _input_direction == DOWN:
+				_change_direction_to(_input_direction)
+
+	move_and_slide(SPEED * direction[_direction_state], Vector2.ZERO, false, 4, PI/4, false)
+
+
+func _change_direction_to(new_direction: int) -> void:
+	_direction_state = new_direction
+
+	match _direction_state:
+		UP:
+			rotation = 0
+		DOWN:
+			rotation = PI
+		LEFT:
+			rotation = -PI/2
+		RIGHT:
+			rotation = PI/2
+
+
+func _get_direction_input() -> int:
+	if Input.is_action_pressed("move_up"):
+		return UP
+	elif Input.is_action_pressed("move_down"):
+		return DOWN
+	elif Input.is_action_pressed("move_left"):
+		return LEFT
+	elif Input.is_action_pressed("move_right"):
+		return RIGHT
+
+	return NULL
-- 
cgit v1.2.3-70-g09d2