Example #1
0
    // Update is called once per frame
    void Update()
    {
        if (attackQueue == null)
        {
            attackQueue = new Queue <Fighter>();
        }
        if (player == null)
        {
            player = manager.GetPlayerCharacter();
        }
        if (player == null)
        {
            return;
        }

        if (pause)
        {
            player.IsFighting = false;
            if (enemies == null)
            {
                return;
            }
            foreach (Enemy enemy in enemies)
            {
                enemy.IsFighting = false;
            }
        }
        else
        {
            player.IsFighting = true;
            foreach (Enemy enemy in enemies)
            {
                enemy.IsFighting = true;
            }
        }

        if (AllEnemiesDead() && !someoneIsAttacking)
        {
            cam.ChangeToFirstPerson();
            pause = true;
        }
        if (AllEnemiesDead() && !someoneIsAttacking && cam.PositionSet)
        {
            HandleBattleOver();
            pause = true;
        }
        if (player != null && player.IsDead())
        {
            StartCoroutine(DoDeathCam(1.5f));
        }

        if (!someoneIsAttacking && attackQueue.Count > 0 && !BattleOver)
        {
            currentAttacker = attackQueue.Dequeue();
            if (!currentAttacker.IsDead())
            {
                SomeoneGotHit      = false;
                someoneIsAttacking = true;

                foreach (Enemy enemy in enemies)
                {
                    enemy.PauseInitiativeTimer(true);
                }
                player.PauseInitiativeTimer(true);

                if (currentAttacker == player)
                {
                    attackOptionsPanel.Flush();
                    foreach (PlayerMove attack in player.GetAvailableMoves())
                    {
                        Instantiate(attackOptionPrefab, attackOptionsPanel.transform).
                        Init(attack, description, player);
                    }
                    player.Attack();
                }
                else
                {
                    currentAttacker.Attack();
                }
            }
        }
    }