163 lines
4.0 KiB
C#
163 lines
4.0 KiB
C#
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<SpriteRenderer>();
|
|
|
|
|
|
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<SpriteRenderer>();
|
|
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<SpriteRenderer>();
|
|
|
|
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<string, object> 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<string, object> 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
|
|
}
|