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/scripts/food.gd | 59 ++++++++++++++++++++++++------- src/entities/food/scripts/food_basic.gd | 10 ++++++ src/entities/food/scripts/food_manager.gd | 19 +++++----- 3 files changed, 68 insertions(+), 20 deletions(-) create mode 100644 src/entities/food/scripts/food_basic.gd (limited to 'src/entities/food/scripts') 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