-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHealthManager.cs
161 lines (144 loc) · 4.86 KB
/
HealthManager.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HealthManager : MonoBehaviour
{
[Tooltip("Vida maxima en el nivel de exp")]
public int maxHealth;
[SerializeField]
private int currentHealth;
public int Health
{
get
{
return currentHealth;
}
}
[Tooltip("Determina si el character hara flashing al ser dañado")]
public bool flashActive;
[Tooltip("Duración del Flashing, si el gameObject tiene valor positivo hara flash!")]
public float flashLength;
private float flashCounter;
private SpriteRenderer _characterRenderer;
public int expWhenDefeated;
private QuestEnemy quest;
private QuestManager questManager;
private UIManager uiManager;
// Start is called before the first frame update
void Start()
{
//Apenas arranca y asigna el maxHealth a la vida al "nacer"
UpdateMaxHealth(maxHealth);
_characterRenderer = GetComponent<SpriteRenderer>();
//QuestEnemy
quest = GetComponent<QuestEnemy>();
questManager = FindObjectOfType<QuestManager>();
uiManager = FindObjectOfType<UIManager>();
}
/// <summary>
/// Se asigna valor de dañod con variable "damage"
/// </summary>
/// <param name="damage"></param>
public void DamageCharacter(int damage)
{
//Quita vida al Player o enemigo
currentHealth -= damage;
//Validar vida del Player o Enemy
if(currentHealth < 0)
{
currentHealth = 0;
//Asigna experiencia al "Player" cuando el enemigo muere
if (gameObject.tag.Equals("Enemy"))
{
GameObject.FindWithTag("Player").GetComponent<CharacterStats>().AddExperience(expWhenDefeated);
questManager.enemyKilled = quest;
SFXManager.SharedInstance.PlaySFX(SFXType.SoundType.ENEMY_DIE);
gameObject.SetActive(false);
}
if (gameObject.tag.Equals("Player"))
{
GetComponent<PlayerController>().isDead = true;
//GetComponent<CircleCollider2D>().enabled = false;
//gameObject.SetActive(false);
uiManager.LaunchGameOver();
}
}
//Si la duracion del Flash es positiva, entonces aplica el flash
if(flashLength > 0)
{
//GetComponent<CircleCollider2D>().enabled = false; //Desactiva el Coliider para que no reciba daño
//GetComponent<PlayerController>().canMove = false; //El jugador no podra moverse (Revisar PlayerController)
flashActive = true; // Activa el Flash
flashCounter = flashLength; //Asigna el contador de Flashing
}
}
public void UpdateMaxHealth(int newMaxHealth)
{
maxHealth = newMaxHealth;
currentHealth = maxHealth;
}
/// <summary>
/// Metodo que sirve para el comportamiento del Flashing
/// </summary>
/// <param name="visible"></param>
void ToggleColor(bool visible)
{
_characterRenderer.color = new Color(_characterRenderer.color.r,
_characterRenderer.color.g,
_characterRenderer.color.b,
(visible ? 1.0f : 0.0f)); // Si Visible es "true", Transparencia 100%, si es "False" 0%
}
public void AddHealthPoints(int value)
{
if((currentHealth + value) >= maxHealth){
currentHealth = maxHealth;
return;
}
currentHealth += value;
}
public void ChangeHealth(int value)
{
currentHealth = value;
}
// Update is called once per frame
void Update()
{
//Logica del Flashing
if (flashActive)
{
flashCounter -= Time.deltaTime;
if (flashCounter > flashLength * 0.83f)
{
ToggleColor(false);
}
else if (flashCounter > flashLength * 0.66f)
{
ToggleColor(true);
}
else if (flashCounter > flashLength * 0.5f)
{
ToggleColor(false);
}
else if (flashCounter > flashLength * 0.33f)
{
ToggleColor(true);
}
else if (flashCounter > flashLength * 0.166f)
{
ToggleColor(false);
}
else if (flashCounter > 0)
{
ToggleColor(true);
}
else
{
//Normaliza la conficion del Character!!!
ToggleColor(true);
flashActive = false;
//GetComponent<CircleCollider2D>().enabled = true;
//GetComponent<PlayerController>().canMove = true;
}
}
}
}