-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDamagePlayer.cs
146 lines (124 loc) · 5.75 KB
/
DamagePlayer.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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//Script exclusivo del Enemy para hacer daño al Player
public class DamagePlayer : MonoBehaviour
{
private GameObject thePlayer;
public int damage;
public GameObject canvasDamage;
//Stats del Player
private CharacterStats playerStats;
//Stats del Enemigo
private CharacterStats _stats;
private EnemyController enemyController;
public bool isSkillDamagePlayer;
public bool isEnemyWeapon;
private void Start()
{
playerStats = GameObject.FindWithTag("Player").GetComponent<CharacterStats>();
_stats = GetComponent<CharacterStats>();
enemyController = GetComponent<EnemyController>();
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag.Equals("Player") && isSkillDamagePlayer)
{
if (collision.gameObject.GetComponent<PlayerController>().dashSkill ||
collision.gameObject.GetComponent<PlayerController>().isDead)
{
return;
}
float strFac = 1.0f + (float)_stats.strengthLevels[_stats.level] / CharacterStats.MAX_STAT_VAL;
//Debug.Log("Fuerza del Enemigo " +strFac);
//Factor de Defensa del Player
float playerFac = 1.0f - (float)playerStats.newdefenseLevels / CharacterStats.MAX_STAT_VAL;
//Debug.Log("Defensa del Player " + playerFac);
//Valor de ataque del enemigo vs. la defensa del Player
int totalDamage = Mathf.Clamp((int)((float)damage * strFac * playerFac), 1, CharacterStats.MAX_HEALTH);
//Debug.Log(totalDamage);
//Probabilidad de falla el golpe tomando los stats del player
if (Random.Range(0, CharacterStats.MAX_STAT_VAL) < playerStats.newluckLevels)
{
//Probabilidad de acertar golpe tomando los stats del enemy
if (Random.Range(0, CharacterStats.MAX_STAT_VAL) < _stats.accuracyLevels[_stats.level])
{
totalDamage = 0;
}
}
if (totalDamage == 0)
{
var clone1 = (GameObject)Instantiate(canvasDamage, collision.transform.position, Quaternion.Euler(Vector3.zero));
clone1.GetComponent<DamageNumber>().damagePoints = "MISS";
SFXManager.SharedInstance.PlaySFX(SFXType.SoundType.MISS_ATTACK);
return; //Si falló el enemigo, pues no tiene porque parpadear el Player!!!
}
else
{
//Muestra el valor con animacion
var clone = (GameObject)Instantiate(canvasDamage, collision.transform.position, Quaternion.Euler(Vector3.zero));
clone.GetComponent<DamageNumber>().damagePoints = "" + totalDamage;
SFXManager.SharedInstance.PlaySFX(SFXType.SoundType.ATTACK1);
}
//Resta vida al Player
collision.gameObject.GetComponent<HealthManager>().DamageCharacter(totalDamage);
if (!isEnemyWeapon)
{
Destroy(this.gameObject);
}
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
//Si el enemigo colisiona con el Player
if (collision.gameObject.tag.Equals("Player"))
{
if (collision.gameObject.GetComponent<PlayerController>().dashSkill ||
collision.gameObject.GetComponent<PlayerController>().isDead)
{
return;
}
//Factor de Fuerza del Enemigo
float strFac = 1.0f + (float)_stats.strengthLevels[_stats.level] / CharacterStats.MAX_STAT_VAL;
//Debug.Log("Fuerza del Enemigo " +strFac);
//Factor de Defensa del Player
float playerFac = 1.0f - (float)playerStats.newdefenseLevels / CharacterStats.MAX_STAT_VAL;
//Debug.Log("Defensa del Player " + playerFac);
//Valor de ataque del enemigo vs. la defensa del Player
int totalDamage = Mathf.Clamp( (int)((float)damage * strFac * playerFac) , 1, CharacterStats.MAX_HEALTH);
//Debug.Log(totalDamage);
//Probabilidad de falla el golpe tomando los stats del player
if(Random.Range(0, CharacterStats.MAX_STAT_VAL) < playerStats.newluckLevels)
{
//Probabilidad de acertar golpe tomando los stats del enemy
if (Random.Range(0, CharacterStats.MAX_STAT_VAL) < _stats.accuracyLevels[_stats.level])
{
totalDamage = 0;
}
}
if (totalDamage == 0)
{
var clone1 = (GameObject)Instantiate(canvasDamage, collision.transform.position, Quaternion.Euler(Vector3.zero));
clone1.GetComponent<DamageNumber>().damagePoints = "MISS";
SFXManager.SharedInstance.PlaySFX(SFXType.SoundType.MISS_ATTACK);
return; //Si falló el enemigo, pues no tiene porque parpadear el Player!!!
}
else
{
//Muestra el valor con animacion
var clone = (GameObject)Instantiate(canvasDamage, collision.transform.position, Quaternion.Euler(Vector3.zero));
clone.GetComponent<DamageNumber>().damagePoints = "" + totalDamage;
SFXManager.SharedInstance.PlaySFX(SFXType.SoundType.ATTACK1);
}
//Resta vida al Player
collision.gameObject.GetComponent<HealthManager>().DamageCharacter(totalDamage);
if (!isSkillDamagePlayer)
{
if (!_stats.enemyWeapon)
{
enemyController.HitThePlayer();
}
}
}
}
}