using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
public class Damageable : MonoBehaviour
|
{
|
// ONLY FOR DEBUG USE
|
[SerializeField]
|
private bool selfDamage = false;
|
Animator animator;
|
|
[SerializeField]
|
private int _maxHealth = 100;
|
[SerializeField]
|
private int _health = 100;
|
[SerializeField]
|
private bool _isAlive = true;
|
[SerializeField]
|
private bool isInvincible = false;
|
private float timeSinceHit = 0f;
|
public float invincibilityTime = 0.25f;
|
|
public int MaxHealth
|
{
|
get { return _maxHealth; }
|
set { _maxHealth = value; }
|
}
|
public int Health
|
{
|
get { return _health; }
|
set
|
{
|
if (value > MaxHealth)
|
{
|
|
Debug.Log("Warum?");
|
_health = MaxHealth;
|
}
|
else
|
{
|
_health = value;
|
}
|
if (value <= 0)
|
{
|
IsAlive = false;
|
}
|
}
|
}
|
public bool IsAlive
|
{
|
get { return _isAlive; }
|
private set
|
{
|
_isAlive = value;
|
animator.SetBool(AnimationStrings.isAlive, value);
|
}
|
}
|
|
private void Awake()
|
{
|
//Health = MaxHealth;
|
animator = GetComponent<Animator>();
|
}
|
private void Update()
|
{
|
if (isInvincible)
|
{
|
if (timeSinceHit > invincibilityTime)
|
{
|
isInvincible = false;
|
timeSinceHit = 0;
|
}
|
else
|
{
|
timeSinceHit += Time.deltaTime;
|
}
|
}
|
if (selfDamage)
|
{
|
Hit(10);
|
}
|
}
|
|
public void Hit(int damage)
|
{
|
if (IsAlive && !isInvincible)
|
{
|
Health -= damage;
|
isInvincible = true;
|
|
CharacterEvents.characterDamaged.Invoke(gameObject, damage);
|
}
|
}
|
}
|