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())); } } }
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(); }