Ejemplo n.º 1
0
 private void OnMoveEvent(MoveCharacterEvent e)
 {
     if (e.Character.IsGood)
     {
     }
     if (!e.Skip)
     {
         if (path == null)
         {
             return;
         }
         IEnumerable <Tile> movement = path.Tiles;
         if (e.Character.IsGood)
         {
             ResetPath();
         }
         e.Character.Moved = true;
         EventManager.Instance.Raise <AnimationEvent>(new AnimationWalkEvent(AnimationStatus.Start, e.Character.gameObject));
         StartCoroutine(MoveCharacter(movement, e.Character));
     }
     else
     {
         if (e.Character.IsGood)
         {
             e.Character.Moved = true;
             EventManager.Instance.Raise(new CharacterStateTransitionEvent(new ActionState()));
         }
     }
 }
Ejemplo n.º 2
0
Archivo: GUI.cs Proyecto: 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();
    }