diff --git a/PuzzleGameProject/Assets/Scenes/Templates/NewDungeon.unity b/PuzzleGameProject/Assets/Scenes/Templates/NewDungeon.unity index a2e8bab..130b21c 100644 --- a/PuzzleGameProject/Assets/Scenes/Templates/NewDungeon.unity +++ b/PuzzleGameProject/Assets/Scenes/Templates/NewDungeon.unity @@ -255,6 +255,7 @@ MonoBehaviour: blackDieAbility: {fileID: 37414492} chestRewardSelection: {fileID: 1772543310} torchAbility: {fileID: 1015377333} + armorAbility: {fileID: 802557996} player: {fileID: 386902759} --- !u!4 &323570089 Transform: @@ -1236,6 +1237,7 @@ RectTransform: - {fileID: 37414491} - {fileID: 27283140} - {fileID: 1015377332} + - {fileID: 802557995} m_Father: {fileID: 748138896} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -1281,6 +1283,56 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 801256674} m_CullTransparentMesh: 1 +--- !u!1 &802557994 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 802557995} + - component: {fileID: 802557996} + m_Layer: 0 + m_Name: ArmorAndDiamond + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &802557995 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 802557994} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 801256675} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &802557996 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 802557994} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8a78399457cb0c74b9140b3ea8b42870, type: 3} + m_Name: + m_EditorClassIdentifier: + player: {fileID: 386902759} + maxUses: 3 --- !u!1001 &864735004 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/PuzzleGameProject/Assets/Scripts/Abilities/ArmorAbility.cs b/PuzzleGameProject/Assets/Scripts/Abilities/ArmorAbility.cs new file mode 100644 index 0000000..f3615fe --- /dev/null +++ b/PuzzleGameProject/Assets/Scripts/Abilities/ArmorAbility.cs @@ -0,0 +1,46 @@ +using System; +using UnityEngine; + +namespace Abilities +{ + public class ArmorAbility : MonoBehaviour + { + public event Action MarkAbilityUsed; + public event Action ArmorAbilityGained; + + [SerializeField] private Player player; + [SerializeField] private int maxUses; + private int currentUses; + + private bool _abilityAcive; + private void OnEnable() + { + ChestRewardSelection.DiamondAndLifeSelected += HandleAbilityAcitvated; + player.DamageTaken += HandleDamageDealt; + } + + private void HandleDamageDealt(int damage) + { + for (int i = 0; i < damage; i++) + { + if (_abilityAcive) + { + player.Heal(1); + currentUses--; + MarkAbilityUsed?.Invoke(); + if (currentUses < 1) + { + _abilityAcive = false; + } + } + } + } + + private void HandleAbilityAcitvated() + { + ArmorAbilityGained?.Invoke(); + _abilityAcive = true; + currentUses = maxUses; + } + } +} diff --git a/PuzzleGameProject/Assets/Scripts/Abilities/ArmorAbility.cs.meta b/PuzzleGameProject/Assets/Scripts/Abilities/ArmorAbility.cs.meta new file mode 100644 index 0000000..372449e --- /dev/null +++ b/PuzzleGameProject/Assets/Scripts/Abilities/ArmorAbility.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8a78399457cb0c74b9140b3ea8b42870 \ No newline at end of file diff --git a/PuzzleGameProject/Assets/Scripts/Player.cs b/PuzzleGameProject/Assets/Scripts/Player.cs index c043e46..7cceab4 100644 --- a/PuzzleGameProject/Assets/Scripts/Player.cs +++ b/PuzzleGameProject/Assets/Scripts/Player.cs @@ -6,7 +6,8 @@ using UnityEngine.Serialization; public class Player : MonoBehaviour { public event Action DiamondCountUpdated; - public event Action HealthUpdated; + public event Action HealthUpdated; + public event Action DamageTaken; [SerializeField] private int maxHealth; [SerializeField] private int diamonds; @@ -44,6 +45,7 @@ public class Player : MonoBehaviour _healthIndex += damage; UpdateGUI(); } + DamageTaken?.Invoke(damage); } public void Heal(int healAmount) diff --git a/PuzzleGameProject/Assets/Scripts/UI/InGameHUDController.cs b/PuzzleGameProject/Assets/Scripts/UI/InGameHUDController.cs index bc36965..1fbbe81 100644 --- a/PuzzleGameProject/Assets/Scripts/UI/InGameHUDController.cs +++ b/PuzzleGameProject/Assets/Scripts/UI/InGameHUDController.cs @@ -184,6 +184,12 @@ namespace UI _blackDieAbilityUsesUsed--; } + public void MarkArmorAbilityUsed() + { + _armorUses[_armorUsesUsed].value = true; + _armorUsesUsed++; + } + public void MarkStartingBlackDieAbilityUsed() { _startingBlackDieAbilityUses[_startingBlackDieAbilityUsesUsed].value = true; diff --git a/PuzzleGameProject/Assets/Scripts/UI/UIManager.cs b/PuzzleGameProject/Assets/Scripts/UI/UIManager.cs index 5f1f9aa..a58adb9 100644 --- a/PuzzleGameProject/Assets/Scripts/UI/UIManager.cs +++ b/PuzzleGameProject/Assets/Scripts/UI/UIManager.cs @@ -20,6 +20,7 @@ namespace UI [SerializeField] private BlackDieAbility blackDieAbility; [SerializeField] private ChestRewardSelection chestRewardSelection; [SerializeField] private TorchAbility torchAbility; + [SerializeField] private ArmorAbility armorAbility; [SerializeField] private Player player; public static UIManager Instance { get; private set; } @@ -73,6 +74,9 @@ namespace UI player.DiamondCountUpdated += hudController.SetDiamondCount; player.HealthUpdated += hudController.SetHealth; + + armorAbility.ArmorAbilityGained += hudController.SetArmorAbilityEnabled; + armorAbility.MarkAbilityUsed += hudController.MarkArmorAbilityUsed; } private void OnDisable()