diff --git a/Resources/BossPhases/TestBoss1.tres b/Resources/BossPhases/TestBoss1.tres index dcc72530..8192b0a7 100644 --- a/Resources/BossPhases/TestBoss1.tres +++ b/Resources/BossPhases/TestBoss1.tres @@ -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 diff --git a/Scenes/Actors/Rumia.tscn b/Scenes/Actors/Rumia.tscn index 406197a5..81c6c882 100644 --- a/Scenes/Actors/Rumia.tscn +++ b/Scenes/Actors/Rumia.tscn @@ -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"] diff --git a/Scripts/Actors/Boss.cs b/Scripts/Actors/Boss.cs index 6c13638a..982b62d7 100644 --- a/Scripts/Actors/Boss.cs +++ b/Scripts/Actors/Boss.cs @@ -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); + } } \ No newline at end of file diff --git a/Scripts/AttackPatterns/MovementPattern.cs b/Scripts/AttackPatterns/MovementPattern.cs index 9f75f601..d608fce5 100644 --- a/Scripts/AttackPatterns/MovementPattern.cs +++ b/Scripts/AttackPatterns/MovementPattern.cs @@ -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) diff --git a/Scripts/Components/Actors/BossSpriteAnimator.cs b/Scripts/Components/Actors/BossSpriteAnimator.cs new file mode 100644 index 00000000..df5e2814 --- /dev/null +++ b/Scripts/Components/Actors/BossSpriteAnimator.cs @@ -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); + } + } +} \ No newline at end of file diff --git a/Scripts/Components/Actors/BossSpriteAnimator.cs.uid b/Scripts/Components/Actors/BossSpriteAnimator.cs.uid new file mode 100644 index 00000000..c599517e --- /dev/null +++ b/Scripts/Components/Actors/BossSpriteAnimator.cs.uid @@ -0,0 +1 @@ +uid://dtg2vhquyrib3 diff --git a/Scripts/Resources/SimpleMovementPattern.cs b/Scripts/Resources/SimpleMovementPattern.cs index 174957f0..004ab685 100644 --- a/Scripts/Resources/SimpleMovementPattern.cs +++ b/Scripts/Resources/SimpleMovementPattern.cs @@ -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) { } diff --git a/Sprites/Actors/Rumia.aseprite b/Sprites/Actors/Rumia.aseprite index d12d4724..1e0cdcbf 100644 --- a/Sprites/Actors/Rumia.aseprite +++ b/Sprites/Actors/Rumia.aseprite @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e4b18da862b2c05c3f301384228fa9a26910d78c2aa7d2d27b4bf080048203ac -size 747 +oid sha256:c12005fe39789271a0471622f6c10ba6c05d312bbfae1ee3f89ff8ac00fac75a +size 2537 diff --git a/Sprites/Actors/Rumia.png b/Sprites/Actors/Rumia.png index 30388367..92cf296e 100644 --- a/Sprites/Actors/Rumia.png +++ b/Sprites/Actors/Rumia.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d56a902fe7d5dac26a5fd07fa7b457346dca049ee695f61cce40aa72643fe374 -size 302 +oid sha256:96ad49e4a465f0b9b50c8ec01d96034ef59c85ba3154cc36da88ca9740530040 +size 1104