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

@ -7,8 +7,8 @@
[sub_resource type="Resource" id="Resource_lrvah"]
script = ExtResource("1_xksf5")
relativeTargetPosition = Vector2(0, 0)
moveDuration = 2.0
relativeTargetPosition = Vector2(0, -1)
moveDuration = 1.0
transitionType = 0
easeType = 2
WaitForCompletion = true

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=12 format=3 uid="uid://d1rlw6ddpmrn8"]
[gd_scene load_steps=20 format=3 uid="uid://d1rlw6ddpmrn8"]
[ext_resource type="Script" uid="uid://bjs2u8gogvs03" path="res://Scripts/Actors/Boss.cs" id="1_na4uq"]
[ext_resource type="Texture2D" uid="uid://bcqgke6dthlrj" path="res://Sprites/Actors/Rumia.png" id="2_7k5gp"]
@ -7,6 +7,67 @@
[ext_resource type="PackedScene" uid="uid://cuixq5ex0j40h" path="res://Scenes/enemyBullet.tscn" id="5_g1p0m"]
[ext_resource type="Resource" uid="uid://d2l607uabv3d6" path="res://Resources/BossPhases/Rumia_Boss_Script.tres" id="6_ifwrk"]
[ext_resource type="Script" uid="uid://c6467d6yx50qh" path="res://Scripts/Components/BulletSpawner.cs" id="7_2obh7"]
[ext_resource type="Script" uid="uid://dtg2vhquyrib3" path="res://Scripts/Components/Actors/BossSpriteAnimator.cs" id="8_vqdji"]
[sub_resource type="AtlasTexture" id="AtlasTexture_vqdji"]
atlas = ExtResource("2_7k5gp")
region = Rect2(0, 64, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_egx0r"]
atlas = ExtResource("2_7k5gp")
region = Rect2(16, 64, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_opbj8"]
atlas = ExtResource("2_7k5gp")
region = Rect2(0, 32, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_7asmc"]
atlas = ExtResource("2_7k5gp")
region = Rect2(16, 32, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_ikvnf"]
atlas = ExtResource("2_7k5gp")
region = Rect2(0, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_ifwrk"]
atlas = ExtResource("2_7k5gp")
region = Rect2(16, 0, 16, 32)
[sub_resource type="SpriteFrames" id="SpriteFrames_opbj8"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_vqdji")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_egx0r")
}],
"loop": true,
"name": &"Left",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_opbj8")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_7asmc")
}],
"loop": true,
"name": &"Right",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_ikvnf")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ifwrk")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_8gtts"]
radius = 7.0
@ -30,8 +91,12 @@ CameraOffset = Vector2(0, 32)
Health = 200.0
metadata/_edit_group_ = true
[node name="Sprite2D" type="Sprite2D" parent="."]
texture = ExtResource("2_7k5gp")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
sprite_frames = SubResource("SpriteFrames_opbj8")
animation = &"Left"
autoplay = "default"
frame = 1
frame_progress = 0.41097
[node name="Damage_HitBox" type="CollisionShape2D" parent="."]
visible = false
@ -80,6 +145,13 @@ shape = SubResource("RectangleShape2D_m1rsg")
script = ExtResource("7_2obh7")
BulletScene = ExtResource("5_g1p0m")
[node name="BossSpriteAnimator" type="Node2D" parent="." node_paths=PackedStringArray("AnimatedSprite2D", "Enemy")]
script = ExtResource("8_vqdji")
AnimatedSprite2D = NodePath("../AnimatedSprite2D")
Enemy = NodePath("..")
LeftAnimationName = &"Left"
RightAnimationName = &"Right"
[connection signal="area_entered" from="PlayerDetection" to="PlayerDetection" method="_on_area_entered"]
[connection signal="area_exited" from="PlayerDetection" to="." method="_on_area_exited"]
[connection signal="velocity_computed" from="NavigationAgent2D" to="." method="_on_navigation_agent_2d_velocity_computed"]

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) { }

BIN
Sprites/Actors/Rumia.aseprite (Stored with Git LFS)

Binary file not shown.

BIN
Sprites/Actors/Rumia.png (Stored with Git LFS)

Binary file not shown.