| | |
| | | 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 float timeSinceHit = 0f; |
| | | public float invincibilityTime = 0.25f; |
| | | |
| | | public AudioClip hitSound; |
| | | public AudioClip healSound; |
| | | public AudioClip deathSound; |
| | | |
| | | public int MaxHealth |
| | | { |
| | | get { return _maxHealth; } |
| | |
| | | { |
| | | if (value > MaxHealth) |
| | | { |
| | | |
| | | Debug.Log("Warum?"); |
| | | _health = MaxHealth; |
| | | } |
| | | else |
| | |
| | | if (value <= 0) |
| | | { |
| | | IsAlive = false; |
| | | if (deathSound != null) |
| | | { |
| | | SoundManager.instance.PlaySoundAtPoint(gameObject, deathSound.name); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | 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, damage); |
| | | 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; |
| | | } |
| | | } |