예제 #1
0
파일: GUI.cs 프로젝트: LevAriC/ArmiX
    private IEnumerator WaitUntilChosen()
    {
        playerIsChoosing = true;
        while (playerIsChoosing)
        {
            yield return(null);
        }

        if (moveRoutine)
        {
            if (!GameManager.Instance.IsCharacterHere())
            {
                MoveCharacterEvent?.Invoke();
                GameManager.Instance._characterClicked.movedThisTurn = true;
            }
            else
            {
                GameManager.Instance.InvalidCommand = true;
                GameManager.Instance._characterClicked.movedThisTurn = false;
            }
        }

        if (attackRoutine)
        {
            Character character   = null;
            var       attackerPos = GameManager.Instance._whereClicked;
            if (GameManager.Instance.IsCharacterHere())
            {
                foreach (var alive in GameManager.Instance._characterDictionary)
                {
                    if (alive.Value == GameManager.Instance._whereClicked)
                    {
                        character = alive.Key;
                    }
                }

                var defenderPos = GameManager.Instance._whereClicked;
                int distance    = (int)Math.Floor(Math.Sqrt(Math.Abs(attackerPos.x - defenderPos.x)) + Math.Sqrt(Math.Abs(attackerPos.y - defenderPos.y)));
                if (character)
                {
                    GameManager.Instance._characterEnemyClicked = character;
                }
                var didHit = _combatLogic.AttackEnemy(GameManager.Instance._characterClicked, GameManager.Instance._characterEnemyClicked, distance);
                if (didHit)
                {
                    GameManager.Instance._characterClicked.myAnimator.SetTrigger("isTargetAcquired");
                    GameManager.Instance._characterEnemyClicked.myAnimator.SetTrigger("isHit");
                    GameManager.Instance._characterClicked.attackedThisTurn = true;
                }
                else
                {
                    RunPopup("Target Missed!!");
                }

                Cursor.cursorInstance.MoveCursor(attackerPos.x, attackerPos.y);
            }
            else
            {
                GameManager.Instance.InvalidCommand = true;
                Cursor.cursorInstance.MoveCursor(attackerPos.x, attackerPos.y);
            }

            GameManager.Instance._characterClicked      = null;
            GameManager.Instance._characterEnemyClicked = null;

            stateChanged = true;
        }

        if (overwatchRoutine)
        {
            if (!GameManager.Instance.IsCharacterHere())
            {
                OverwatchEvent?.Invoke();
                GameManager.Instance._characterClicked.overwatchedThisTurn = true;
            }
            else
            {
                GameManager.Instance.InvalidCommand = true;
                GameManager.Instance._characterClicked.overwatchedThisTurn = false;
            }
        }

        AbortChoice();
    }