From d95020b910bc69ab733f87d5d0238fe2d1164590 Mon Sep 17 00:00:00 2001
From: miepzerino <o.skotnik@gmail.com>
Date: Sat, 16 Dec 2023 18:52:45 +0000
Subject: [PATCH] Overhauled audio management

---
 Assets/Scripts/Damageable.cs |   58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/Assets/Scripts/Damageable.cs b/Assets/Scripts/Damageable.cs
index 7901a04..6fd7016 100644
--- a/Assets/Scripts/Damageable.cs
+++ b/Assets/Scripts/Damageable.cs
@@ -1,21 +1,32 @@
+using Assets.Scripts.Enums;
+using System;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class Damageable : MonoBehaviour
 {
+#if (UNITY_EDITOR)
+    // ONLY FOR DEBUG USE
+    [SerializeField]
+    private bool selfDamage = false;
+#endif
     Animator animator;
 
     [SerializeField]
     private int _maxHealth = 100;
     [SerializeField]
-    private int _health;
+    private int _health = 100;
     [SerializeField]
     private bool _isAlive = true;
     [SerializeField]
     private bool isInvincible = false;
     private float timeSinceHit = 0f;
     public float invincibilityTime = 0.25f;
+
+    public SoundName hitSound;
+    public SoundName healSound;
+    public SoundName deathSound;
 
     public int MaxHealth
     {
@@ -27,10 +38,22 @@
         get { return _health; }
         set
         {
-            _health = value;
+            if (value > MaxHealth)
+            {
+                _health = MaxHealth;
+            }
+            else
+            {
+                _health = value;
+            }
             if (value <= 0)
             {
                 IsAlive = false;
+                // Not needed here as it's played from the Animator
+                //if (deathSound != null)
+                //{
+                SoundManager.instance.PlaySoundAtPoint(gameObject, deathSound);
+                //}
             }
         }
     }
@@ -46,7 +69,7 @@
 
     private void Awake()
     {
-        Health = MaxHealth;
+        //Health = MaxHealth;
         animator = GetComponent<Animator>();
     }
     private void Update()
@@ -63,14 +86,41 @@
                 timeSinceHit += Time.deltaTime;
             }
         }
+#if (UNITY_EDITOR)
+        if (selfDamage)
+        {
+            Hit(10);
+        }
+#endif
     }
 
     public void Hit(int damage)
     {
         if (IsAlive && !isInvincible)
         {
-            Health -= damage;
+            int actualDamageAmount = Mathf.Min(damage, Health);
+            Health -= actualDamageAmount;
             isInvincible = true;
+
+            CharacterEvents.characterDamaged.Invoke(gameObject, actualDamageAmount);
+            SoundManager.instance.PlaySoundAtPoint(gameObject, hitSound);
         }
     }
+
+    public bool Heal(int healAmount)
+    {
+        bool result = false;
+        if (IsAlive && Health < MaxHealth)
+        {
+            int actualHealAmount = Mathf.Min(healAmount, MaxHealth - Health);
+            Health += actualHealAmount;
+
+            CharacterEvents.characterHealed.Invoke(gameObject, actualHealAmount);
+
+            result = true;
+            SoundManager.instance.PlaySoundAtPoint(gameObject, healSound);
+
+        }
+        return result;
+    }
 }

--
Gitblit v1.9.3