Added a SHIT TON of polish to the animation sequencing to make everything much cleaner and clearer

This commit is contained in:
Gregory Campbell
2020-04-18 13:20:00 -04:00
parent a42a3ad778
commit d0b6762d32
+110 -69
View File
@@ -290,7 +290,7 @@ public class GMScript : MonoBehaviour
//print(robotColour); //print(robotColour);
//PARTY MEMEBER ATTACKING ENEMY //PARTY MEMEBER ATTACKING ENEMY
DamageParty(partyAttack, robotColour); yield return DamageParty(partyAttack, robotColour);
} }
// CLEAN UP IN CASE ANYTHING IS MISSED // CLEAN UP IN CASE ANYTHING IS MISSED
@@ -307,25 +307,30 @@ public class GMScript : MonoBehaviour
} }
StartCoroutine(AttackEnemy()); yield return StartCoroutine(AttackEnemy());
} }
IEnumerator AttackEnemy() IEnumerator AttackEnemy()
{ {
// RUNS ATTACK ANIMATION OF ENEMY // PRE ATTACK BUFF EFFECT ANIMATION
Animator enemyAttackAnim = EnemyParts[2].transform.parent.GetComponent<Animator>(); yield return StartCoroutine(PreAttackBuffAnimEnemy());
enemyAttackAnim.SetTrigger("AttackTrigger");
// ANIMATION FOR FIRST ARM
yield return StartCoroutine(AttackAnimEnemy());
yield return new WaitForSeconds( // FIRST ARM EFFECT ANIMATION AND DAMAGE CALCULATIONS
enemyAttackAnim.GetCurrentAnimatorStateInfo(0).length yield return StartCoroutine(DamageEnemy(enemyAttack, EnemyPartsColours[3]));
+enemyAttackAnim.GetCurrentAnimatorStateInfo(0).normalizedTime);
enemyAttackAnim.SetTrigger("AttackTrigger"); // ANIMATION FOR SECOND ARM
yield return StartCoroutine(AttackAnimEnemy());
//ENEMY ATTACKING PARTY (DEFAULT DISPLAY TEXT TO RED FOR NOW) // SECOND ARM EFFECT ANIMATION AND DAMAGE CALCULATIONS
DamageEnemy(enemyAttack, Colours.Red); yield return StartCoroutine(DamageEnemy(enemyAttack, EnemyPartsColours[4]));
// POST ATTACK ABILITY EFFECT ANIMATION
yield return StartCoroutine(PostAttackBuffAnimEnemy());
} }
@@ -402,30 +407,30 @@ public class GMScript : MonoBehaviour
} }
IEnumerator HitEffectEnemy() IEnumerator HitEffectEnemy(int attackColour)
{ {
EnemyHit.transform.GetComponent<SpriteRenderer>().color = EnemyHit.transform.GetComponent<SpriteRenderer>().color =
SetColour(EnemyPartsColours[3]); SetColour(attackColour);
EnemyHit.transform.GetChild(0).GetComponent<SpriteRenderer>().sprite = EnemyHit.transform.GetChild(0).GetComponent<SpriteRenderer>().sprite =
Symbols[EnemyPartsColours[3]]; Symbols[attackColour];
EnemyHit.transform.GetChild(0).GetComponent<SpriteRenderer>().color = EnemyHit.transform.GetChild(0).GetComponent<SpriteRenderer>().color =
SetColour(EnemyPartsColours[3]); SetColour(attackColour);
if((Colours)EnemyPartsColours[0] == Colours.White || if((Colours)attackColour == Colours.White ||
(Colours)EnemyPartsColours[0] == Colours.Grey || (Colours)attackColour == Colours.Grey ||
(Colours)EnemyPartsColours[0] == Colours.Black) (Colours)attackColour == Colours.Black)
{ {
Hit.transform.GetComponent<SpriteRenderer>().color = Hit.transform.GetComponent<SpriteRenderer>().color =
SetColour(EnemyPartsColours[0]); SetColour(attackColour);
Hit.transform.GetChild(0).GetComponent<SpriteRenderer>().sprite = Hit.transform.GetChild(0).GetComponent<SpriteRenderer>().sprite =
Symbols[EnemyPartsColours[0]]; Symbols[attackColour];
Hit.transform.GetChild(0).GetComponent<SpriteRenderer>().color = Hit.transform.GetChild(0).GetComponent<SpriteRenderer>().color =
SetColour(EnemyPartsColours[0]); SetColour(attackColour);
Hit.SetActive(true); Hit.SetActive(true);
@@ -441,17 +446,20 @@ public class GMScript : MonoBehaviour
} }
// ENEMY SHIELD GOES UP IF // ENEMY SHIELD GOES UP IF
if ((Colours)EnemyPartsColours[0] == Colours.Grey){ if ((Colours)attackColour == Colours.Grey){
enemyShield = true; enemyShield = true;
EnemyShield.transform.GetComponent<SpriteRenderer>().color = EnemyShield.transform.GetComponent<SpriteRenderer>().color =
SetColour(EnemyPartsColours[0]); SetColour(attackColour);
EnemyShield.SetActive(true); EnemyShield.SetActive(true);
} }
//HIT EFFECT ONLY WORKS IF THERE IS NO SHIELD UP //HIT EFFECT ONLY WORKS IF THERE IS NO SHIELD UP
if(!shield && !enemyShield) if(!shield && !enemyShield
&& (Colours)attackColour != Colours.White &&
(Colours)attackColour != Colours.Grey &&
(Colours)attackColour != Colours.Black)
{ {
EnemyHit.SetActive(true); EnemyHit.SetActive(true);
@@ -467,35 +475,16 @@ public class GMScript : MonoBehaviour
EnemyHit.SetActive(false); EnemyHit.SetActive(false);
EnemyHit.transform.GetComponent<SpriteRenderer>().color =
SetColour(EnemyPartsColours[4]);
EnemyHit.transform.GetChild(0).GetComponent<SpriteRenderer>().sprite =
Symbols[EnemyPartsColours[4]];
EnemyHit.transform.GetChild(0).GetComponent<SpriteRenderer>().color =
SetColour(EnemyPartsColours[4]);
EnemyHit.SetActive(true);
hit.SetTrigger("HitTrigger");
yield return new WaitForSeconds(
hit.GetCurrentAnimatorStateInfo(0).length
+hit.GetCurrentAnimatorStateInfo(0).normalizedTime);
EnemyHit.SetActive(false);
hit.SetTrigger("HitTrigger");
} }
} }
void DamageParty(int partyAttack, Colours partyMember) IEnumerator DamageParty(int partyAttack, Colours partyMember)
{ {
float modifier = 1.0f; float modifier = 1.0f;
float modifiedAttack = 2.0f; float modifiedAttack = 2.0f;
float modifiedHeal = 0f;
int colourModifier = ColourCompare(partyMember, (Colours)EnemyPartsColours[2]); int colourModifier = ColourCompare(partyMember, (Colours)EnemyPartsColours[2]);
// ATTACK MODIFIER BASED ON THE RELATION OF THE COLOUR OF THE PARTY MEMBER // ATTACK MODIFIER BASED ON THE RELATION OF THE COLOUR OF THE PARTY MEMBER
@@ -573,23 +562,21 @@ public class GMScript : MonoBehaviour
if(buff) if(buff)
{ {
modifiedAttack = (partyAttack * modifier) * 2; modifiedHeal = (partyAttack * modifier) * 2;
} else { } else {
modifiedAttack = partyAttack * modifier; modifiedHeal = partyAttack * modifier;
} }
partyHealth += (int)modifiedAttack; partyHealth += (int)modifiedHeal;
StartCoroutine(DisplayDamageText((int)modifiedAttack, PartyDamageText, partyMember)); print(partyMember + " healed the team for " + modifiedHeal + " HP");
print(partyMember + " healed the team for 4");
print("Party health is now: " + partyHealth + " HP"); print("Party health is now: " + partyHealth + " HP");
} }
if(partyMember == Colours.Black) if(partyMember == Colours.Black)
{ {
StartCoroutine(DisplayDamageText(0, PartyDamageText, partyMember));
print(partyMember + " buffed the team!"); print(partyMember + " buffed the team!");
print("Party health is now: " + partyHealth + " HP"); print("Party health is now: " + partyHealth + " HP");
@@ -603,7 +590,10 @@ public class GMScript : MonoBehaviour
} }
// ATTACKS ARE BLOCK IF SHIELD IS UP // ATTACKS ARE BLOCK IF SHIELD IS UP
if(shield || enemyShield) if(shield || enemyShield &&
(partyMember != Colours.White
&& partyMember != Colours.Grey
&& partyMember != Colours.Black))
{ {
modifier = 0; modifier = 0;
@@ -616,6 +606,9 @@ public class GMScript : MonoBehaviour
} }
// IN CASE MODIFIER IS NEGATIVE
if(modifier < 0) modifier = 0;
// ATTACKS ARE DOUBLE DAMAGE IF BLACK ROBOT HAS DONE ITS ACTION // ATTACKS ARE DOUBLE DAMAGE IF BLACK ROBOT HAS DONE ITS ACTION
if(buff) if(buff)
{ {
@@ -624,8 +617,16 @@ public class GMScript : MonoBehaviour
modifiedAttack = partyAttack * modifier; modifiedAttack = partyAttack * modifier;
} }
StartCoroutine(HitEffectParty(partyMember)); yield return StartCoroutine(HitEffectParty(partyMember));
StartCoroutine(DisplayDamageText((int)modifiedAttack, EnemyDamageText, partyMember));
if(partyMember == Colours.White)
{
yield return StartCoroutine(DisplayDamageText((int)modifiedHeal, PartyDamageText, partyMember));
} else if(partyMember == Colours.Black) {
yield return StartCoroutine(DisplayDamageText(0, PartyDamageText, partyMember));
} else {
yield return StartCoroutine(DisplayDamageText((int)modifiedAttack, EnemyDamageText, partyMember));
}
enemyHealth -= (int)modifiedAttack; enemyHealth -= (int)modifiedAttack;
print(partyMember + " robot attacked for " + modifiedAttack); print(partyMember + " robot attacked for " + modifiedAttack);
@@ -633,7 +634,7 @@ public class GMScript : MonoBehaviour
} }
void DamageEnemy(int enemyAttack, Colours enemyColour) IEnumerator DamageEnemy(int enemyAttack, int attackColour)
{ {
int modifier = 0; int modifier = 0;
@@ -643,25 +644,25 @@ public class GMScript : MonoBehaviour
for(int j = 0; j < partySize; j++){ for(int j = 0; j < partySize; j++){
modifier += modifier +=
ColourCompare((Colours)EnemyPartsColours[3+i], (Colours)PartyColours[j]); ColourCompare((Colours)attackColour, (Colours)PartyColours[j]);
} }
} }
// ADD DAMAGE IF EITHER OF THE ARMS MATCHES THE COLOUR OF THE ANTENNA // ADD DAMAGE IF EITHER OF THE ARMS MATCHES THE COLOUR OF THE ANTENNA
if(EnemyPartsColours[0] == EnemyPartsColours[3]) modifier += 2; if(EnemyPartsColours[0] == attackColour)
if(EnemyPartsColours[0] == EnemyPartsColours[4]) modifier += 2; {
print("Antenna Buff!");
modifier += 2;
}
// IN CASE MODIFIER MAKES ENEMY ATTACK NEGATIVE
if(modifier < -enemyAttack) modifier = -enemyAttack;
modifiedAttack = enemyAttack + modifier; modifiedAttack = enemyAttack + modifier;
// RUN "NON-ATTACK" ABILITIES FOR ENEMY IF ANTENNA IS WHITE, GREY OR BLACK RESPECTIVELY // RUN "NON-ATTACK" BUFF FOR ENEMY IF ANTENNA IS BLACK SO ATTACKS ARE BUFFED
if((Colours)EnemyPartsColours[0] == Colours.White)
{
enemyHealth += 2;
StartCoroutine(DisplayDamageText(2, EnemyDamageText, (Colours)EnemyPartsColours[0]));
}
if((Colours)EnemyPartsColours[0] == Colours.Black) if((Colours)EnemyPartsColours[0] == Colours.Black)
{ {
modifiedAttack *= 2; modifiedAttack *= 2;
@@ -680,11 +681,11 @@ public class GMScript : MonoBehaviour
buff = false; buff = false;
StartCoroutine(HitEffectEnemy()); yield return StartCoroutine(HitEffectEnemy(attackColour));
StartCoroutine(DisplayDamageText(modifiedAttack, PartyDamageText, enemyColour)); yield return StartCoroutine(DisplayDamageText(modifiedAttack, PartyDamageText, (Colours)attackColour));
partyHealth -= modifiedAttack; partyHealth -= modifiedAttack;
print(enemyColour + " enemy robot attacked for " + modifiedAttack); print((Colours)attackColour + " enemy robot arm attacked for " + modifiedAttack);
print("Party health is now: " + partyHealth + " HP"); print("Party health is now: " + partyHealth + " HP");
} }
@@ -701,6 +702,46 @@ public class GMScript : MonoBehaviour
} }
IEnumerator AttackAnimEnemy()
{
// RUNS ATTACK ANIMATION OF ENEMY
Animator enemyAttackAnim = EnemyParts[2].transform.parent.GetComponent<Animator>();
enemyAttackAnim.SetTrigger("AttackTrigger");
yield return new WaitForSeconds(
enemyAttackAnim.GetCurrentAnimatorStateInfo(0).length
+enemyAttackAnim.GetCurrentAnimatorStateInfo(0).normalizedTime);
enemyAttackAnim.SetTrigger("AttackTrigger");
}
IEnumerator PreAttackBuffAnimEnemy()
{
// RUN "NON-ATTACK" BUFF ANIMATION FOR ENEMY IF ANTENNA IS BLACK SO ATTACKS ARE BUFFED
// BEFORE THE ENEMY DOES ITS ATTACK ANIMATION
if((Colours)EnemyPartsColours[0] == Colours.Black)
{
yield return StartCoroutine(HitEffectEnemy(EnemyPartsColours[0]));
}
}
IEnumerator PostAttackBuffAnimEnemy()
{
// RUN "NON-ATTACK" ABILITY ANIMATION FOR ENEMY IF ANTENNA IS WHITE OR GREY RESPECTIVELY
// NOW SO THESE ANIMATIONS APPEAR AFTER THE ENEMY IS DONE ATTACKING
if((Colours)EnemyPartsColours[0] == Colours.White)
{
enemyHealth += 2;
yield return StartCoroutine(HitEffectEnemy(EnemyPartsColours[0]));
StartCoroutine(DisplayDamageText(2, EnemyDamageText, (Colours)EnemyPartsColours[0]));
}
if((Colours)EnemyPartsColours[0] == Colours.Grey)
{
yield return StartCoroutine(HitEffectEnemy(EnemyPartsColours[0]));
}
}
void EnemyBuilder() void EnemyBuilder()
{ {