From 1fbc2f66376a4e244403d9ba3d737938ea581cab Mon Sep 17 00:00:00 2001 From: Djairo Date: Sat, 7 Mar 2026 13:12:18 +0100 Subject: [PATCH] ft: made sprite behaviour consistent across entities --- evolve-die-repeat/molecular/molecular_player.gd | 3 +-- .../molecular/predator/hammerhead_predator.gd | 7 +++---- .../molecular/predator/state_hunting.gd | 3 +-- evolve-die-repeat/molecular/prey/nucleotide_prey.gd | 12 +++++------- evolve-die-repeat/molecular/prey/state_fleeing.gd | 1 + evolve-die-repeat/molecular/prey/state_idle.gd | 1 + .../molecular/prey/state_random_movement.gd | 1 + evolve-die-repeat/project.godot | 1 + evolve-die-repeat/shared/npc/abstractNPC.gd | 8 +++++++- 9 files changed, 21 insertions(+), 16 deletions(-) diff --git a/evolve-die-repeat/molecular/molecular_player.gd b/evolve-die-repeat/molecular/molecular_player.gd index bb87d35..318c046 100644 --- a/evolve-die-repeat/molecular/molecular_player.gd +++ b/evolve-die-repeat/molecular/molecular_player.gd @@ -28,7 +28,7 @@ func _ready() -> void: var screen_size = get_viewport_rect().size GameManager.init_screen_size(screen_size.x, screen_size.y) - attack_area.monitoring = false # no collision until attacking TODO: Thing about being attacked + attack_area.monitoring = false # no collision until attacking TODO: Think about being attacked attack_timer.wait_time = attack_duration attack_cooldown_timer.wait_time = attack_cooldown_duration @@ -36,7 +36,6 @@ func _ready() -> void: func _process(delta): - # TODO: Connects this to some respawn screen if isAlive: velocity = Vector2.ZERO if Input.is_action_pressed("move_right"): diff --git a/evolve-die-repeat/molecular/predator/hammerhead_predator.gd b/evolve-die-repeat/molecular/predator/hammerhead_predator.gd index 085138f..c2c0603 100644 --- a/evolve-die-repeat/molecular/predator/hammerhead_predator.gd +++ b/evolve-die-repeat/molecular/predator/hammerhead_predator.gd @@ -15,8 +15,7 @@ var can_attack: bool = true func _ready() -> void: health = maxHealth - sprite.play("Healthy") # TODO: sprite play logic (esp wrt state switching) - wrapper.play_sprite("Healthy") + play_sprite(idle_sprite) if starting_pos: collision.set_position(starting_pos) @@ -61,8 +60,8 @@ func die() -> void: super.die() func become_injured() -> void: - sprite.play("Hurt") - wrapper.play_sprite("Hurt") + idle_sprite = "Hurt" + play_sprite(idle_sprite) func _on_sight_body_entered(body: Node2D) -> void: if fsm.map(fsm.state) != fsm.States.HUNTING and body.is_in_group("prey") or (health < maxHealth and body.is_in_group("player")): diff --git a/evolve-die-repeat/molecular/predator/state_hunting.gd b/evolve-die-repeat/molecular/predator/state_hunting.gd index 4466ebb..29a1a97 100644 --- a/evolve-die-repeat/molecular/predator/state_hunting.gd +++ b/evolve-die-repeat/molecular/predator/state_hunting.gd @@ -5,8 +5,7 @@ var target: Node2D func enter(previous_state_path: String, data := {}) -> void: if data.has("target"): target = data["target"] - owner.sprite.play("Hunting") - owner.wrapper.play_sprite("Hunting") + owner.play_sprite("Hunting") else: # default behaviour; do nothing finished.emit(owner.fsm.States.IDLE, {}) diff --git a/evolve-die-repeat/molecular/prey/nucleotide_prey.gd b/evolve-die-repeat/molecular/prey/nucleotide_prey.gd index 8c5df1a..6c976ec 100644 --- a/evolve-die-repeat/molecular/prey/nucleotide_prey.gd +++ b/evolve-die-repeat/molecular/prey/nucleotide_prey.gd @@ -2,15 +2,14 @@ extends AbstractPrey @onready var wrapper: WrappingManager = $WrappingManager @onready var collision: CharacterBody2D = $Collision -@onready var sprite: AnimatedSprite2D = $"Collision/Sprite" +@onready var sprite: AnimatedSprite2D = $Collision/Sprite @onready var fsm: StateMachine = $StateMachine var starting_pos # Called when the node enters the scene tree for the first time. func _ready() -> void: health = maxHealth - sprite.play("Healthy") - wrapper.play_sprite("Healthy") + play_sprite(idle_sprite) if starting_pos: collision.set_position(starting_pos) @@ -32,14 +31,13 @@ func handle_damage(dmg: int, src: Node) -> void: fsm.transition_to_next_state(fsm.States.FLEEING, {"threat": src}) func die() -> void: - sprite.play("Dying") - wrapper.play_sprite("Dying") + play_sprite("Dying") GameManager.foodManager._spawn_food(collision.position) super.die() func become_injured() -> void: - sprite.play("Injured") - wrapper.play_sprite("Injured") + idle_sprite = "Injured" + play_sprite(idle_sprite) func _on_sight_body_entered(body: Node2D) -> void: if body.is_in_group("predator") or (health < maxHealth and body.is_in_group("player")): diff --git a/evolve-die-repeat/molecular/prey/state_fleeing.gd b/evolve-die-repeat/molecular/prey/state_fleeing.gd index 499d45c..600e77e 100644 --- a/evolve-die-repeat/molecular/prey/state_fleeing.gd +++ b/evolve-die-repeat/molecular/prey/state_fleeing.gd @@ -6,6 +6,7 @@ var threshold: float = 100 func enter(previous_state_path: String, data := {}) -> void: if data.has("threat"): threat = data["threat"] + owner.play_sprite("Fleeing") else: # default behaviour; do nothing finished.emit(owner.fsm.States.IDLE, {}) diff --git a/evolve-die-repeat/molecular/prey/state_idle.gd b/evolve-die-repeat/molecular/prey/state_idle.gd index 50bb7cc..8ea1e3d 100644 --- a/evolve-die-repeat/molecular/prey/state_idle.gd +++ b/evolve-die-repeat/molecular/prey/state_idle.gd @@ -5,6 +5,7 @@ var dir = Vector3(1, 1, 0) func enter(previous_state_path: String, data := {}) -> void: timer.start((float)(randi() % 5)/5) + owner.play_sprite(owner.idle_sprite) func physics_update(_delta: float) -> void: owner.move(_delta * Vector3(randfn(0, 1), randfn(0, 1), 0), 1) diff --git a/evolve-die-repeat/molecular/prey/state_random_movement.gd b/evolve-die-repeat/molecular/prey/state_random_movement.gd index 2cee56d..4848651 100644 --- a/evolve-die-repeat/molecular/prey/state_random_movement.gd +++ b/evolve-die-repeat/molecular/prey/state_random_movement.gd @@ -6,6 +6,7 @@ var dir: Vector3 = Vector3(0,0,0); func enter(previous_state_path: String, data := {}) -> void: timer.start((float)(randi() % 10)/5) dir = calc_dir(randi() % 360) + owner.play_sprite(owner.idle_sprite) func physics_update(_delta: float) -> void: owner.move(dir) diff --git a/evolve-die-repeat/project.godot b/evolve-die-repeat/project.godot index 1553b62..cd7ef4d 100644 --- a/evolve-die-repeat/project.godot +++ b/evolve-die-repeat/project.godot @@ -26,6 +26,7 @@ GameManager="*res://game_manager.gd" [display] window/size/viewport_height=656 +window/size/resizable=false [editor_plugins] diff --git a/evolve-die-repeat/shared/npc/abstractNPC.gd b/evolve-die-repeat/shared/npc/abstractNPC.gd index d997f5c..104695e 100644 --- a/evolve-die-repeat/shared/npc/abstractNPC.gd +++ b/evolve-die-repeat/shared/npc/abstractNPC.gd @@ -2,6 +2,7 @@ extends Node class_name NPC @export var maxHealth: int = 0 +@export var idle_sprite: String = "Healthy" var health: int = maxHealth signal died @@ -29,4 +30,9 @@ func die() -> void: func move(destination: Vector3) -> void: push_error("Function move() not implemented.") - + +func play_sprite(anim: String) -> void: + if "sprite" in self: + self.sprite.play(anim) + if "wrapper" in self: + self.wrapper.play_sprite(anim)