From 1d74f3204692bb69aabf3c57fbdf4601a31a311f Mon Sep 17 00:00:00 2001
From: miepzerino <o.skotnik@gmail.com>
Date: Sat, 16 Dec 2023 18:32:11 +0000
Subject: [PATCH] Added audio manager + sound effects

---
 Assets/Scripts/Damageable.cs |   44 +++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/Assets/Scripts/Damageable.cs b/Assets/Scripts/Damageable.cs
index 52da994..09fa72f 100644
--- a/Assets/Scripts/Damageable.cs
+++ b/Assets/Scripts/Damageable.cs
@@ -1,12 +1,15 @@
+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]
@@ -20,6 +23,10 @@
     private float timeSinceHit = 0f;
     public float invincibilityTime = 0.25f;
 
+    public AudioClip hitSound;
+    public AudioClip healSound;
+    public AudioClip deathSound;
+
     public int MaxHealth
     {
         get { return _maxHealth; }
@@ -32,8 +39,6 @@
         {
             if (value > MaxHealth)
             {
-
-                Debug.Log("Warum?");
                 _health = MaxHealth;
             }
             else
@@ -43,6 +48,10 @@
             if (value <= 0)
             {
                 IsAlive = false;
+                if (deathSound != null)
+                {
+                    SoundManager.instance.PlaySoundAtPoint(gameObject, deathSound.name);
+                }
             }
         }
     }
@@ -75,18 +84,47 @@
                 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);
+            if (hitSound != null)
+            {
+                SoundManager.instance.PlaySoundAtPoint(gameObject, hitSound.name);
+            }
         }
     }
+
+    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;
+            if (healSound != null)
+            {
+                SoundManager.instance.PlaySoundAtPoint(gameObject, healSound.name);
+            }
+
+        }
+        return result;
+    }
 }

--
Gitblit v1.9.3