diff options
Diffstat (limited to 'src/entities/food')
-rw-r--r-- | src/entities/food/scenes/FoodBasic.tscn (renamed from src/entities/food/scenes/Food.tscn) | 6 | ||||
-rw-r--r-- | src/entities/food/scenes/FoodManager.tscn | 4 | ||||
-rw-r--r-- | src/entities/food/scripts/food.gd | 59 | ||||
-rw-r--r-- | src/entities/food/scripts/food_basic.gd | 10 | ||||
-rw-r--r-- | src/entities/food/scripts/food_manager.gd | 19 |
5 files changed, 73 insertions, 25 deletions
diff --git a/src/entities/food/scenes/Food.tscn b/src/entities/food/scenes/FoodBasic.tscn index 7accbc6..5a4474e 100644 --- a/src/entities/food/scenes/Food.tscn +++ b/src/entities/food/scenes/FoodBasic.tscn @@ -1,14 +1,14 @@ [gd_scene load_steps=3 format=2] -[ext_resource path="res://entities/food/scripts/food.gd" type="Script" id=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="Food" type="Area2D"] +[node name="FoodBasic" type="Area2D"] collision_layer = 256 collision_mask = 0 -script = ExtResource( 2 ) +script = ExtResource( 1 ) [node name="Sprite" type="Sprite" parent="."] 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) |