From e4423cc8490b7f5ec3449f568bf64e81f4d03248 Mon Sep 17 00:00:00 2001 From: David Luevano Alvarado Date: Sun, 5 Jun 2022 04:38:44 -0600 Subject: add more food types, refactored code and tidy up stuff --- src/entities/food/scripts/food.gd | 39 +++++++---------------- src/entities/food/scripts/food_basic.gd | 2 +- src/entities/food/scripts/food_manager.gd | 52 +++++++++++++++++++++++++------ src/entities/food/scripts/food_special.gd | 16 ++++++++++ 4 files changed, 71 insertions(+), 38 deletions(-) create mode 100644 src/entities/food/scripts/food_special.gd (limited to 'src/entities/food/scripts') diff --git a/src/entities/food/scripts/food.gd b/src/entities/food/scripts/food.gd index aa5207f..386f0e5 100644 --- a/src/entities/food/scripts/food.gd +++ b/src/entities/food/scripts/food.gd @@ -7,13 +7,9 @@ var texture: Dictionary var timer: Timer 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 @@ -21,35 +17,24 @@ func _ready(): connect("body_entered", self, "_on_body_entered") -func set_type(type: int) -> void: - set_property("type", type) - _sprite.texture = texture[type] +func update_texture() -> void: + _sprite.texture = texture[properties["type"]] -func set_location(loc: Vector2) -> void: - set_property("location", loc) +func set_properties(pos: Vector2, loc: Vector2, special: bool, type: int, points: int=1, ttl: float = -1.0) -> void: + properties["global_position"] = pos + global_position = pos + properties["location"] = loc + properties["special"] = special + properties["type"] = type - -func set_timer(time: float) -> void: - time_to_live = time - if time_to_live != -1.0: - timer.wait_time = time_to_live + properties["points"] = points + properties["ttl"] = ttl + if properties["ttl"] != -1.0: + timer.wait_time = properties["ttl"] timer.start() -func set_property(property: String, value) -> void: - properties[property] = value - - -func _set_properties() -> void: - set_property("points", points) - set_property("global_position", global_position) - - -func randomize_stats() -> void: - points = int(rand_range(1, 10)) - - func _on_body_entered(body: Node) -> void: Event.emit_signal("food_eaten", properties) queue_free() diff --git a/src/entities/food/scripts/food_basic.gd b/src/entities/food/scripts/food_basic.gd index 032ec23..8090cdc 100644 --- a/src/entities/food/scripts/food_basic.gd +++ b/src/entities/food/scripts/food_basic.gd @@ -9,4 +9,4 @@ enum Type { func _ready(): texture[Type.APPLE] = preload("res://entities/food/sprites/apple.png") - texture[Type.BANANA] = preload("res://entities/food/sprites/banana.png") \ No newline at end of file + texture[Type.BANANA] = preload("res://entities/food/sprites/banana.png") diff --git a/src/entities/food/scripts/food_manager.gd b/src/entities/food/scripts/food_manager.gd index bbe27be..a605f9e 100644 --- a/src/entities/food/scripts/food_manager.gd +++ b/src/entities/food/scripts/food_manager.gd @@ -2,39 +2,66 @@ class_name FoodManager extends Node2D export(PackedScene) var FOOD_BASIC: PackedScene +export(PackedScene) var FOOD_SPECIAL: 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() +# needed to know what food is available to setup +var stats: Stats = SaveData.get_stats() + var current_basic_food: Array = [] +var current_special_food: Array = [] +var max_basic_food: int +var max_special_food: int func _ready(): randomize() + max_basic_food = int(possible_food_locations.size() * Global.MAX_BASIC_FOOD) + max_special_food = int(possible_food_locations.size() * Global.MAX_SPECIAL_FOOD) Event.connect("food_eaten", self, "_on_food_eaten") func _process(delta) -> void: - if current_basic_food.size() < Global.MAX_BASIC_FOOD: + if current_basic_food.size() < max_basic_food: _place_new_basic_food() + if current_special_food.size() < max_special_food: + _place_new_special_food() + func _place_new_basic_food() -> void: var food: FoodBasic = FOOD_BASIC.instance() var type: int = _get_random_food_type(FoodBasic.Type) - Event.emit_signal("food_placing_new_food", type) + Event.emit_signal("food_placing_new_food", false, 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.set_properties(pos, loc, false, type) add_child(food) - food.set_type(type) - food.set_location(loc) - # food.properties["points"] = 1 + food.update_texture() current_basic_food.append(loc) - Event.emit_signal("food_placed_new_food", food.properties["type"], food.properties["location"]) + Event.emit_signal("food_placed_new_food", food.properties) + + +func _place_new_special_food() -> void: + var food: FoodSpecial = FOOD_SPECIAL.instance() + var type: int = _get_random_food_type(FoodSpecial.Type) + Event.emit_signal("food_placing_new_food", true, 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.set_properties(pos, loc, true, type, Global.POINTS_TO_GROW) + add_child(food) + food.update_texture() + current_special_food.append(loc) + Event.emit_signal("food_placed_new_food", food.properties) func _get_random_food_type(type) -> int: @@ -49,12 +76,17 @@ func _get_random_pos() -> Array: while not found_valid_loc: index = randi() % possible_food_locations.size() location = possible_food_locations[index] - if current_basic_food.find(location) == -1: + if current_basic_food.find(location) == -1 and current_special_food.find(location) == -1: found_valid_loc = true return [world_generator.get_centered_world_position(location), location] func _on_food_eaten(properties: Dictionary) -> void: - var index: int = current_basic_food.find(properties["location"]) - current_basic_food.remove(index) + var index: int + if properties["special"]: + index = current_special_food.find(properties["location"]) + current_special_food.remove(index) + else: + index = current_basic_food.find(properties["location"]) + current_basic_food.remove(index) diff --git a/src/entities/food/scripts/food_special.gd b/src/entities/food/scripts/food_special.gd new file mode 100644 index 0000000..c2fde78 --- /dev/null +++ b/src/entities/food/scripts/food_special.gd @@ -0,0 +1,16 @@ +class_name FoodSpecial +extends Food + +enum Type { + BUNNY, + FROG, + TURTLE, + RAT +} + + +func _ready(): + texture[Type.BUNNY] = preload("res://entities/food/sprites/bunny.png") + texture[Type.FROG] = preload("res://entities/food/sprites/frog.png") + texture[Type.TURTLE] = preload("res://entities/food/sprites/turtle.png") + texture[Type.RAT] = preload("res://entities/food/sprites/rat.png") -- cgit v1.2.3