From 8bd2b092321bbc3a8f176240bbae3120308c82c6 Mon Sep 17 00:00:00 2001 From: cblech Date: Thu, 10 Jul 2025 23:32:16 +0200 Subject: [PATCH] Added healing --- art/ui/UI/EmptyFightButton.png | Bin 0 -> 8577 bytes art/ui/UI/EmptyFightButton.png.import | 34 ++++++++++++++++ prefabs/fight/fighters/vesna_fighter.tscn | 37 ++++++++++++++++-- scenes/Babushka_scene_forest_fight_1_2d.tscn | 9 +++-- scripts/CSharp/Common/Fight/FightInstance.cs | 20 ++++++++++ .../CSharp/Common/Fight/FightStateManager.cs | 1 + scripts/CSharp/Common/Fight/Fighter.cs | 26 ++++++++++++ 7 files changed, 119 insertions(+), 8 deletions(-) create mode 100644 art/ui/UI/EmptyFightButton.png create mode 100644 art/ui/UI/EmptyFightButton.png.import diff --git a/art/ui/UI/EmptyFightButton.png b/art/ui/UI/EmptyFightButton.png new file mode 100644 index 0000000000000000000000000000000000000000..76024a15755257930632a672279b10484eb3ffdc GIT binary patch literal 8577 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 DanG;f literal 0 HcmV?d00001 diff --git a/art/ui/UI/EmptyFightButton.png.import b/art/ui/UI/EmptyFightButton.png.import new file mode 100644 index 0000000..b3f7a73 --- /dev/null +++ b/art/ui/UI/EmptyFightButton.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://crak7ton4lab0" +path="res://.godot/imported/EmptyFightButton.png-941012f14ef5a6d6a385ea2e7599c6bb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/ui/UI/EmptyFightButton.png" +dest_files=["res://.godot/imported/EmptyFightButton.png-941012f14ef5a6d6a385ea2e7599c6bb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/prefabs/fight/fighters/vesna_fighter.tscn b/prefabs/fight/fighters/vesna_fighter.tscn index 9a408f5..b0db2bd 100644 --- a/prefabs/fight/fighters/vesna_fighter.tscn +++ b/prefabs/fight/fighters/vesna_fighter.tscn @@ -1,10 +1,12 @@ -[gd_scene load_steps=9 format=3 uid="uid://cpanatqdjjpa3"] +[gd_scene load_steps=11 format=3 uid="uid://cpanatqdjjpa3"] [ext_resource type="Script" uid="uid://by88f32fou7lh" path="res://scripts/CSharp/Common/Fight/Fighter.cs" id="1_f3j2x"] [ext_resource type="Texture2D" uid="uid://om2axn1vfa5o" path="res://art/animation/Vesna2D/Vesna Anims Sequences/S01-Idle/0001.png" id="2_2ud32"] [ext_resource type="Texture2D" uid="uid://qlfwuakhe57t" path="res://art/ui/UI/attack_select_wheel.png" id="3_80knd"] -[ext_resource type="Texture2D" uid="uid://bn56p0ytuo060" path="res://art/ui/UI/AttackButton.png" id="4_0tqnl"] [ext_resource type="AudioStream" uid="uid://pvqav5xbin5r" path="res://audio/sfx/Battle/Vesna/SFX_Battle_Vesna_Defense_08.wav" id="5_4r2vf"] +[ext_resource type="Texture2D" uid="uid://6h85o7fj7gmu" path="res://art/animation/Vesna3D/vesna-more-tools.png" id="5_l04qi"] +[ext_resource type="Texture2D" uid="uid://crak7ton4lab0" path="res://art/ui/UI/EmptyFightButton.png" id="5_rjjub"] +[ext_resource type="Texture2D" uid="uid://c3wht0nakaki1" path="res://art/ui/UI/icons/icon-fruit-tomatoe.png" id="6_l04qi"] [ext_resource type="AudioStream" uid="uid://bjmyose6dedsb" path="res://audio/sfx/Battle/Vesna/SFX_Battle_Vesna_Attack_04.wav" id="6_u1ayv"] [sub_resource type="CircleShape2D" id="CircleShape2D_0tqnl"] @@ -45,7 +47,6 @@ position = Vector2(3, -76) shape = SubResource("CircleShape2D_0tqnl") [node name="FightButtons" type="Node2D" parent="."] -visible = false position = Vector2(3, -714) [node name="CircleBackground" type="Sprite2D" parent="FightButtons"] @@ -59,7 +60,15 @@ position = Vector2(0, -536) [node name="ButtonBackground" type="Sprite2D" parent="FightButtons/AttackButton"] z_index = 200 scale = Vector2(2.48, 2.48) -texture = ExtResource("4_0tqnl") +texture = ExtResource("5_rjjub") + +[node name="Sprite2D" type="Sprite2D" parent="FightButtons/AttackButton/ButtonBackground"] +position = Vector2(6.04839, -10.0806) +rotation = -1.0088 +scale = Vector2(0.249373, 0.25079) +texture = ExtResource("5_l04qi") +region_enabled = true +region_rect = Rect2(291.897, 15.8974, 272.82, 479.385) [node name="Area2D" type="Area2D" parent="FightButtons/AttackButton"] collision_layer = 16 @@ -67,6 +76,25 @@ collision_layer = 16 [node name="CollisionShape2D" type="CollisionShape2D" parent="FightButtons/AttackButton/Area2D"] shape = SubResource("CircleShape2D_4r2vf") +[node name="HealButton" type="Node2D" parent="FightButtons"] +position = Vector2(427, -334) + +[node name="ButtonBackground" type="Sprite2D" parent="FightButtons/HealButton"] +z_index = 200 +scale = Vector2(2.48, 2.48) +texture = ExtResource("5_rjjub") + +[node name="Sprite2D" type="Sprite2D" parent="FightButtons/HealButton/ButtonBackground"] +position = Vector2(4.83871, 0) +scale = Vector2(0.279343, 0.279343) +texture = ExtResource("6_l04qi") + +[node name="Area2D" type="Area2D" parent="FightButtons/HealButton"] +collision_layer = 16 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="FightButtons/HealButton/Area2D"] +shape = SubResource("CircleShape2D_4r2vf") + [node name="HealthShow" type="Label" parent="."] z_index = 200 anchors_preset = 15 @@ -92,3 +120,4 @@ stream = ExtResource("6_u1ayv") [connection signal="Attacking" from="." to="AttackAudio" method="play" binds= [0.0]] [connection signal="DamageTaken" from="." to="HitAudio" method="play" binds= [0.0]] [connection signal="input_event" from="FightButtons/AttackButton/Area2D" to="." method="AttackMouseEvent"] +[connection signal="input_event" from="FightButtons/HealButton/Area2D" to="." method="HealMouseEvent"] diff --git a/scenes/Babushka_scene_forest_fight_1_2d.tscn b/scenes/Babushka_scene_forest_fight_1_2d.tscn index 82045e3..8fb78b6 100644 --- a/scenes/Babushka_scene_forest_fight_1_2d.tscn +++ b/scenes/Babushka_scene_forest_fight_1_2d.tscn @@ -765,6 +765,7 @@ texture = SubResource("NoiseTexture2D_e5alv") [node name="Fence" type="Node2D" parent="."] [node name="Fight1" type="Node2D" parent="."] +position = Vector2(0, 11) [node name="FightStarter" type="Node2D" parent="Fight1" node_paths=PackedStringArray("_fightInstance")] position = Vector2(-1669, 72) @@ -808,7 +809,7 @@ position = Vector2(-133, 19) position = Vector2(32, 562) [node name="Fight2" type="Node2D" parent="."] -position = Vector2(3706, 0) +position = Vector2(3088, -22) [node name="FightStarter" type="Node2D" parent="Fight2" node_paths=PackedStringArray("_fightInstance")] position = Vector2(-1669, 72) @@ -843,13 +844,13 @@ position = Vector2(0, 525) position = Vector2(1162, -12) [node name="EnemyPos1" parent="Fight2/FightBaseScene/EnemyPositions" index="0"] -position = Vector2(-18, -482) +position = Vector2(251, -441) [node name="EnemyPos2" parent="Fight2/FightBaseScene/EnemyPositions" index="1"] -position = Vector2(-133, 19) +position = Vector2(-385, 166) [node name="EnemyPos3" parent="Fight2/FightBaseScene/EnemyPositions" index="2"] -position = Vector2(32, 562) +position = Vector2(178, 594) [node name="YSorted" type="Node2D" parent="."] z_index = 1 diff --git a/scripts/CSharp/Common/Fight/FightInstance.cs b/scripts/CSharp/Common/Fight/FightInstance.cs index f692df9..4dfec68 100644 --- a/scripts/CSharp/Common/Fight/FightInstance.cs +++ b/scripts/CSharp/Common/Fight/FightInstance.cs @@ -106,9 +106,24 @@ public partial class FightInstance : Node2D //TODO: remake ResetFriendlyActions(); _fightStateManager.CurrentFightState = FightStateManager.FightState.Input; break; + case FightStateManager.FightState.Heal: + Heal(); + GetTree().CreateTimer(1).Timeout += () => _fightStateManager.CurrentFightState = FightStateManager.FightState.Input; + break; } }; } + private void Heal() + { + // TODO: make heal staging system + _friendlyFighters.Where(f => !f.IsDead()).ForEach(f => + { + f.Health += 50; + f.HealAnimation(); + f.DecrementActions(); + }); + UpdateHealthVisual(); + } private void ResetEnemyActions() { _enemyFighters.ForEach(f => f.ResetActions()); @@ -312,6 +327,11 @@ public partial class FightInstance : Node2D //TODO: remake _fightStateManager.CurrentFightState = FightStateManager.FightState.FriendAttackAnim; } + + public void SelectHeal(Fighter fighter) + { + _fightStateManager.CurrentFightState = FightStateManager.FightState.Heal; + } public bool CheckWinAndSetState() { diff --git a/scripts/CSharp/Common/Fight/FightStateManager.cs b/scripts/CSharp/Common/Fight/FightStateManager.cs index 66bfcbc..5ea800f 100644 --- a/scripts/CSharp/Common/Fight/FightStateManager.cs +++ b/scripts/CSharp/Common/Fight/FightStateManager.cs @@ -22,6 +22,7 @@ public partial class FightStateManager : Node EnemyWinAnim, ChangeSideToEnemy, ChangeSideToFriendly, + Heal, } private FightState _fightStateBacking = FightState.None; diff --git a/scripts/CSharp/Common/Fight/Fighter.cs b/scripts/CSharp/Common/Fight/Fighter.cs index 02a25a7..31afcf4 100644 --- a/scripts/CSharp/Common/Fight/Fighter.cs +++ b/scripts/CSharp/Common/Fight/Fighter.cs @@ -18,6 +18,7 @@ public partial class Fighter : Node2D [Signal] public delegate void DamageTakenEventHandler(); [Signal] public delegate void AttackingEventHandler(); [Signal] public delegate void DyingEventHandler(); + [Signal] public delegate void HealedEventHandler(); private int _health; @@ -36,6 +37,10 @@ public partial class Fighter : Node2D _health = 0; Die(); } + if (_health > maxHealth) + { + _health = maxHealth; + } } } @@ -88,12 +93,23 @@ public partial class Fighter : Node2D if (inputEvent.IsPressed()) ClickedAttack(); } + + public void HealMouseEvent(Node viewport, InputEvent inputEvent, int shapeIdx) + { + if (inputEvent.IsPressed()) + ClickedHeal(); + } private void ClickedAttack() { fightInstance.SelectAttack(this); } + private void ClickedHeal() + { + fightInstance.SelectHeal(this); + } + private void ClickedTarget() { fightInstance.SelectTargetAndAttack(this); @@ -148,8 +164,18 @@ public partial class Fighter : Node2D { return _actions > 0; } + public void DecrementActions() { _actions--; } + + public void HealAnimation() + { + EmitSignalHealed(); + var tween = GetTree().CreateTween(); + tween.TweenProperty(this, "scale", new Vector2(0.6f, 1.4f), 0.15); + tween.TweenProperty(this, "scale", new Vector2(1, 1), 0.4) + .SetTrans(Tween.TransitionType.Cubic).SetEase(Tween.EaseType.Out); + } }