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,15 +1,22 @@
+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]
@@ -17,6 +24,10 @@
private float timeSinceHit = 0f;
public float invincibilityTime = 0.25f;
+ public SoundName hitSound;
+ public SoundName healSound;
+ public SoundName deathSound;
+
public int MaxHealth
{
get { return _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.10.0