IEnumerator DeleteEnemyObject() { EnDisableFlip(); yield return(new WaitForSeconds(.2f)); EnAnimator.PlayDeathAnim(); if (bossPhase != null) { bossPhase.BossDead(); } yield return(new WaitForSeconds(1.0f)); if (DeathParticlesHandler != null) { Vector3 deathParticleLocation = transform.position; deathParticleLocation.y -= .4f; DeathParticlesHandler.ShowHitEffect(deathParticleLocation); } //gameObject.SetActive(false); //TODO: set to false so that EndPortal can reference if isAlive stageClear.UpdateEnemyCount(100f, 50); Destroy(this.gameObject); }
protected override IEnumerator Attacking() //attack has two hits { if (enCanAttack && !isAttacking && !enStunned) { isAttacking = true; enCanAttack = false; EnDisableMove(); //ShowAttackIndicator(); //First Attack Charge Up EnEnableFlip(); EnAnimator.PlayAttack(); //Play ChargeUp animation yield return(new WaitForSeconds(1.1f)); EnAnimator.PlayAnim(1); EnDisableFlip(); yield return(new WaitForSeconds(.14f)); //.2 LungeOnAttack(); yield return(new WaitForSeconds(.08f)); //.02 Attack(); //Second Attack Charge Up yield return(new WaitForSeconds(.3f)); //delay before starting next attack EnAnimator.PlayAttack(); //AttackChargeUp animation EnEnableFlip(); //Second Attack Swing yield return(new WaitForSeconds(.3f)); EnAnimator.PlayAnim(1); //AttackEnd anim EnDisableFlip(); //Lunge with collider yield return(new WaitForSeconds(.14f)); //.2 LungeOnAttack(); yield return(new WaitForSeconds(.08f)); //.02 Attack(); yield return(new WaitForSeconds(.4f)); EnAnimator.PlayIdle2(); //StunnableIdle EnEnableFlip(); //End: Stunnable, delay before starting yield return(new WaitForSeconds(.3f)); isAttacking = false; EnAnimator.PlayIdle(isAttacking, enStunned, isHurt); yield return(new WaitForSeconds(enAttackSpeed)); enCanAttack = true; EnEnableMove(); } }
protected override IEnumerator StunEnemy(float stunDuration) { //return base.StunEnemy(stunDuration); if (!enStunned && isAlive) { enStunned = true; //enStunned is referenced in Controller, even if HeavyBandit uses Break instead isBroken = true; EnDisableMove(); enCanAttack = false; isAttacking = false; if (initialStunParticle != null) { Instantiate(initialStunParticle, transform.position, Quaternion.identity, transform); } yield return(new WaitForSeconds(.1f)); //short delay before starting slow motion TimeManager.Instance.CustomSlowMotion(.02f, .5f); Vector3 tempPos = transform.position; tempPos.y += TPOffset; AttackIndicator.ShowBreak(tempPos); EnAnimator.PlayStunned(); yield return(new WaitForSeconds(.5f)); //1.1f EnAnimator.PlayAnim(2); yield return(new WaitForSeconds(breakDuration)); //1.3f //recoverDuration, is based on current phase //EnAnimator.PlayIdle(isAttacking, enStunned, isHurt); //TODO: play StunRecover animation NOT IDLE EnableShield(); isBroken = false; yield return(new WaitForSeconds(.2f)); ShowAttackIndicator(); yield return(new WaitForSeconds(.5f)); enCanAttack = true; isAttacking = false; //in case of attack interrupted from stun //TODO: might not need, is called earlier ^ enStunned = false; EnEnableMove(); EnEnableFlip(); //precaution in case enemy is stunned during attack and can't flip } }
protected override IEnumerator StunEnemy(float stunDuration) { if (!enStunned) { enStunned = true; //enStunned is referenced in Controller, even if HeavyBandit uses Break instead isBroken = true; EnDisableMove(); enCanAttack = false; //yield return new WaitForSeconds(.1f); EnAnimator.PlayStunned(); /*if (timeManager != null) * { * timeManager.CustomSlowMotion(.02f, .5f); * }*/ if (initialStunParticle != null) { Vector3 tempLocation = transform.position; tempLocation.y += .5f; Instantiate(initialStunParticle, tempLocation, Quaternion.identity, transform); } if (isAlive) { Vector3 tempPos = transform.position; tempPos.y += TPOffset; AttackIndicator.ShowBreak(tempPos); } yield return(new WaitForSeconds(stunDuration)); EnableShield(); isBroken = false; EnAnimator.PlayAnim(0); //Stun Recover yield return(new WaitForSeconds(1f)); //time for recover animation, or short delay before moving again enStunned = false; enCanAttack = true; isAttacking = false; //in case of attack interrupted from stun EnEnableMove(); EnEnableFlip(); //precaution in case enemy is stunned during attack and can't flip } }
protected override IEnumerator Attacking() { if (enCanAttack && !isAttacking && !enStunned) { int phase; if (currentHealth >= (maxHealth / 2)) //phase 1: 50%+ hp { phase = 1; breakDuration = .5f; } else //phase 2 { phase = 2; breakDuration = .75f; } enCanAttack = false; isAttacking = true; switch (atkSequence) { case 1: atkSequence = 2; //next attack EnAnimator.AnimTrigger("Attack1SlowStart"); //0.7f total anim time EnDisableMove(); yield return(new WaitForSeconds(0.3f)); //0.4f to hit player running past EnDisableFlip(); yield return(new WaitForSeconds(0.4f)); Attack(1.5f); yield return(new WaitForSeconds(enAttackSpeed)); break; case 2: if (phase == 1) { atkSequence = 3; } else { atkSequence = 4; } EnAnimator.AnimTrigger("Attack2SlowStart"); //0.62f total anim time EnDisableMove(); yield return(new WaitForSeconds(0.20f)); //.54f EnDisableFlip(); yield return(new WaitForSeconds(0.34f)); LungeOnAttack(15f); //30f yield return(new WaitForSeconds(0.08f)); //Don't change: is the time it takes to lunge and hit attack Attack2(1f); yield return(new WaitForSeconds(enAttackSpeed)); break; case 3: //Attack1 + Attack2 atkSequence = 1; //sequence loops back to 1 ShowAttackIndicator(); EnDisableMove(); EnAnimator.AnimTrigger("Attack1SlowStartCombo"); //0.6f anim yield return(new WaitForSeconds(0.3f)); EnDisableFlip(); yield return(new WaitForSeconds(0.3f)); Attack(1.5f); yield return(new WaitForSeconds(.2f)); EnEnableFlip(); EnAnimator.AnimTrigger("Attack2SlowStart"); //0.52f yield return(new WaitForSeconds(0.24f)); //.44 EnDisableFlip(); yield return(new WaitForSeconds(0.2f)); LungeOnAttack(15f); yield return(new WaitForSeconds(0.08f)); //.08 for lunge //EnDisableMove(); Attack2(1f); yield return(new WaitForSeconds(0.4f)); EnAnimator.AnimBool("IdleLongStunnable", true); EnAnimator.PlayAnim(1); yield return(new WaitForSeconds(.6f)); //TODO: needs testing on duration EnAnimator.AnimBool("IdleLongStunnable", false); break; case 4: atkSequence = 1; breakDuration = .85f; //TODO: test between 1.5f and 1.0f (set at hp phase check) ShowAttackIndicator2(); EnDisableMove(); EnAnimator.AnimTrigger("Attack1SlowStartCombo"); //.6 total yield return(new WaitForSeconds(.34f)); //.54 EnDisableFlip(); yield return(new WaitForSeconds(.2f)); LungeOnAttack(10f); yield return(new WaitForSeconds(0.08f)); Attack(1f); yield return(new WaitForSeconds(.4f)); EnEnableFlip(); EnAnimator.AnimTrigger("Attack2SlowStartCombo"); yield return(new WaitForSeconds(.34f)); //.4 ? EnDisableFlip(); LungeOnAttack(15f); yield return(new WaitForSeconds(0.08f)); Attack2(1f); yield return(new WaitForSeconds(.3f)); EnEnableFlip(); EnAnimator.AnimTrigger("Attack1SlowStartCombo2"); yield return(new WaitForSeconds(.24f)); //.3 total EnDisableFlip(); LungeOnAttack(10f); yield return(new WaitForSeconds(0.08f)); Attack(1.5f); yield return(new WaitForSeconds(.2f)); EnEnableFlip(); EnAnimator.AnimTrigger("Attack2SlowStartCombo2"); yield return(new WaitForSeconds(.14f)); //.2 total EnDisableFlip(); LungeOnAttack(15f); yield return(new WaitForSeconds(0.08f)); Attack2(1.5f); yield return(new WaitForSeconds(.2f)); EnEnableFlip(); EnAnimator.AnimTrigger("Attack1SlowStartCombo3"); yield return(new WaitForSeconds(.14f)); //.2 total EnDisableFlip(); LungeOnAttack(10f); yield return(new WaitForSeconds(0.08f)); Attack(2f); yield return(new WaitForSeconds(.2f)); EnEnableFlip(); EnAnimator.AnimTrigger("Attack2SlowStartCombo3"); yield return(new WaitForSeconds(.14f)); //.2 total EnDisableFlip(); LungeOnAttack(15f); yield return(new WaitForSeconds(0.08f)); Attack2(2f); yield return(new WaitForSeconds(.4f)); //short delay so the Attack2 anim doesn't get cut off EnAnimator.AnimBool("IdleLongStunnable", true); EnAnimator.PlayAnim(1); //enAnimator.SetBool("IdleLongStunnable", true); yield return(new WaitForSeconds(.5f)); EnAnimator.AnimBool("IdleLongStunnable", false); //moving from Stunnable idle anim IdleLong anim EnAnimator.AnimBool("IdleLong", true); EnAnimator.PlayAnim(0); yield return(new WaitForSeconds(.5f)); EnAnimator.AnimBool("IdleLong", false); yield return(new WaitForSeconds(enAttackSpeed)); //TODO: increase length on this, make sure stun is still encouraged break; default: yield return(new WaitForSeconds(0.01f)); break; } EnEnableFlip(); EnEnableMove(); isAttacking = false; enCanAttack = true; } }