private void MoveMissile(Missile missile, Actor shooter, Point point, bool keepMoving) { var direction = DirectionExtensions.GetDirection(missile.Location, point); missile.Orientation = direction switch { Direction.Left => Orientation.Horizontal, Direction.Right => Orientation.Horizontal, _ => Orientation.Vertical }; missile.Location = point; var actor = actors.SingleOrDefault(a => a.Location == point && a != shooter); if (actor != null) { missile.Moving = false; var action = actor.GetAction(mapConsole.map, Direction.None); var result = action.Perform(player); logConsole.Log(result.Message); } missile.Moving = missile.Moving && keepMoving; if (!missile.Moving) { ActivateActors(); } }
private void MoveTo(Actor actor, Point target) { Point nextStep; bool isNextToTarget = actor.Location.IsAdjacent(target); if (!isNextToTarget) { nextStep = mapConsole.GetNextStep(actor, actors, target); } else { nextStep = target; } var direction = DirectionExtensions.GetDirection(actor.Location, nextStep); MoveOrAct(actor, direction); }