From 36874a535a3d5f7f2955f33e34aa1a4768b6fec1 Mon Sep 17 00:00:00 2001
From: David Luevano Alvarado <david@luevano.xyz>
Date: Sat, 4 Jun 2022 03:17:22 -0600
Subject: added hud for snake size and grow progress

---
 src/entities/food/scenes/Food.tscn        | 16 ---------
 src/entities/food/scenes/FoodBasic.tscn   | 16 +++++++++
 src/entities/food/scenes/FoodManager.tscn |  4 +--
 src/entities/food/scripts/food.gd         | 59 ++++++++++++++++++++++++-------
 src/entities/food/scripts/food_basic.gd   | 10 ++++++
 src/entities/food/scripts/food_manager.gd | 19 +++++-----
 6 files changed, 86 insertions(+), 38 deletions(-)
 delete mode 100644 src/entities/food/scenes/Food.tscn
 create mode 100644 src/entities/food/scenes/FoodBasic.tscn
 create mode 100644 src/entities/food/scripts/food_basic.gd

(limited to 'src/entities/food')

diff --git a/src/entities/food/scenes/Food.tscn b/src/entities/food/scenes/Food.tscn
deleted file mode 100644
index 7accbc6..0000000
--- a/src/entities/food/scenes/Food.tscn
+++ /dev/null
@@ -1,16 +0,0 @@
-[gd_scene load_steps=3 format=2]
-
-[ext_resource path="res://entities/food/scripts/food.gd" type="Script" id=2]
-
-[sub_resource type="CircleShape2D" id=1]
-radius = 4.0
-
-[node name="Food" type="Area2D"]
-collision_layer = 256
-collision_mask = 0
-script = ExtResource( 2 )
-
-[node name="Sprite" type="Sprite" parent="."]
-
-[node name="Collision" type="CollisionShape2D" parent="."]
-shape = SubResource( 1 )
diff --git a/src/entities/food/scenes/FoodBasic.tscn b/src/entities/food/scenes/FoodBasic.tscn
new file mode 100644
index 0000000..5a4474e
--- /dev/null
+++ b/src/entities/food/scenes/FoodBasic.tscn
@@ -0,0 +1,16 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://entities/food/scripts/food_basic.gd" type="Script" id=1]
+
+[sub_resource type="CircleShape2D" id=1]
+radius = 4.0
+
+[node name="FoodBasic" type="Area2D"]
+collision_layer = 256
+collision_mask = 0
+script = ExtResource( 1 )
+
+[node name="Sprite" type="Sprite" parent="."]
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource( 1 )
diff --git a/src/entities/food/scenes/FoodManager.tscn b/src/entities/food/scenes/FoodManager.tscn
index 3287271..e56b9de 100644
--- a/src/entities/food/scenes/FoodManager.tscn
+++ b/src/entities/food/scenes/FoodManager.tscn
@@ -1,8 +1,8 @@
 [gd_scene load_steps=3 format=2]
 
-[ext_resource path="res://entities/food/scenes/Food.tscn" type="PackedScene" id=1]
+[ext_resource path="res://entities/food/scenes/FoodBasic.tscn" type="PackedScene" id=1]
 [ext_resource path="res://entities/food/scripts/food_manager.gd" type="Script" id=2]
 
 [node name="FoodManager" type="Node2D"]
 script = ExtResource( 2 )
-FOOD = ExtResource( 1 )
+FOOD_BASIC = ExtResource( 1 )
diff --git a/src/entities/food/scripts/food.gd b/src/entities/food/scripts/food.gd
index e8b0261..2e00978 100644
--- a/src/entities/food/scripts/food.gd
+++ b/src/entities/food/scripts/food.gd
@@ -1,24 +1,59 @@
 class_name Food
 extends Area2D
 
-enum Type {
-	APPLE
-}
+onready var _sprite: Sprite = $Sprite
 
-var _type_texture: Dictionary = {
-	Type.APPLE: preload("res://entities/food/sprites/apple.png")
-}
+var texture: Dictionary
+var timer: Timer
 
-export(Type) var TYPE
-onready var _sprite: Sprite = $Sprite
-var location: Vector2
+var properties: Dictionary
+var points: int = 1
+var time_to_live: float = -1.0
 
 
 func _ready():
+	randomize_stats()
+	_set_properties()
+	timer = Timer.new()
+	timer.one_shot = true
+
+	timer.connect("timeout", self, "_on_timer_timeout")
 	connect("body_entered", self, "_on_body_entered")
-	_sprite.texture = _type_texture[TYPE]
+
+
+func set_type(type: int) -> void:
+	set_property("type", type)
+	_sprite.texture = texture[type]
+
+
+func set_location(loc: Vector2) -> void:
+	set_property("location", loc)
+
+
+func set_timer(time: float) -> void:
+	time_to_live = time
+	if time_to_live != -1.0:
+		timer.wait_time = time_to_live
+		timer.start()
+
+
+func set_property(property: String, value) -> void:
+	properties[property] = value
+
+
+func _set_properties() -> void:
+	set_property("points", points)
+
+
+func randomize_stats() -> void:
+	points = int(rand_range(1, 30))
 
 
 func _on_body_entered(body: Node) -> void:
-	Event.emit_signal("food_eaten", TYPE, location)
-	queue_free()
\ No newline at end of file
+	Event.emit_signal("food_eaten", properties)
+	queue_free()
+
+
+func _on_timer_timeout() -> void:
+	Event.emit_signal("food_timed_out", properties)
+	queue_free()
diff --git a/src/entities/food/scripts/food_basic.gd b/src/entities/food/scripts/food_basic.gd
new file mode 100644
index 0000000..0a56208
--- /dev/null
+++ b/src/entities/food/scripts/food_basic.gd
@@ -0,0 +1,10 @@
+class_name FoodBasic
+extends Food
+
+enum Type {
+	APPLE
+}
+
+
+func _ready():
+	texture[Type.APPLE] = preload("res://entities/food/sprites/apple.png")
\ No newline at end of file
diff --git a/src/entities/food/scripts/food_manager.gd b/src/entities/food/scripts/food_manager.gd
index 426677c..4196806 100644
--- a/src/entities/food/scripts/food_manager.gd
+++ b/src/entities/food/scripts/food_manager.gd
@@ -1,7 +1,7 @@
 class_name FoodManager
 extends Node2D
 
-export(PackedScene) var FOOD: PackedScene
+export(PackedScene) var FOOD_BASIC: PackedScene
 export(NodePath) var WORLD_GENERATOR_NP: NodePath
 onready var world_generator: Node2D = get_node(WORLD_GENERATOR_NP)
 onready var possible_food_locations: Array = world_generator.get_valid_map_coords()
@@ -21,17 +21,21 @@ func _process(delta) -> void:
 
 
 func _place_new_food() -> void:
-	var food: Area2D = FOOD.instance()
-	Event.emit_signal("food_placing_new_food", food.TYPE)
+	var food: FoodBasic = FOOD_BASIC.instance()
+	var type: int = FoodBasic.Type.APPLE
+	Event.emit_signal("food_placing_new_food", type)
 	var pos_loc: Array = _get_random_pos()
 	var pos: Vector2 = pos_loc[0]
 	var loc: Vector2 = pos_loc[1]
 
+	# need to set the position first, else it will spawn on the middle and the moved
 	food.global_position = pos
-	food.location = loc
 	add_child(food)
+	food.set_type(FoodBasic.Type.APPLE)
+	food.set_location(loc)
+	food.properties["points"] = 1
 	current_food.append(loc)
-	Event.emit_signal("food_placed_new_food", food.TYPE, loc)
+	Event.emit_signal("food_placed_new_food", food.properties["type"], food.properties["location"])
 
 
 func _get_random_pos() -> Array:
@@ -40,7 +44,6 @@ func _get_random_pos() -> Array:
 	var location: Vector2
 
 	while not found_valid_loc:
-		print("trying")
 		index = randi() % possible_food_locations.size()
 		location = possible_food_locations[index]
 		if current_food.find(location) == -1:
@@ -49,6 +52,6 @@ func _get_random_pos() -> Array:
 	return [world_generator.get_centered_world_position(location), location]
 
 
-func _on_food_eaten(type: int, location: Vector2) -> void:
-	var index: int = current_food.find(location)
+func _on_food_eaten(properties: Dictionary) -> void:
+	var index: int = current_food.find(properties["location"])
 	current_food.remove(index)
-- 
cgit v1.2.3-70-g09d2