using System.Collections; using System.Collections.Generic; using UnityEngine; using static Extensions; public class Entity : LevelObject { //Attribut [SerializeField] private int _hp; [SerializeField] private float _speed; [SerializeField] private int _attack_damage; [SerializeField] private float _attack_speed; private float _attack_speed_wait = 0f; private AnimationEntity _animation; private Shader shaderGUItext; private Shader shaderSpritesDefault; //Enemy Spotted private bool _isEnemyDetected = false; private Entity _enemy; //Methods public void death() { _animation.Die(); Invoke("dying", 0.1f); } void dying() { SpriteRenderer[] spriteRenderers; spriteRenderers = GetComponentsInChildren(); foreach (SpriteRenderer renderer in spriteRenderers) { Color currentColor = renderer.color; currentColor.a = currentColor.a - 0.1f; renderer.color = currentColor; } if(spriteRenderers[0].color.a > 0f) { Invoke("dying", 0.1f); }else { Destroy(gameObject); } } public void hit(int damage) { _hp-=damage; SpriteRenderer[] spriteRenderers; spriteRenderers = GetComponentsInChildren(); shaderGUItext = Shader.Find("GUI/Text Shader"); shaderSpritesDefault = Shader.Find("Sprites/Default"); foreach (SpriteRenderer renderer in spriteRenderers) { renderer.material.shader = shaderGUItext; } Invoke("returnNormalColor", 0.1f); } void returnNormalColor() { SpriteRenderer[] spriteRenderers; spriteRenderers = GetComponentsInChildren(); foreach (SpriteRenderer renderer in spriteRenderers) { renderer.material.shader = shaderSpritesDefault; } } //GETTERS AND SETTERS public int Hp { get { return _hp; } set { _hp = value; } } public float Speed { get { return _speed; } set { _speed = value; } } public int AttackDamage { get { return _attack_damage; } set { _attack_damage = value; } } public float AttackSpeed { get { return _attack_speed; } set { _attack_speed = value; } } public float AttackSpeedWait { get { return _attack_speed_wait; } set { _attack_speed_wait = value; } } public bool IsEnemyDetected { get { return _isEnemyDetected; } set { _isEnemyDetected = value; } } public Entity Enemy { get { return _enemy; } set { _enemy = value; } } public AnimationEntity Animation { get { return _animation; } set { _animation = value; } } #region [LevelManager code] public override bool Equals(ILevelObject other) { return other is Entity otherEntity && base.Equals(otherEntity) && otherEntity._hp == _hp && otherEntity._speed == _speed && otherEntity._attack_speed == _attack_speed && otherEntity._attack_damage == _attack_damage; } public override Dictionary ToDictionary() { var dict = base.ToDictionary(); dict[nameof(_hp)] = _hp; dict[nameof(_speed)] = _speed; dict[nameof(_attack_speed)] = _attack_speed; dict[nameof(_attack_damage)] = _attack_damage; dict[nameof(_attack_speed_wait)] = _attack_speed_wait; return dict; } public override void LoadDictionary(Dictionary dict) { base.LoadDictionary(dict); _hp = dict[nameof(_hp)].ToInt(); _speed = dict[nameof(_speed)].ToFloat(); _attack_speed = dict[nameof(_attack_speed)].ToFloat(); _attack_damage = dict[nameof(_attack_damage)].ToInt(); _attack_speed_wait = dict[nameof(_attack_speed_wait)].ToFloat(); } #endregion }