Esempio n. 1
0
    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);
    }
Esempio n. 2
0
    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();
        }
    }
Esempio n. 3
0
    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
        }
    }
Esempio n. 4
0
    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
        }
    }
Esempio n. 5
0
    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;
        }
    }