From fbddb8ffa2af7a96b6c4975c7b6ec61bfd39c171 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Fri, 3 May 2024 01:37:20 +0200 Subject: [PATCH] stuff --- behaviours/spawner.gd | 2 +- behaviours/timer_stddev.gd | 2 +- entities/chupacabra.gd | 41 ++++---------- entities/chupacabra.tscn | 17 ++---- entities/cthulhu.gd | 34 ++---------- entities/cthulhu.tscn | 11 +--- entities/entity.gd | 108 +++++++++++++++++++++++++++++++++++++ entities/imp.gd | 42 ++------------- entities/imp.tscn | 16 +----- entities/monocle.gd | 24 ++------- entities/monocle.tscn | 1 + entities/sheep.gd | 39 ++------------ entities/sheep.tscn | 16 +----- entities/skull.gd | 24 ++------- entities/top_hat.gd | 24 ++------- entities/top_hat.tscn | 1 + entities/watcher.gd | 27 ++++------ entities/watcher.tscn | 23 +++----- enums.gd | 5 ++ scenes/game/main_game.tscn | 18 ++++++- 20 files changed, 194 insertions(+), 281 deletions(-) create mode 100644 entities/entity.gd diff --git a/behaviours/spawner.gd b/behaviours/spawner.gd index 62c1d26..f5af2ea 100644 --- a/behaviours/spawner.gd +++ b/behaviours/spawner.gd @@ -40,7 +40,7 @@ func spawn(): return null var entity = scene.instantiate() entity.global_position = global_position - target.add_child.call_deferred(entity) # Not sure why this is needed. + target.add_child(entity) spawned.emit(entity) return entity diff --git a/behaviours/timer_stddev.gd b/behaviours/timer_stddev.gd index 3d7c838..51dc646 100644 --- a/behaviours/timer_stddev.gd +++ b/behaviours/timer_stddev.gd @@ -14,8 +14,8 @@ class_name TimerStddev func randomize_wait_time() -> void: wait_time = clampf( - min_secs, Random.rng.randfn(mean_secs, deviation), + min_secs, max_secs ) diff --git a/entities/chupacabra.gd b/entities/chupacabra.gd index 1babaa0..0cc54d5 100644 --- a/entities/chupacabra.gd +++ b/entities/chupacabra.gd @@ -1,56 +1,35 @@ -extends BetterCharacterBody2D +extends Entity class_name Chupacabra @export var skitter_directions: Array[Vector2] = [] -@onready var sprite: SpriteLeftRight = %"Sprite" @onready var movement_wander: MoveStraight = %"MovementWander" @onready var movement_wander_tp: TargetPicker = movement_wander.get_node("TrackerMeat/TargetPicker") -@onready var animator: AnimationPlayer = %"Animator" -@onready var eater: Eater = %"Eater" -@onready var tophatter: Eater = %"TopHatter" -@onready var monocler: Eater = %"Monocler" -func _on_move(movement: Vector2) -> void: - move_and_collide(movement) - sprite.handle_move(movement) - -func _on_eater_eaten(edible:Edible) -> void: - edible.get_parent().queue_free() - func _on_dragged(_cursor: Cursor) -> void: - collision_layer = 16 - collision_mask = 16 - tophatter.collision_mask = 16 - monocler.collision_mask = 16 - z_index = Enums.ZIndex.EntityAir - y_sort_enabled = false - eater.collision_mask = 16 + set_flying() animator.play(&"drag_start") func _on_fallen() -> void: - collision_layer = 8 - collision_mask = 8 - tophatter.collision_mask = 8 - monocler.collision_mask = 8 - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true - eater.collision_mask = 8 + set_grounded() animator.play(&"RESET") func _on_trapped() -> void: - z_index = Enums.ZIndex.EntitySacrifice - y_sort_enabled = false + set_trapped() func _on_freed() -> void: - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true + set_grounded() func _on_wander_enabled() -> void: if movement_wander_tp.target: movement_wander.steer_direction_towards(movement_wander_tp.target) else: movement_wander.randomize_direction() + +func _on_gold_spawner_spawned(entity:Node2D) -> void: + entity.get_node("MoveStraight").speed = 25 + entity.get_node("MoveStraight").randomize_direction() + entity.get_node("MoveStraight/Priority").priority_alternative() diff --git a/entities/chupacabra.tscn b/entities/chupacabra.tscn index 91a87af..450c7ed 100644 --- a/entities/chupacabra.tscn +++ b/entities/chupacabra.tscn @@ -559,22 +559,11 @@ debug_color = Color(1, 0, 0, 0.294118) stream = ExtResource("17_ccla5") bus = &"KillSounds" -[connection signal="eaten" from="Sprite/TopHatter" to="." method="_on_eater_eaten"] -[connection signal="eaten" from="Sprite/TopHatter" to="Sprite/TopHatter" method="clear_diets" unbinds=1] -[connection signal="eaten" from="Sprite/TopHatter" to="Sprite/TopHatter/Spawner" method="enable" unbinds=1] -[connection signal="goal_reached" from="Sprite/TopHatter" to="Sprite/TopHatter/Sprite" method="show"] -[connection signal="goal_reached" from="Sprite/TopHatter" to="Sprite/TopHatter/Sacrificable" method="set_kind" binds= [&"TopHat"]] -[connection signal="tree_exiting" from="Sprite/TopHatter/Spawner" to="Sprite/TopHatter/Spawner" method="spawn"] -[connection signal="sacrificed" from="Sprite/TopHatter/Sacrificable" to="." method="queue_free"] -[connection signal="eaten" from="Sprite/Monocler" to="." method="_on_eater_eaten"] -[connection signal="eaten" from="Sprite/Monocler" to="Sprite/Monocler" method="clear_diets" unbinds=1] -[connection signal="eaten" from="Sprite/Monocler" to="Sprite/Monocler/Spawner" method="enable" unbinds=1] -[connection signal="goal_reached" from="Sprite/Monocler" to="Sprite/Monocler/Sprite" method="show"] -[connection signal="goal_reached" from="Sprite/Monocler" to="Sprite/Monocler/Sacrificable" method="set_kind" binds= [&"Monocles"]] -[connection signal="tree_exiting" from="Sprite/Monocler/Spawner" to="Sprite/Monocler/Spawner" method="spawn"] -[connection signal="sacrificed" from="Sprite/Monocler/Sacrificable" to="." method="queue_free"] +[connection signal="eaten" from="Edible" to="." method="queue_free"] [connection signal="sacrificed" from="Sacrificable" to="." method="queue_free"] +[connection signal="spawned" from="GoldSpawner" to="." method="_on_gold_spawner_spawned"] [connection signal="timeout" from="GoldSpawner/SpawnTimer" to="GoldSpawner" method="spawn"] +[connection signal="timeout" from="GoldSpawner/SpawnTimer" to="GoldSpawner/SpawnTimer" method="randomize_wait_time"] [connection signal="move" from="MovementIdle" to="." method="_on_move"] [connection signal="move_disabled" from="MovementIdle" to="MovementIdle/BoredTimer" method="stop"] [connection signal="move_enabled" from="MovementIdle" to="MovementIdle/BoredTimer" method="start"] diff --git a/entities/cthulhu.gd b/entities/cthulhu.gd index 479bb54..95bc513 100644 --- a/entities/cthulhu.gd +++ b/entities/cthulhu.gd @@ -1,45 +1,17 @@ -extends BetterCharacterBody2D +extends Entity class_name Cthulhu -@onready var sprite: SpriteLeftRight = %"Sprite" -@onready var animator: AnimationPlayer = %"Animator" -@onready var tophatter: Eater = %"TopHatter" -@onready var monocler: Eater = %"Monocler" - -func _ready(): - # Setup index and layers - _on_fallen() - -func _on_move(movement: Vector2): - better_move_and_collide(movement) - sprite.handle_move(movement) - func _on_dragged(_cursor: Cursor) -> void: - collision_layer = 16 - collision_mask = 16 - tophatter.collision_mask = 16 - monocler.collision_mask = 16 - z_index = Enums.ZIndex.EntityAir - y_sort_enabled = false + set_flying() animator.play(&"drag_start") func _on_fallen() -> void: - collision_layer = 8 - collision_mask = 8 - tophatter.collision_mask = 8 - monocler.collision_mask = 8 - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true + set_grounded() animator.play(&"RESET") -func _on_eater_eaten(edible: Edible) -> void: - edible.get_parent().queue_free() - func _on_gold_spawner_spawned(entity:Node2D) -> void: entity.scale *= 2 entity.get_node("Collectible").quantity = 25 entity.get_node("MoveStraight").randomize_direction() entity.get_node("MoveStraight/Priority").priority_alternative() - - diff --git a/entities/cthulhu.tscn b/entities/cthulhu.tscn index 719ee24..51b1d16 100644 --- a/entities/cthulhu.tscn +++ b/entities/cthulhu.tscn @@ -317,16 +317,6 @@ mean_secs = 0.15 min_secs = 0.05 max_secs = 0.3 -[connection signal="eaten" from="SpriteFocus/Sprite/TopHatter" to="." method="_on_eater_eaten"] -[connection signal="eaten" from="SpriteFocus/Sprite/TopHatter" to="SpriteFocus/Sprite/TopHatter" method="clear_diets" unbinds=1] -[connection signal="eaten" from="SpriteFocus/Sprite/TopHatter" to="SpriteFocus/Sprite/TopHatter/Spawner" method="enable" unbinds=1] -[connection signal="goal_reached" from="SpriteFocus/Sprite/TopHatter" to="SpriteFocus/Sprite/TopHatter/Sprite" method="show"] -[connection signal="tree_exiting" from="SpriteFocus/Sprite/TopHatter/Spawner" to="SpriteFocus/Sprite/TopHatter/Spawner" method="spawn"] -[connection signal="eaten" from="SpriteFocus/Sprite/Monocler" to="." method="_on_eater_eaten"] -[connection signal="eaten" from="SpriteFocus/Sprite/Monocler" to="SpriteFocus/Sprite/Monocler" method="clear_diets" unbinds=1] -[connection signal="eaten" from="SpriteFocus/Sprite/Monocler" to="SpriteFocus/Sprite/Monocler/Spawner" method="enable" unbinds=1] -[connection signal="goal_reached" from="SpriteFocus/Sprite/Monocler" to="SpriteFocus/Sprite/Monocler/Sprite" method="show"] -[connection signal="tree_exiting" from="SpriteFocus/Sprite/Monocler/Spawner" to="SpriteFocus/Sprite/Monocler/Spawner" method="spawn"] [connection signal="dragged" from="MovementDrag" to="." method="_on_dragged"] [connection signal="dragged" from="MovementDrag" to="MovementDrag/DragPriority" method="priority_alternative" unbinds=1] [connection signal="dragged" from="MovementDrag" to="MovementDrag/DragSound" method="play" unbinds=1] @@ -340,3 +330,4 @@ max_secs = 0.3 [connection signal="eaten" from="Eater" to="Eater/EatSound" method="play" unbinds=1] [connection signal="spawned" from="GoldSpawner" to="." method="_on_gold_spawner_spawned"] [connection signal="timeout" from="GoldSpawner/SpawnTimer" to="GoldSpawner" method="spawn"] +[connection signal="timeout" from="GoldSpawner/SpawnTimer" to="GoldSpawner/SpawnTimer" method="randomize_wait_time"] diff --git a/entities/entity.gd b/entities/entity.gd new file mode 100644 index 0000000..671188b --- /dev/null +++ b/entities/entity.gd @@ -0,0 +1,108 @@ +extends BetterCharacterBody2D +class_name Entity + + +## The [SpriteLeftRight] of this entity, or null if it doesn't have one. +@onready var sprite: SpriteLeftRight = get_node_or_null("%Sprite") + +## The main [Eater] of this entity, or null if it doesn't have one. +@onready var eater: Eater = get_node_or_null("%Eater") + +## The main [AnimationPlayer] of this entity, or null if it doesn't have one. +@onready var animator: AnimationPlayer = get_node_or_null("%Animator") + +## The [Eater] controlling the appearence of the [TopHat] on this entity, or null if this isn't supported. +@onready var tophatter: Eater = get_node_or_null("%TopHatter") + +## The [Eater] controlling the appearence of the [Monocle] on this entity, or null if this isn't supported. +@onready var monocler: Eater = get_node_or_null("%Monocler") + + +enum State { + GROUNDED = 0, + FLYING = 1, + TRAPPED = 2, +} + +## The [State] this entity is in. +var state := State.GROUNDED + + +## Set the entity to be considered walking on the ground. +func set_grounded(): + state = State.GROUNDED + collision_layer = Enums.PhysLayers.EntityGround + collision_mask = Enums.PhysLayers.EntityGround + if tophatter: + tophatter.collision_mask = Enums.PhysLayers.EntityGround + if monocler: + monocler.collision_mask = Enums.PhysLayers.EntityGround + if eater: + eater.collision_mask = Enums.PhysLayers.EntityGround + z_index = Enums.ZIndex.EntityGround + y_sort_enabled = true + +## Set the entity to be considered hovering in the air. +func set_flying(): + state = State.FLYING + collision_layer = Enums.PhysLayers.EntityAir + collision_mask = Enums.PhysLayers.EntityAir + if tophatter: + tophatter.collision_mask = Enums.PhysLayers.EntityAir + if monocler: + monocler.collision_mask = Enums.PhysLayers.EntityAir + if eater: + eater.collision_mask = Enums.PhysLayers.EntityAir + z_index = Enums.ZIndex.EntityAir + y_sort_enabled = false + +## Set the entity to be considered trapped in a [SacrificeStone]. +func set_trapped(): + state = State.TRAPPED + z_index = Enums.ZIndex.EntitySacrifice + y_sort_enabled = false + +## Handle a signal controlling movement. +func handle_movement(movement: Vector2) -> void: + better_move_and_collide(movement) + if sprite: + sprite.handle_move(movement) + +## Initialize the signals of the [field tophatter], if it exists. +func _init_tophatter_signals() -> void: + if tophatter: + var subsprite: Sprite2D = tophatter.get_node("Sprite") + var spawner: Spawner = tophatter.get_node("Spawner") + var sacrificable: Sacrificable = tophatter.get_node_or_null("Sacrificable") + tophatter.eaten.connect(func(edible: Edible): edible.queue_free()) + tophatter.goal_reached.connect(tophatter.clear_diets) + tophatter.goal_reached.connect(subsprite.show) + tophatter.goal_reached.connect(spawner.enable) + spawner.tree_exiting.connect(spawner.spawn) + if sacrificable: + sacrificable.sacrificed.connect(queue_free) + tophatter.goal_reached.connect(func(): sacrificable.set_kind(&"TopHat")) + +## Initialize the signals of the [field monocler], if it exists. +func _init_monocler_signals() -> void: + if monocler: + var subsprite: Sprite2D = monocler.get_node("Sprite") + var spawner: Spawner = monocler.get_node("Spawner") + var sacrificable: Sacrificable = monocler.get_node_or_null("Sacrificable") + monocler.eaten.connect(func(edible: Edible): edible.queue_free()) + monocler.goal_reached.connect(monocler.clear_diets) + monocler.goal_reached.connect(subsprite.show) + monocler.goal_reached.connect(spawner.enable) + spawner.tree_exiting.connect(spawner.spawn) + if sacrificable: + monocler.goal_reached.connect(func(): sacrificable.set_kind(&"Monocle")) + sacrificable.sacrificed.connect(queue_free) + + +## Backwards compatible name for [method handle_movement]. +func _on_move(movement: Vector2) -> void: + handle_movement(movement) + +func _ready() -> void: + _init_tophatter_signals() + _init_monocler_signals() diff --git a/entities/imp.gd b/entities/imp.gd index b998d7f..d888a14 100644 --- a/entities/imp.gd +++ b/entities/imp.gd @@ -1,49 +1,17 @@ -extends BetterCharacterBody2D +extends Entity class_name Imp -@onready var sprite: SpriteLeftRight = %"Sprite" -@onready var eater: Eater = %"Eater" -@onready var animator: AnimationPlayer = %"Animator" -@onready var tophatter: Eater = %"TopHatter" -@onready var monocler: Eater = %"Monocler" - - -func _ready(): - # Setup index and layers - _on_fallen() - -func _on_move(movement: Vector2): - better_move_and_collide(movement) - sprite.handle_move(movement) - -func _on_eater_eaten(edible: Edible) -> void: - edible.get_parent().queue_free() - func _on_dragged(_cursor: Cursor) -> void: - collision_layer = 16 - collision_mask = 16 - tophatter.collision_mask = 16 - monocler.collision_mask = 16 - z_index = Enums.ZIndex.EntityAir - y_sort_enabled = false - eater.collision_mask = 16 + set_flying() animator.play(&"drag_start") func _on_fallen() -> void: - collision_layer = 8 - collision_mask = 8 - tophatter.collision_mask = 8 - monocler.collision_mask = 8 - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true - eater.collision_mask = 8 + set_grounded() animator.play(&"RESET") func _on_trapped() -> void: - z_index = Enums.ZIndex.EntitySacrifice - y_sort_enabled = false + set_trapped() func _on_freed() -> void: - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true + set_grounded() diff --git a/entities/imp.tscn b/entities/imp.tscn index 3887d03..0ec8b7d 100644 --- a/entities/imp.tscn +++ b/entities/imp.tscn @@ -415,22 +415,10 @@ debug_color = Color(1, 0, 0, 0.294118) stream = ExtResource("19_7la6c") bus = &"KillSounds" -[connection signal="eaten" from="Sprite/TopHatter" to="." method="_on_eater_eaten"] -[connection signal="eaten" from="Sprite/TopHatter" to="Sprite/TopHatter" method="clear_diets" unbinds=1] -[connection signal="eaten" from="Sprite/TopHatter" to="Sprite/TopHatter/Spawner" method="enable" unbinds=1] -[connection signal="goal_reached" from="Sprite/TopHatter" to="Sprite/TopHatter/Sprite" method="show"] -[connection signal="goal_reached" from="Sprite/TopHatter" to="Sprite/TopHatter/Sacrificable" method="set_kind" binds= [&"Monocle"]] -[connection signal="tree_exiting" from="Sprite/TopHatter/Spawner" to="Sprite/TopHatter/Spawner" method="spawn"] -[connection signal="sacrificed" from="Sprite/TopHatter/Sacrificable" to="." method="queue_free"] -[connection signal="eaten" from="Sprite/Monocler" to="." method="_on_eater_eaten"] -[connection signal="eaten" from="Sprite/Monocler" to="Sprite/Monocler" method="clear_diets" unbinds=1] -[connection signal="eaten" from="Sprite/Monocler" to="Sprite/Monocler/Spawner" method="enable" unbinds=1] -[connection signal="goal_reached" from="Sprite/Monocler" to="Sprite/Monocler/Sprite" method="show"] -[connection signal="goal_reached" from="Sprite/Monocler" to="Sprite/Monocler/Sacrificable" method="set_kind" binds= [&"Monocle"]] -[connection signal="tree_exiting" from="Sprite/Monocler/Spawner" to="Sprite/Monocler/Spawner" method="spawn"] -[connection signal="sacrificed" from="Sprite/Monocler/Sacrificable" to="." method="queue_free"] +[connection signal="eaten" from="Edible" to="." method="queue_free"] [connection signal="sacrificed" from="Sacrificable" to="." method="queue_free"] [connection signal="timeout" from="GoldSpawner/SpawnTimer" to="GoldSpawner" method="spawn"] +[connection signal="timeout" from="GoldSpawner/SpawnTimer" to="GoldSpawner/SpawnTimer" method="randomize_wait_time"] [connection signal="changed_direction" from="MovementWander" to="MovementWander/WanderPriority" method="priority_conditional"] [connection signal="move" from="MovementWander" to="." method="_on_move"] [connection signal="timeout" from="MovementWander/ChangeDirectionTimer" to="MovementWander" method="randomize_direction"] diff --git a/entities/monocle.gd b/entities/monocle.gd index ff5d87b..d76f676 100644 --- a/entities/monocle.gd +++ b/entities/monocle.gd @@ -1,31 +1,17 @@ -extends BetterCharacterBody2D +extends Entity class_name Monocle -@onready var animator: AnimationPlayer = %"Animator" - - -func _on_move(movement: Vector2) -> void: - better_move_and_collide(movement) - func _on_dragged(_cursor: Cursor) -> void: - collision_layer = 16 - collision_mask = 16 - z_index = Enums.ZIndex.EntityAir - y_sort_enabled = false + set_flying() animator.play(&"drag_start") func _on_fallen() -> void: - collision_layer = 8 - collision_mask = 8 - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true + set_grounded() animator.play(&"RESET") func _on_trapped() -> void: - z_index = Enums.ZIndex.EntitySacrifice - y_sort_enabled = false + set_trapped() func _on_freed() -> void: - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true + set_grounded() diff --git a/entities/monocle.tscn b/entities/monocle.tscn index fab3e0f..bcb93f2 100644 --- a/entities/monocle.tscn +++ b/entities/monocle.tscn @@ -151,6 +151,7 @@ bus = &"DragSounds" stream = ExtResource("5_grwug") bus = &"FallSounds" +[connection signal="eaten" from="Edible" to="." method="queue_free"] [connection signal="dragged" from="MovementDrag" to="." method="_on_dragged"] [connection signal="dragged" from="MovementDrag" to="MovementDrag/DragSound" method="play" unbinds=1] [connection signal="fallen" from="MovementDrag" to="." method="_on_fallen"] diff --git a/entities/sheep.gd b/entities/sheep.gd index 6063489..8256b28 100644 --- a/entities/sheep.gd +++ b/entities/sheep.gd @@ -1,46 +1,17 @@ -extends BetterCharacterBody2D +extends Entity class_name Sheep -@onready var sprite: SpriteLeftRight = %"Sprite" -@onready var animator: AnimationPlayer = %"Animator" -@onready var tophatter: Eater = %"TopHatter" -@onready var monocler: Eater = %"Monocler" - - -func _ready(): - # Setup index and layers - _on_fallen() - -func _on_move(movement: Vector2) -> void: - better_move_and_collide(movement) - sprite.handle_move(movement) - func _on_dragged(_cursor: Cursor) -> void: - collision_layer = 16 - collision_mask = 16 - tophatter.collision_mask = 16 - monocler.collision_mask = 16 - z_index = Enums.ZIndex.EntityAir - y_sort_enabled = false + set_flying() animator.play(&"drag_start") func _on_fallen() -> void: - collision_layer = 8 - collision_mask = 8 - tophatter.collision_mask = 8 - monocler.collision_mask = 8 - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true + set_grounded() animator.play(&"RESET") func _on_trapped() -> void: - z_index = Enums.ZIndex.EntitySacrifice - y_sort_enabled = false + set_trapped() func _on_freed() -> void: - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true - -func _on_eater_eaten(edible: Edible) -> void: - edible.get_parent().queue_free() + set_grounded() diff --git a/entities/sheep.tscn b/entities/sheep.tscn index f59fb96..2d37222 100644 --- a/entities/sheep.tscn +++ b/entities/sheep.tscn @@ -212,7 +212,6 @@ radius = 24.0 radius = 24.0 [node name="Sheep" type="CharacterBody2D"] -z_index = 1 collision_layer = 8 collision_mask = 8 motion_mode = 1 @@ -409,20 +408,7 @@ bus = &"DragSounds" stream = ExtResource("17_8kst2") bus = &"FallSounds" -[connection signal="eaten" from="Sprite/TopHatter" to="." method="_on_eater_eaten"] -[connection signal="eaten" from="Sprite/TopHatter" to="Sprite/TopHatter" method="clear_diets" unbinds=1] -[connection signal="goal_reached" from="Sprite/TopHatter" to="Sprite/TopHatter/Sprite" method="show"] -[connection signal="goal_reached" from="Sprite/TopHatter" to="Sprite/TopHatter/Spawner" method="enable"] -[connection signal="goal_reached" from="Sprite/TopHatter" to="Sprite/TopHatter/Sacrificable" method="set_kind" binds= [&"TopHat"]] -[connection signal="tree_exiting" from="Sprite/TopHatter/Spawner" to="Sprite/TopHatter/Spawner" method="spawn"] -[connection signal="sacrificed" from="Sprite/TopHatter/Sacrificable" to="." method="queue_free"] -[connection signal="eaten" from="Sprite/Monocler" to="." method="_on_eater_eaten"] -[connection signal="eaten" from="Sprite/Monocler" to="Sprite/Monocler" method="clear_diets" unbinds=1] -[connection signal="goal_reached" from="Sprite/Monocler" to="Sprite/Monocler/Sprite" method="show"] -[connection signal="goal_reached" from="Sprite/Monocler" to="Sprite/Monocler/Spawner" method="enable"] -[connection signal="goal_reached" from="Sprite/Monocler" to="Sprite/Monocler/Sacrificable" method="set_kind" binds= [&"Monocle"]] -[connection signal="tree_exiting" from="Sprite/Monocler/Spawner" to="Sprite/Monocler/Spawner" method="spawn"] -[connection signal="sacrificed" from="Sprite/Monocler/Sacrificable" to="." method="queue_free"] +[connection signal="eaten" from="Edible" to="." method="queue_free"] [connection signal="eaten" from="Edible" to="Spawner" method="roll_spawn" binds= [11]] [connection signal="sacrificed" from="Sacrificable" to="." method="queue_free"] [connection signal="move" from="MovementIdle" to="." method="_on_move"] diff --git a/entities/skull.gd b/entities/skull.gd index 5f8c9c5..0d26e1e 100644 --- a/entities/skull.gd +++ b/entities/skull.gd @@ -1,31 +1,17 @@ -extends BetterCharacterBody2D +extends Entity class_name Skull -@onready var animator: AnimationPlayer = %"Animator" - - -func _on_move(movement: Vector2) -> void: - better_move_and_collide(movement) - func _on_dragged(_cursor: Cursor) -> void: - collision_layer = 16 - collision_mask = 16 - z_index = Enums.ZIndex.EntityAir - y_sort_enabled = false + set_flying() animator.play(&"drag_start") func _on_fallen() -> void: - collision_layer = 8 - collision_mask = 8 - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true + set_grounded() animator.play(&"RESET") func _on_trapped() -> void: - z_index = Enums.ZIndex.EntitySacrifice - y_sort_enabled = false + set_trapped() func _on_freed() -> void: - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true + set_grounded() diff --git a/entities/top_hat.gd b/entities/top_hat.gd index 969dbeb..ee99cc2 100644 --- a/entities/top_hat.gd +++ b/entities/top_hat.gd @@ -1,31 +1,17 @@ -extends BetterCharacterBody2D +extends Entity class_name TopHat -@onready var animator: AnimationPlayer = %"Animator" - - -func _on_move(movement: Vector2) -> void: - better_move_and_collide(movement) - func _on_dragged(_cursor: Cursor) -> void: - collision_layer = 16 - collision_mask = 16 - z_index = Enums.ZIndex.EntityAir - y_sort_enabled = false + set_flying() animator.play(&"drag_start") func _on_fallen() -> void: - collision_layer = 8 - collision_mask = 8 - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true + set_grounded() animator.play(&"RESET") func _on_trapped() -> void: - z_index = Enums.ZIndex.EntitySacrifice - y_sort_enabled = false + set_trapped() func _on_freed() -> void: - z_index = Enums.ZIndex.EntityGround - y_sort_enabled = true + set_grounded() diff --git a/entities/top_hat.tscn b/entities/top_hat.tscn index a9ae1ab..d265288 100644 --- a/entities/top_hat.tscn +++ b/entities/top_hat.tscn @@ -149,6 +149,7 @@ bus = &"DragSounds" stream = ExtResource("6_6tpnh") bus = &"FallSounds" +[connection signal="eaten" from="Edible" to="." method="queue_free"] [connection signal="dragged" from="MovementDrag" to="." method="_on_dragged"] [connection signal="dragged" from="MovementDrag" to="MovementDrag/DragSound" method="play" unbinds=1] [connection signal="fallen" from="MovementDrag" to="." method="_on_fallen"] diff --git a/entities/watcher.gd b/entities/watcher.gd index 55e025b..e3faccc 100644 --- a/entities/watcher.gd +++ b/entities/watcher.gd @@ -1,31 +1,22 @@ -extends BetterCharacterBody2D +extends Entity class_name Watcher -@onready var sprite: SpriteLeftRight = %"Sprite" -@onready var animator: AnimationPlayer = %"Animator" - -func _ready(): - # Setup index and layers - _on_fallen() - -func _on_move(movement: Vector2): - better_move_and_collide(movement) - sprite.handle_move(movement) - func _on_dragged(_cursor: Cursor) -> void: + set_flying() animator.play(&"drag_start") func _on_fallen() -> void: + set_flying() animator.play(&"RESET") func _on_trapped() -> void: - z_index = Enums.ZIndex.EntitySacrifice - y_sort_enabled = false + set_trapped() func _on_freed() -> void: - z_index = Enums.ZIndex.EntityAir - y_sort_enabled = true + set_flying() -func _on_eater_eaten(edible: Edible) -> void: - edible.get_parent().queue_free() +func _on_gold_spawner_spawned(entity:Node2D) -> void: + entity.get_node("MoveStraight").speed = 50 + entity.get_node("MoveStraight").randomize_direction() + entity.get_node("MoveStraight/Priority").priority_alternative() diff --git a/entities/watcher.tscn b/entities/watcher.tscn index 7ec66d7..d929999 100644 --- a/entities/watcher.tscn +++ b/entities/watcher.tscn @@ -233,8 +233,8 @@ _data = { [sub_resource type="CircleShape2D" id="CircleShape2D_dpwsl"] radius = 32.0 -[sub_resource type="CircleShape2D" id="CircleShape2D_w03iw"] -radius = 256.0 +[sub_resource type="CircleShape2D" id="CircleShape2D_f4w15"] +radius = 512.0 [sub_resource type="CircleShape2D" id="CircleShape2D_ywwo3"] radius = 32.0 @@ -375,7 +375,7 @@ acceptable_diets = Array[StringName]([&"Meat"]) [node name="Shape" type="CollisionShape2D" parent="MovementHunt/TrackerMeat"] position = Vector2(4, 29) -shape = SubResource("CircleShape2D_w03iw") +shape = SubResource("CircleShape2D_f4w15") debug_color = Color(1, 1, 0, 0.294118) [node name="TargetPicker" parent="MovementHunt/TrackerMeat" node_paths=PackedStringArray("tracker") instance=ExtResource("16_ch04y")] @@ -414,22 +414,11 @@ debug_color = Color(1, 0, 0, 0.294118) stream = ExtResource("20_bdcer") bus = &"KillSounds" -[connection signal="eaten" from="Sprite/TopHatter" to="." method="_on_eater_eaten"] -[connection signal="eaten" from="Sprite/TopHatter" to="Sprite/TopHatter" method="clear_diets" unbinds=1] -[connection signal="eaten" from="Sprite/TopHatter" to="Sprite/TopHatter/Spawner" method="enable" unbinds=1] -[connection signal="goal_reached" from="Sprite/TopHatter" to="Sprite/TopHatter/Sprite" method="show"] -[connection signal="goal_reached" from="Sprite/TopHatter" to="Sprite/TopHatter/Sacrificable" method="set_kind" binds= [&"TopHat"]] -[connection signal="tree_exiting" from="Sprite/TopHatter/Spawner" to="Sprite/TopHatter/Spawner" method="spawn"] -[connection signal="sacrificed" from="Sprite/TopHatter/Sacrificable" to="." method="queue_free"] -[connection signal="eaten" from="Sprite/Monocler" to="." method="_on_eater_eaten"] -[connection signal="eaten" from="Sprite/Monocler" to="Sprite/Monocler" method="clear_diets" unbinds=1] -[connection signal="eaten" from="Sprite/Monocler" to="Sprite/Monocler/Spawner" method="enable" unbinds=1] -[connection signal="goal_reached" from="Sprite/Monocler" to="Sprite/Monocler/Sprite" method="show"] -[connection signal="goal_reached" from="Sprite/Monocler" to="Sprite/Monocler/Sacrificable" method="set_kind" binds= [&"Monocle"]] -[connection signal="tree_exiting" from="Sprite/Monocler/Spawner" to="Sprite/Monocler/Spawner" method="spawn"] -[connection signal="sacrificed" from="Sprite/Monocler/Sacrificable" to="." method="queue_free"] +[connection signal="eaten" from="Edible" to="." method="queue_free"] [connection signal="sacrificed" from="Sacrificable" to="." method="queue_free"] +[connection signal="spawned" from="GoldSpawner" to="." method="_on_gold_spawner_spawned"] [connection signal="timeout" from="GoldSpawner/SpawnTimer" to="GoldSpawner" method="spawn"] +[connection signal="timeout" from="GoldSpawner/SpawnTimer" to="GoldSpawner/SpawnTimer" method="randomize_wait_time"] [connection signal="move" from="MovementTilt" to="." method="_on_move"] [connection signal="move_enabled" from="MovementTilt" to="Animator" method="play" binds= [&"fly"]] [connection signal="ready" from="MovementTilt" to="MovementTilt" method="randomize_rotation_speed"] diff --git a/enums.gd b/enums.gd index 36e7f92..e001cf7 100644 --- a/enums.gd +++ b/enums.gd @@ -10,3 +10,8 @@ enum ZIndex { Flowers = -20, Terrain = -30, } + +enum PhysLayers { + EntityGround = 8, + EntityAir = 16, +} diff --git a/scenes/game/main_game.tscn b/scenes/game/main_game.tscn index 622d6d8..bfb2e9f 100644 --- a/scenes/game/main_game.tscn +++ b/scenes/game/main_game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=20 format=3 uid="uid://cxj5aud02f40j"] +[gd_scene load_steps=21 format=3 uid="uid://cxj5aud02f40j"] [ext_resource type="Script" path="res://scenes/game/main_game.gd" id="1_wiglu"] [ext_resource type="PackedScene" uid="uid://dm068vaseh45n" path="res://scenes/game/game_camera.tscn" id="2_db5xs"] @@ -10,6 +10,7 @@ [ext_resource type="PackedScene" uid="uid://col1q3elvkfwk" path="res://scenes/game/cursor.tscn" id="5_g504x"] [ext_resource type="Texture2D" uid="uid://bxm3edor0akqj" path="res://scenes/game/tileset_flowers_shaded.png" id="5_yqthh"] [ext_resource type="PackedScene" uid="uid://uoxwjpmgg27a" path="res://entities/gold.tscn" id="13_56o7t"] +[ext_resource type="PackedScene" uid="uid://dnjtduk0hla3f" path="res://entities/watcher.tscn" id="14_pu3su"] [ext_resource type="PackedScene" uid="uid://cgpwig0rd08vh" path="res://entities/summoning_circle_pentagram.tscn" id="16_nhsrb"] [ext_resource type="PackedScene" uid="uid://db246fkcf452d" path="res://entities/tree.tscn" id="18_r8twr"] [ext_resource type="PackedScene" uid="uid://cn0p5s44h86px" path="res://entities/barn.tscn" id="20_tek4w"] @@ -1108,4 +1109,19 @@ position = Vector2(-160, 420) [node name="Tree27" parent="Entities" instance=ExtResource("18_r8twr")] position = Vector2(120, 480) +[node name="Watcher" parent="." instance=ExtResource("14_pu3su")] +position = Vector2(-360, 0) + +[node name="Watcher2" parent="." instance=ExtResource("14_pu3su")] +position = Vector2(-120, -200) + +[node name="Watcher3" parent="." instance=ExtResource("14_pu3su")] +position = Vector2(180, -40) + +[node name="Watcher4" parent="." instance=ExtResource("14_pu3su")] +position = Vector2(-60, 180) + +[node name="Watcher5" parent="." instance=ExtResource("14_pu3su")] +position = Vector2(280, 160) + [connection signal="recipe_matched" from="Entities/SummoningCirclePentagram" to="." method="_on_recipe_matched"]