From 898877f09808691a5e5d45850d27ae85f270db16 Mon Sep 17 00:00:00 2001
From: David Luevano Alvarado <david@luevano.xyz>
Date: Thu, 2 Jun 2022 02:35:03 -0600
Subject: add food system

---
 src/entities/food/scenes/Food.tscn         |  16 ++++++++++++
 src/entities/food/scenes/FoodManager.tscn  |   8 ++++++
 src/entities/food/scripts/food.gd          |  23 +++++++++++++++++
 src/entities/food/scripts/food_manager.gd  |  39 +++++++++++++++++++++++++++++
 src/entities/food/sprites/apple.png        | Bin 0 -> 148 bytes
 src/entities/food/sprites/apple.png.import |  35 ++++++++++++++++++++++++++
 6 files changed, 121 insertions(+)
 create mode 100644 src/entities/food/scenes/Food.tscn
 create mode 100644 src/entities/food/scenes/FoodManager.tscn
 create mode 100644 src/entities/food/scripts/food.gd
 create mode 100644 src/entities/food/scripts/food_manager.gd
 create mode 100644 src/entities/food/sprites/apple.png
 create mode 100644 src/entities/food/sprites/apple.png.import

(limited to 'src/entities/food')

diff --git a/src/entities/food/scenes/Food.tscn b/src/entities/food/scenes/Food.tscn
new file mode 100644
index 0000000..bc330e2
--- /dev/null
+++ b/src/entities/food/scenes/Food.tscn
@@ -0,0 +1,16 @@
+[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 = 7.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/FoodManager.tscn b/src/entities/food/scenes/FoodManager.tscn
new file mode 100644
index 0000000..3287271
--- /dev/null
+++ b/src/entities/food/scenes/FoodManager.tscn
@@ -0,0 +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/scripts/food_manager.gd" type="Script" id=2]
+
+[node name="FoodManager" type="Node2D"]
+script = ExtResource( 2 )
+FOOD = ExtResource( 1 )
diff --git a/src/entities/food/scripts/food.gd b/src/entities/food/scripts/food.gd
new file mode 100644
index 0000000..1689837
--- /dev/null
+++ b/src/entities/food/scripts/food.gd
@@ -0,0 +1,23 @@
+class_name Food
+extends Area2D
+
+enum Type {
+	APPLE
+}
+
+var _type_texture: Dictionary = {
+	Type.APPLE: preload("res://entities/food/sprites/apple.png")
+}
+
+export(Type) var TYPE
+onready var _sprite: Sprite = $Sprite
+
+
+func _ready():
+	connect("body_entered", self, "_on_body_entered")
+	_sprite.texture = _type_texture[TYPE]
+
+
+func _on_body_entered(body: Node) -> void:
+	Event.emit_signal("food_eaten", TYPE)
+	queue_free()
\ No newline at end of file
diff --git a/src/entities/food/scripts/food_manager.gd b/src/entities/food/scripts/food_manager.gd
new file mode 100644
index 0000000..20772db
--- /dev/null
+++ b/src/entities/food/scripts/food_manager.gd
@@ -0,0 +1,39 @@
+class_name FoodManager
+extends Node2D
+
+export(PackedScene) var FOOD: PackedScene
+
+var max_apples: int = 10
+var current_apples: int = 0
+
+
+func _ready():
+	Event.connect("food_eaten", self, "_on_food_eaten")
+	randomize()
+
+
+func _process(delta) -> void:
+	if current_apples < max_apples:
+		_place_new_food()
+		current_apples += 1
+
+
+func _place_new_food() -> void:
+	var food: Area2D = FOOD.instance()
+	Event.emit_signal("food_placing_new_food", food.TYPE)
+	var position: Vector2 = _get_random_pos()
+	food.global_position = position
+	add_child(food)
+	Event.emit_signal("food_placed_new_food", food.TYPE)
+
+
+func _get_random_pos() -> Vector2:
+	var screen_size: Vector2 = get_viewport().get_visible_rect().size
+	var temp_x: float = randf() * screen_size.x - screen_size.x / 2.0
+	var temp_y: float = randf() * screen_size.y - screen_size.y / 2.0
+
+	return Vector2(temp_x, temp_y)
+
+
+func _on_food_eaten(type: int) -> void:
+	current_apples -= 1
\ No newline at end of file
diff --git a/src/entities/food/sprites/apple.png b/src/entities/food/sprites/apple.png
new file mode 100644
index 0000000..d4fd6ad
Binary files /dev/null and b/src/entities/food/sprites/apple.png differ
diff --git a/src/entities/food/sprites/apple.png.import b/src/entities/food/sprites/apple.png.import
new file mode 100644
index 0000000..c007dad
--- /dev/null
+++ b/src/entities/food/sprites/apple.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/apple.png-3f0e1c07d45c9f73006d6dd04c7dfa93.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://entities/food/sprites/apple.png"
+dest_files=[ "res://.import/apple.png-3f0e1c07d45c9f73006d6dd04c7dfa93.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=false
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0
-- 
cgit v1.2.3-70-g09d2