From e73596e46419ff262f2ba79a78d0c989098d12d4 Mon Sep 17 00:00:00 2001 From: Marco Date: Mon, 31 Mar 2025 18:28:33 +0200 Subject: [PATCH] Motivation --- Resources/Debug/DebugLevels.tres | 12 +++++----- Resources/Enemies/Thermathron.tres | 5 ++-- Resources/Enemies/Turret360.tres | 5 ++-- Scenes/Actors/fsm_player.tscn | 14 ++++++++--- Scenes/HUD/HUD.tscn | 18 ++++++++++++++- Scenes/test.tscn | 4 ++-- .../Components/Actors/PlayerDamageReceiver.cs | 15 ++++++++++++ Scripts/Components/FSM/Enemy/Dead.cs | 2 ++ Scripts/Components/FSM/Player/Dead.cs | 23 ++++++++++++++++--- Scripts/Components/FSM/PlayerStateMachine.cs | 8 +++++++ Scripts/GameManager.cs | 5 ++++ Scripts/Hud.cs | 21 ++++++++--------- Scripts/Resources/EnemyResource.cs | 2 +- 13 files changed, 100 insertions(+), 34 deletions(-) diff --git a/Resources/Debug/DebugLevels.tres b/Resources/Debug/DebugLevels.tres index 761b0414..fa43b907 100644 --- a/Resources/Debug/DebugLevels.tres +++ b/Resources/Debug/DebugLevels.tres @@ -19,7 +19,7 @@ _name = "Intro" [sub_resource type="Resource" id="Resource_cfhv5"] script = ExtResource("1_ov731") EggIndex = 0 -StartingEquipment = Array[ExtResource("2_bkci5")]([]) +StartingEquipment = [] [sub_resource type="Resource" id="Resource_0k62o"] script = ExtResource("2_tnajf") @@ -31,7 +31,7 @@ StartData = SubResource("Resource_cfhv5") [sub_resource type="Resource" id="Resource_tpb7s"] script = ExtResource("1_ov731") EggIndex = 0 -StartingEquipment = Array[ExtResource("2_bkci5")]([]) +StartingEquipment = [] [sub_resource type="Resource" id="Resource_edoov"] script = ExtResource("2_tnajf") @@ -43,7 +43,7 @@ StartData = SubResource("Resource_tpb7s") [sub_resource type="Resource" id="Resource_1sw5g"] script = ExtResource("1_ov731") EggIndex = 255 -StartingEquipment = Array[ExtResource("2_bkci5")]([]) +StartingEquipment = [] [sub_resource type="Resource" id="Resource_47bot"] script = ExtResource("2_tnajf") @@ -73,7 +73,7 @@ _name = "Rebel Base" [sub_resource type="Resource" id="Resource_maxpt"] script = ExtResource("1_ov731") EggIndex = 0 -StartingEquipment = Array[ExtResource("2_bkci5")]([]) +StartingEquipment = [] [sub_resource type="Resource" id="Resource_pein5"] script = ExtResource("2_tnajf") @@ -128,7 +128,7 @@ metadata/_custom_type_script = "uid://dnthdjrx78u6m" [sub_resource type="Resource" id="Resource_7sue8"] script = ExtResource("1_ov731") EggIndex = 255 -StartingEquipment = Array[ExtResource("2_bkci5")]([]) +StartingEquipment = [] metadata/_custom_type_script = "uid://mja0rk7n2kln" [sub_resource type="Resource" id="Resource_ognca"] @@ -142,7 +142,7 @@ metadata/_custom_type_script = "uid://dnthdjrx78u6m" [sub_resource type="Resource" id="Resource_olpjo"] script = ExtResource("1_ov731") EggIndex = 0 -StartingEquipment = Array[ExtResource("2_bkci5")]([]) +StartingEquipment = [] metadata/_custom_type_script = "uid://mja0rk7n2kln" [sub_resource type="Resource" id="Resource_nbnej"] diff --git a/Resources/Enemies/Thermathron.tres b/Resources/Enemies/Thermathron.tres index d3132ec4..03ed490c 100644 --- a/Resources/Enemies/Thermathron.tres +++ b/Resources/Enemies/Thermathron.tres @@ -1,6 +1,5 @@ -[gd_resource type="Resource" script_class="EnemyResource" load_steps=4 format=3 uid="uid://cfdvg162u65sr"] +[gd_resource type="Resource" script_class="EnemyResource" load_steps=3 format=3 uid="uid://cfdvg162u65sr"] -[ext_resource type="Script" uid="uid://cq65aed620ijo" path="res://Scripts/Resources/Loot/LootDrop.cs" id="1_f3huq"] [ext_resource type="Resource" uid="uid://cdfmedtgp2rcn" path="res://Resources/Weapons/EnemyWeapon.tres" id="7_filx8"] [ext_resource type="Script" uid="uid://cd5o0ceb50jki" path="res://Scripts/Resources/EnemyResource.cs" id="8_x8scf"] @@ -12,7 +11,7 @@ PrefabPath = &"res://Scenes/Actors/Thermathron.tscn" MaxHealth = 8.0 MovementSpeed = 38.0 Weapon = ExtResource("7_filx8") -LootDrops = Array[ExtResource("1_f3huq")]([]) +LootDrops = [] PlayerDetectionRange = 90.0 ViewRange = 120.0 AlarmReactRange = 200.0 diff --git a/Resources/Enemies/Turret360.tres b/Resources/Enemies/Turret360.tres index 6b10ec00..65abd27c 100644 --- a/Resources/Enemies/Turret360.tres +++ b/Resources/Enemies/Turret360.tres @@ -1,6 +1,5 @@ -[gd_resource type="Resource" script_class="EnemyResource" load_steps=4 format=3 uid="uid://ysd6wl2gmdhn"] +[gd_resource type="Resource" script_class="EnemyResource" load_steps=3 format=3 uid="uid://ysd6wl2gmdhn"] -[ext_resource type="Script" uid="uid://cq65aed620ijo" path="res://Scripts/Resources/Loot/LootDrop.cs" id="1_sma76"] [ext_resource type="Resource" uid="uid://dyaxm3st70sh6" path="res://Resources/Weapons/Enemy/TurretWeapon.tres" id="1_yap8t"] [ext_resource type="Script" uid="uid://cd5o0ceb50jki" path="res://Scripts/Resources/EnemyResource.cs" id="2_sma76"] @@ -12,7 +11,7 @@ PrefabPath = &"res://Scenes/Actors/Turret360.tscn" MaxHealth = 14.0 MovementSpeed = 0.0 Weapon = ExtResource("1_yap8t") -LootDrops = Array[ExtResource("1_sma76")]([]) +LootDrops = [] PlayerDetectionRange = 90.0 ViewRange = 120.0 AlarmReactRange = 200.0 diff --git a/Scenes/Actors/fsm_player.tscn b/Scenes/Actors/fsm_player.tscn index 64bca92a..d6552b54 100644 --- a/Scenes/Actors/fsm_player.tscn +++ b/Scenes/Actors/fsm_player.tscn @@ -329,8 +329,9 @@ PlayerFSM = NodePath("StateMachine") InteractionController = NodePath("InteractionController") metadata/_edit_group_ = true -[node name="StateMachine" type="Node2D" parent="."] +[node name="StateMachine" type="Node2D" parent="." node_paths=PackedStringArray("MotivationResource")] script = ExtResource("1_mpmil") +MotivationResource = NodePath("../DamageReceiver/MotivationProvider") [node name="Init" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("_animationProvider", "_storageModule")] script = ExtResource("2_i6wc8") @@ -367,11 +368,12 @@ _animationProvider = NodePath("../../AnimationProvider") script = ExtResource("6_82vrk") _animationProvider = NodePath("../../AnimationProvider") -[node name="Dead" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("_animationProvider", "_inputProvider", "_healthProvider")] +[node name="Dead" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("_animationProvider", "_inputProvider", "_healthProvider", "_motivationProvider")] script = ExtResource("4_0pqs8") _animationProvider = NodePath("../../AnimationProvider") _inputProvider = NodePath("../../InputProvider") _healthProvider = NodePath("../../DamageReceiver/HealthProvider") +_motivationProvider = NodePath("../../DamageReceiver/MotivationProvider") [node name="Drowning" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("_animationProvider")] script = ExtResource("10_es1gk") @@ -436,12 +438,13 @@ sprite_frames = SubResource("SpriteFrames_g3wua") z_index = 2 sprite_frames = SubResource("SpriteFrames_5qlss") -[node name="DamageReceiver" type="Area2D" parent="." node_paths=PackedStringArray("_healthProvider", "_shieldProvider")] +[node name="DamageReceiver" type="Area2D" parent="." node_paths=PackedStringArray("_healthProvider", "_shieldProvider", "_motivationProvider")] collision_layer = 2 collision_mask = 392 script = ExtResource("14_igu66") _healthProvider = NodePath("HealthProvider") _shieldProvider = NodePath("ShieldProvider") +_motivationProvider = NodePath("MotivationProvider") ShieldDamageResistances = Array[ExtResource("25_12erk")]([SubResource("Resource_c4ide"), SubResource("Resource_fjg1v"), SubResource("Resource_hed00"), SubResource("Resource_q2flx"), SubResource("Resource_k7ckg"), SubResource("Resource_qlmfy")]) HealthDamageResistances = Array[ExtResource("25_12erk")]([SubResource("Resource_v2m0j"), SubResource("Resource_awrib"), SubResource("Resource_nfrn8"), SubResource("Resource_nfq4p"), SubResource("Resource_m1iep"), SubResource("Resource_ckpe7"), SubResource("Resource_p5rkw")]) @@ -450,6 +453,11 @@ script = ExtResource("15_5qlss") ResourceName = "Health" _maxResource = 32.0 +[node name="MotivationProvider" type="Node2D" parent="DamageReceiver"] +script = ExtResource("15_5qlss") +ResourceName = "Motivation" +_maxResource = 400.0 + [node name="ShieldProvider" type="Node2D" parent="DamageReceiver"] script = ExtResource("15_5qlss") ResourceName = "Shield" diff --git a/Scenes/HUD/HUD.tscn b/Scenes/HUD/HUD.tscn index 30b5318d..eaf950db 100644 --- a/Scenes/HUD/HUD.tscn +++ b/Scenes/HUD/HUD.tscn @@ -85,7 +85,7 @@ texture_margin_bottom = 3.0 [sub_resource type="LabelSettings" id="LabelSettings_bkqle"] font_color = Color(0, 0.737255, 0.113725, 1) -[node name="HUD" type="CanvasLayer" node_paths=PackedStringArray("_healthLabel", "_healthBar", "_shieldLabel", "_shieldBar", "_itemsContainer", "_gameOverPanel", "PauseMenuContainer", "DebugMenuHolder")] +[node name="HUD" type="CanvasLayer" node_paths=PackedStringArray("_healthLabel", "_healthBar", "_shieldLabel", "_shieldBar", "_motivationLabel", "_itemsContainer", "_gameOverPanel", "PauseMenuContainer", "DebugMenuHolder")] process_mode = 3 script = ExtResource("1_m0hb0") WeaponContainerTemplate = ExtResource("2_mattb") @@ -94,6 +94,7 @@ _healthLabel = NodePath("VBoxContainer/HealthBarContainer/HealthLabel") _healthBar = NodePath("VBoxContainer/HealthBarContainer/HealthBar") _shieldLabel = NodePath("VBoxContainer/ShieldBarContainer/ShieldLabel") _shieldBar = NodePath("VBoxContainer/ShieldBarContainer/ShieldBar") +_motivationLabel = NodePath("VBoxContainer/MotivationContainer/Motivationlabel") _itemsContainer = NodePath("VBoxContainer/ItemsContainer") _labelSettings = ExtResource("2_x7kl7") _gameOverPanel = NodePath("GameOver") @@ -196,6 +197,20 @@ text = "100/100" label_settings = ExtResource("2_x7kl7") vertical_alignment = 1 +[node name="MotivationContainer" type="HBoxContainer" parent="VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="VBoxContainer/MotivationContainer"] +layout_mode = 2 +text = "Motivation:" +label_settings = ExtResource("2_x7kl7") + +[node name="Motivationlabel" type="Label" parent="VBoxContainer/MotivationContainer"] +layout_mode = 2 +text = "100%" +label_settings = ExtResource("2_x7kl7") +vertical_alignment = 1 + [node name="ItemsContainer" type="VBoxContainer" parent="VBoxContainer"] layout_mode = 2 size_flags_vertical = 3 @@ -220,6 +235,7 @@ offset_right = 226.0 offset_bottom = 144.0 [node name="InventoryMenu" type="TabContainer" parent="."] +visible = false offset_left = 16.0 offset_top = 9.0 offset_right = 305.0 diff --git a/Scenes/test.tscn b/Scenes/test.tscn index ec2228bb..8053bf25 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -304,7 +304,7 @@ SpawnMarkers = Dictionary[int, NodePath]({ 2: NodePath("Parallax2D/Factory Tilemaps/LevelProps/BossDebugTeleporterDestination"), 255: NodePath("Parallax2D/Factory Tilemaps/Debug Room/DebugRoomStartPosition") }) -StartingEquipment = Array[ExtResource("6_8tdlb")]([ExtResource("4_swym2"), ExtResource("5_nqier")]) +StartingEquipment = [ExtResource("4_swym2"), ExtResource("5_nqier")] MapStartData = SubResource("Resource_6sau4") NavigationTilemap = NodePath("Parallax2D/Factory Tilemaps/Floor") PlayerParentNode = NodePath("Parallax2D/Factory Tilemaps/PlayerParent") @@ -1125,7 +1125,7 @@ position = Vector2(-2000, -736) [node name="ControlPad8" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Targets") instance=ExtResource("12_hfkf1")] position = Vector2(-2027, -735) Targets = [NodePath("../HorizontalForceField")] -Requirements = Array[ExtResource("6_8tdlb")]([ExtResource("84_ma1ta")]) +Requirements = [ExtResource("84_ma1ta")] [node name="Ammo6" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("34_17pjh")] position = Vector2(-872, -220) diff --git a/Scripts/Components/Actors/PlayerDamageReceiver.cs b/Scripts/Components/Actors/PlayerDamageReceiver.cs index e1dfa4c9..6331627a 100644 --- a/Scripts/Components/Actors/PlayerDamageReceiver.cs +++ b/Scripts/Components/Actors/PlayerDamageReceiver.cs @@ -22,6 +22,7 @@ public partial class PlayerDamageReceiver : Area2D [Export] public float BaseHealth { get; private set; } = 32f; [Export] public float BaseShield { get; private set; } = 32f; + [Export] public float BaseMotivation { get; private set; } = 100f; [Export] public float HealthExtendAmount { get; private set; } = 4f; [Export] public float ShieldExtendAmount { get; private set; } = 4f; @@ -31,6 +32,7 @@ public partial class PlayerDamageReceiver : Area2D private ActorResourceProvider _healthProvider; [Export] private ActorResourceProvider _shieldProvider; + [Export] private ActorResourceProvider _motivationProvider; [ExportCategory("Damage Types")] [Export] public StringName AcidGroupName { get; private set; } = "Acid"; @@ -62,6 +64,12 @@ public partial class PlayerDamageReceiver : Area2D get => _shieldProvider.CurrentResource; set => _shieldProvider.CurrentResource = value; } + + public float CurrentMotivation + { + get => _motivationProvider.CurrentResource; + set => _motivationProvider.CurrentResource = value; + } private IStateMachine _stateMachine; @@ -110,6 +118,11 @@ public partial class PlayerDamageReceiver : Area2D SetMaxResources(); }; + + _motivationProvider.ResourceChanged += (value, maxValue) => + { + Hud.Instance?.UpdateMotivation(value, maxValue); + }; } private void SetMaxResources() @@ -121,6 +134,8 @@ public partial class PlayerDamageReceiver : Area2D _healthProvider.MaxResource = BaseHealth + (healthExtends * HealthExtendAmount); _shieldProvider.MaxResource = BaseShield + (shieldExtends * ShieldExtendAmount); + + _motivationProvider.CurrentResource = BaseMotivation; } public void RefillHealth() diff --git a/Scripts/Components/FSM/Enemy/Dead.cs b/Scripts/Components/FSM/Enemy/Dead.cs index b28df4a8..70118369 100644 --- a/Scripts/Components/FSM/Enemy/Dead.cs +++ b/Scripts/Components/FSM/Enemy/Dead.cs @@ -32,6 +32,8 @@ public partial class Dead : EnemyStateBase DropsProvider.DropLoot(); + GameManager.Instance.AddMotivation(StorageModule.EnemyData.MotivationReward); + StorageModule.Root.QueueFree(); } } \ No newline at end of file diff --git a/Scripts/Components/FSM/Player/Dead.cs b/Scripts/Components/FSM/Player/Dead.cs index 56917cb4..b8a7485a 100644 --- a/Scripts/Components/FSM/Player/Dead.cs +++ b/Scripts/Components/FSM/Player/Dead.cs @@ -16,12 +16,23 @@ public partial class Dead : PlayerStateBase [Export] private ActorResourceProvider _healthProvider; + [Export] + private ActorResourceProvider _motivationProvider; + public override void EnterState() { _animationProvider.PlayDeathAnimation(); - // show game over - - Hud.Instance.ShowGameOver(); + + if (_motivationProvider.CurrentResource < 100f) + { + // If motivation is not enough show game over scene + GD.Print("Game over"); + } + else + { + // Else show respawn notification + Hud.Instance.ShowGameOver(); + } } public override void ExitState() @@ -49,6 +60,12 @@ public partial class Dead : PlayerStateBase MainObject.GlobalPosition = GameManager.Instance.LastCheckpointPosition; _healthProvider.FillResource(); GameManager.Instance.ClearBullets(); + + _motivationProvider.CurrentResource -= 100f; + if (_motivationProvider.CurrentResource <= 1f) + { + _motivationProvider.CurrentResource = 1f; + } ChangeState(PlayerState.Active); } diff --git a/Scripts/Components/FSM/PlayerStateMachine.cs b/Scripts/Components/FSM/PlayerStateMachine.cs index cf70af5d..0c9aaed4 100644 --- a/Scripts/Components/FSM/PlayerStateMachine.cs +++ b/Scripts/Components/FSM/PlayerStateMachine.cs @@ -1,4 +1,5 @@ using System; +using Cirno.Scripts.Components.Actors; using Godot; namespace Cirno.Scripts.Components.FSM; @@ -9,6 +10,8 @@ public partial class PlayerStateMachine : StateMachineBase("MessageTimer"); - // await ToSignal(messageTimer, Timer.SignalName.Timeout); - // - // var message = GetNode