IEnumerator AttackSequence()
    {
        state = PlayerState.Attacking;


        while (victims.Count > 0)
        {
            // dash to victim
            yield return(StartCoroutine(DashTime(victims[0].player_attack_position)));

            // dash complete


            if (victims[0].isHit)             // you win

            // attack victim
            {
                PlayAttack();

                BasicEnemy_Controller basic = (BasicEnemy_Controller)victims[0];
                basic.PlayDie();

                isAttackSequenceOnHold = true;                 // wait for animation to call "NextEventInAttackSequence_Please"
                while (isAttackSequenceOnHold)
                {
                    yield return(null);
                }

                victims.RemoveAt(0);
            }
            else               // you lose

            {
                Game_Controller.LoseScenario(victims[0]);
                break;
            }
        }
        // no more victims or you messed up

        if (!Game_Controller.isGameOver)
        {
            transform.localScale = new Vector3(-1, 1, 1);

            // dash back to running
            yield return(StartCoroutine(DashTime(runningPosition)));

            animator.SetTrigger("StopDash");

            yield return(null);            // next frame

            StartRunning();
            state = PlayerState.Running;
        }
    }
    public static void PlayAttack(BasicEnemy_Controller.AttackType stance)
    {
        switch(stance){

        case BasicEnemy_Controller.AttackType.high:
            instance.animator.SetTrigger("AttackHigh");
            break;

        case BasicEnemy_Controller.AttackType.mid:
            instance.animator.SetTrigger("AttackMid");
            break;

        case BasicEnemy_Controller.AttackType.low:
            instance.animator.SetTrigger("AttackLow");
            break;

        }
    }
예제 #3
0
    /*
     * public bool DidUserKillEnemy(){
     *
     *      float angle = Vector2.Angle(userInputDir, killDir);
     *
     *      if(angle <= killAngleDeathzone){
     *              animator.Play(State_die, 0, 0.0f);
     *              GetComponent<SpriteRenderer>().sortingOrder = -1;
     *
     *              Sounds_dying.PlaySound();
     *              Sounds_gore.PlaySound();
     *
     *              Destroy(gameObject, 1.0f);
     *              return true;
     *      }else{
     *              Game_Controller.LoseScenario(this);
     *              return false;
     *      }
     * }
     */

    /// <summary>
    /// called by Game_Controller
    /// </summary>
    /// <param name="killer">Killer.</param>

    public static void LoseScenario(Enemy_Controller killer)
    {
        BasicEnemy_Controller basicGuy = null;

        foreach (Enemy_Controller wolf in controllers)
        {
            if (wolf.CompareTag("BasicEnemy"))
            {
                basicGuy = (BasicEnemy_Controller)wolf;
                basicGuy.LoseScenario_Called(killer);
            }
            else
            {
                //MiniBoss_Controller miniBoss = (MiniBoss_Controller) wolf;

                Player_Controller.PlayDeath();
            }
        }
    }