From b4fdb9c9e3d101f5b3be85ec0ee34db2b02755d9 Mon Sep 17 00:00:00 2001 From: Marco Date: Wed, 12 Feb 2025 18:16:16 +0100 Subject: [PATCH] Boss phase animations --- Dialogue/Styles/VN.tres | 1 + Resources/BossPhases/Rumia_SP1.tres | 1 + Resources/BossPhases/TestBoss1.tres | 3 +- Scenes/Actors/Rumia.tscn | 4 +- Scripts/Actors/Boss.cs | 79 ++++++++++++++++++++++++++--- Scripts/Hud.cs | 2 +- Scripts/Resources/BossPhase.cs | 1 + Scripts/UI/BossPhaseAnimation.cs | 8 +++ 8 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 Scripts/UI/BossPhaseAnimation.cs diff --git a/Dialogue/Styles/VN.tres b/Dialogue/Styles/VN.tres index f414cf3c..18383cf0 100644 --- a/Dialogue/Styles/VN.tres +++ b/Dialogue/Styles/VN.tres @@ -38,6 +38,7 @@ overrides = { "box_size": "Vector2(300, 50)", "name_label_custom_font_size": "8.0", "name_label_use_global_font_size": "false", +"next_indicator_size": "Vector2(12, 12)", "text_size": "6.0", "text_use_global_size": "false" } diff --git a/Resources/BossPhases/Rumia_SP1.tres b/Resources/BossPhases/Rumia_SP1.tres index 406c38a6..00e15883 100644 --- a/Resources/BossPhases/Rumia_SP1.tres +++ b/Resources/BossPhases/Rumia_SP1.tres @@ -65,4 +65,5 @@ WaitForCompletion = true [resource] script = ExtResource("3_o6234") Threshold = 900 +PlayAnimation = true Patterns = Array[Resource]([SubResource("Resource_upj22"), SubResource("Resource_gm1rv"), SubResource("Resource_5fq8v"), SubResource("Resource_gm1rv")]) diff --git a/Resources/BossPhases/TestBoss1.tres b/Resources/BossPhases/TestBoss1.tres index 81dc6573..2e0b8cfc 100644 --- a/Resources/BossPhases/TestBoss1.tres +++ b/Resources/BossPhases/TestBoss1.tres @@ -39,5 +39,6 @@ WaitForCompletion = false [resource] script = ExtResource("1_0cgch") -Threshold = 999 +Threshold = 990 +PlayAnimation = false Patterns = Array[Resource]([SubResource("Resource_acaax"), ExtResource("2_7n56o"), ExtResource("3_mwcf3"), SubResource("Resource_o8win"), ExtResource("2_7n56o"), ExtResource("3_mwcf3"), SubResource("Resource_k77ig"), ExtResource("2_7n56o"), ExtResource("3_mwcf3"), SubResource("Resource_5ocg5"), ExtResource("2_7n56o"), ExtResource("3_mwcf3")]) diff --git a/Scenes/Actors/Rumia.tscn b/Scenes/Actors/Rumia.tscn index dccdfcba..c338df15 100644 --- a/Scenes/Actors/Rumia.tscn +++ b/Scenes/Actors/Rumia.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=13 format=3 uid="uid://d1rlw6ddpmrn8"] +[gd_scene load_steps=14 format=3 uid="uid://d1rlw6ddpmrn8"] [ext_resource type="Script" path="res://Scripts/Actors/Boss.cs" id="1_na4uq"] [ext_resource type="Resource" uid="uid://ks6fypeil6gk" path="res://Resources/BossPhases/TestBoss1.tres" id="2_1rhf6"] [ext_resource type="Texture2D" uid="uid://bcqgke6dthlrj" path="res://Sprites/Actors/Rumia.png" id="2_7k5gp"] [ext_resource type="Script" path="res://Scripts/Components/ProximityPlayerDetection.cs" id="3_gka5j"] [ext_resource type="Resource" uid="uid://ccj0cqbveey8c" path="res://Resources/BossPhases/Rumia_SP1.tres" id="3_j7lbl"] +[ext_resource type="Texture2D" uid="uid://csuprfskdo1qp" path="res://Sprites/Portraits/Rumia.png" id="4_at5iq"] [ext_resource type="PackedScene" uid="uid://crry0rgk7a8sm" path="res://Scenes/Weapons/BaseWeapon.tscn" id="4_xc6nm"] [ext_resource type="PackedScene" uid="uid://cuixq5ex0j40h" path="res://Scenes/enemyBullet.tscn" id="5_g1p0m"] [ext_resource type="Script" path="res://Scripts/Components/BulletSpawner.cs" id="7_2obh7"] @@ -26,6 +27,7 @@ collision_layer = 16 collision_mask = 9 script = ExtResource("1_na4uq") Phases = Array[Resource]([ExtResource("2_1rhf6"), ExtResource("3_j7lbl")]) +_bossPortraitTexture = ExtResource("4_at5iq") Health = 1000.0 metadata/_edit_group_ = true diff --git a/Scripts/Actors/Boss.cs b/Scripts/Actors/Boss.cs index 04d7bf0c..eade4c05 100644 --- a/Scripts/Actors/Boss.cs +++ b/Scripts/Actors/Boss.cs @@ -1,4 +1,6 @@ -using Cirno.Scripts.Resources; +using System.Threading.Tasks; +using Cirno.Scripts.Resources; +using Cirno.Scripts.UI; using Godot; using Godot.Collections; @@ -12,13 +14,18 @@ public partial class Boss : Enemy, IActivable private bool _started = false; private GameManager _gameManager; - + public GameManager GameManager => _gameManager; private Vector2 _homePosition; public Vector2 HomePosition => _homePosition; - - public GameManager GameManager => _gameManager; - private BossPhase CurrentPhase => Phases[currentPhaseIndex]; + + // [Export] + // private PackedScene _bossPhaseAnimationPrefab; + + private TextureRect _animationTextureRect; + + [Export] + private Texture2D _bossPortraitTexture; public override void _Ready() { @@ -26,6 +33,29 @@ public partial class Boss : Enemy, IActivable _gameManager = this.GetGameManager(); _homePosition = this.GlobalPosition; + + if (_bossPortraitTexture is not null) + { + var canvas = new CanvasLayer(); + canvas.Name = "BossPhaseAnimationCanvas"; + + _gameManager.CallDeferred("add_child", canvas); + + _animationTextureRect = new TextureRect(); + _animationTextureRect.Texture = _bossPortraitTexture; + + canvas.CallDeferred("add_child", _animationTextureRect); + + //canvas.AddChild(animationTextureRect); + + _animationTextureRect.Position = new Vector2(180, 10); + + _animationTextureRect.Visible = false; + + //var animation = _bossPhaseAnimationPrefab.Instantiate(); + +// _gameManager.AddChild(animation); + } } public override void _Process(double delta) @@ -45,7 +75,14 @@ public partial class Boss : Enemy, IActivable private void StartPhase(BossPhase phase) { - phase.Start(this); + if (phase.PlayAnimation) + { + _ = Switchphase(phase); + } + else + { + phase.Start(this); + } } public void TakeDamage(int amount) @@ -60,4 +97,34 @@ public partial class Boss : Enemy, IActivable _started = true; StartPhase(CurrentPhase); } + + private async Task Switchphase(BossPhase phase) + { + await PlayAnimation(); + + phase.Start(this); + } + + private async Task PlayAnimation() + { + _animationTextureRect.Modulate = new Color(_animationTextureRect.Modulate.R, _animationTextureRect.Modulate.G, _animationTextureRect.Modulate.B, 0f); + _animationTextureRect.Visible = true; + + var tween = GetTree().CreateTween(); + tween.SetEase(Tween.EaseType.InOut); + tween.SetTrans(Tween.TransitionType.Linear); + + tween.TweenProperty(_animationTextureRect, "modulate:a", 1f, 0.2f); + + tween.TweenProperty(_animationTextureRect, "global_position", _animationTextureRect.GlobalPosition + new Vector2(-64f, 20f), 1.5f); + + tween.TweenProperty(_animationTextureRect, "modulate:a", 0f, 0.2f); + + //await Task.Delay(800); + + // Wait for the tween to finish + await ToSignal(tween, "finished"); + + _animationTextureRect.Visible = false; + } } \ No newline at end of file diff --git a/Scripts/Hud.cs b/Scripts/Hud.cs index d9ad8a7f..c0346992 100644 --- a/Scripts/Hud.cs +++ b/Scripts/Hud.cs @@ -29,7 +29,7 @@ public partial class Hud : CanvasLayer [Export] private LabelSettings _labelSettings; private Dictionary _items = new(); - + public override void _Ready() { // Assuming the HUD has a Label node named "HealthLabel" diff --git a/Scripts/Resources/BossPhase.cs b/Scripts/Resources/BossPhase.cs index aca76e01..58bdd112 100644 --- a/Scripts/Resources/BossPhase.cs +++ b/Scripts/Resources/BossPhase.cs @@ -8,6 +8,7 @@ namespace Cirno.Scripts.Resources; public partial class BossPhase : Resource { [Export] public int Threshold; + [Export] public bool PlayAnimation; [Export] public Array Patterns; private int currentPatternIndex = 0; diff --git a/Scripts/UI/BossPhaseAnimation.cs b/Scripts/UI/BossPhaseAnimation.cs new file mode 100644 index 00000000..50f2c3fd --- /dev/null +++ b/Scripts/UI/BossPhaseAnimation.cs @@ -0,0 +1,8 @@ +using Godot; + +namespace Cirno.Scripts.UI; + +public partial class BossPhaseAnimation : TextureRect +{ + +} \ No newline at end of file