Boss Animation

This commit is contained in:
MaddoScientisto 2025-03-06 22:09:11 +01:00
commit 08cc298a81
9 changed files with 139 additions and 13 deletions

View file

@ -37,6 +37,8 @@ public partial class Boss : Enemy, IActivable
private BossHud _bossHud;
[Signal] public delegate void ActorSpriteChangeEventHandler(Vector2 direction);
public override void _Ready()
{
base._Ready();
@ -181,4 +183,9 @@ public partial class Boss : Enemy, IActivable
_animationTextureRect.Visible = false;
}
public void ChangeSpriteDirection(Vector2 direction)
{
EmitSignal(SignalName.ActorSpriteChange, direction);
}
}

View file

@ -24,8 +24,7 @@ public partial class MovementPattern : AttackPattern
isComplete = false;
Vector2 targetPosition = (Boss?.HomePosition ?? boss.GlobalPosition) + this.relativeTargetPosition;
tween.TweenProperty(Boss, "position", targetPosition, moveDuration)
.SetTrans(transitionType)
.SetEase(easeType)

View file

@ -0,0 +1,42 @@
using Cirno.Scripts.Actors;
using Godot;
namespace Cirno.Scripts.Components.Actors;
public partial class BossSpriteAnimator : Node2D
{
[Export]
public AnimatedSprite2D AnimatedSprite2D { get; private set; }
[Export]
public Boss Enemy { get; private set; }
[Export] public StringName NeutralAnimationName { get; private set; } = "default";
[Export]
public StringName LeftAnimationName { get; private set; } = "left";
[Export]
public StringName RightAnimationName { get; private set; } = "right";
public override void _Ready()
{
Enemy.ActorSpriteChange += EnemyOnActorSpriteChange;
}
private void EnemyOnActorSpriteChange(Vector2 direction)
{
if (direction == Vector2.Zero)
{
AnimatedSprite2D.Play(NeutralAnimationName);
}
else if (direction.X > 0)
{
AnimatedSprite2D.Play(RightAnimationName);
}
else if (direction.X < 0)
{
AnimatedSprite2D.Play(LeftAnimationName);
}
}
}

View file

@ -0,0 +1 @@
uid://dtg2vhquyrib3

View file

@ -21,11 +21,16 @@ public partial class SimpleMovementPattern : AttackPattern
isComplete = false;
Vector2 targetPosition = (Boss?.HomePosition ?? boss.GlobalPosition) + relativeTargetPosition;
boss.ChangeSpriteDirection(-(boss.GlobalPosition - targetPosition));
tween.TweenProperty(Boss, "global_position", targetPosition, moveDuration)
.SetTrans(transitionType)
.SetEase(easeType)
.Finished += () => isComplete = true;
.Finished += () =>
{
isComplete = true;
boss.ChangeSpriteDirection(Vector2.Zero);
};
}
public override void UpdatePattern(double delta) { }