Added new animation states for the snail entity, including 'Move' and 'Sleep'. The snail now hides certain elements when eating and plays appropriate animations when transitioning between states. Also introduced a new texture for sleep indication.
51 lines
1.1 KiB
GDScript
51 lines
1.1 KiB
GDScript
extends State
|
|
class_name SnailEating
|
|
|
|
@onready var snail : Snail = get_parent().get_parent() as Snail # I think this is bad but I dont care it works
|
|
|
|
var eat_interval : float = 3.0
|
|
var eat_timer : float = 0.0
|
|
|
|
var move_to : Vector2 = Vector2.ZERO
|
|
|
|
var original_snail_scale : float = 0.1
|
|
|
|
func enter(_msg : Dictionary = {}) -> void:
|
|
Log.pr("I am a snail and I will eat!")
|
|
snail.eating = true
|
|
if snail.animation:
|
|
snail.animation.play("Move")
|
|
|
|
snail.hide_zeds()
|
|
|
|
func exit() -> void:
|
|
snail.eating = false
|
|
snail.sprite.flip_h = false
|
|
|
|
func update(delta : float) -> void:
|
|
eat_timer += delta
|
|
|
|
if eat_timer >= eat_interval:
|
|
snail.eat()
|
|
eat_timer = 0.0
|
|
|
|
func physics_update(_delta : float) -> void:
|
|
|
|
if move_to == Vector2.ZERO:
|
|
move_to = snail.get_random_target()
|
|
|
|
if snail.global_position.distance_to(move_to) > 3:
|
|
|
|
snail.velocity = snail.global_position.direction_to(move_to) * snail.speed
|
|
|
|
if move_to.x > snail.global_position.x:
|
|
snail.sprite.scale.x = original_snail_scale
|
|
else:
|
|
snail.sprite.scale.x = -original_snail_scale
|
|
|
|
snail.move_and_slide()
|
|
else:
|
|
move_to = Vector2.ZERO
|
|
|
|
|
|
|