From 36874a535a3d5f7f2955f33e34aa1a4768b6fec1 Mon Sep 17 00:00:00 2001 From: David Luevano Alvarado 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-54-g00ecf