private List <MovementDirectionUtilities.MovementDirection> FindSuitableDirections( Vector2Int position) { var movementDirections = EnumUtilities.GetValues <MovementDirectionUtilities.MovementDirection>(); movementDirections.Remove(MovementDirectionUtilities.MovementDirection.None); var suitableDirections = new List <MovementDirectionUtilities.MovementDirection>(); foreach (var diff in locations.Select(l => l - position)) { foreach (var movementDirection in from movementDirection in movementDirections where !suitableDirections.Contains(movementDirection) let possible = CheckLocation(diff, movementDirection) where possible select movementDirection) { suitableDirections.Add(movementDirection); if (suitableDirections.Count == 4) { return(suitableDirections); } } } return(suitableDirections); bool CheckLocation(Vector2Int difference, MovementDirectionUtilities.MovementDirection movementDirection) { return(difference == MovementDirectionUtilities.VectorFromDirection(movementDirection)); } }
public (GameTile.CantMoveReason, Unit) CanWalkOnTileInDirection(Vector2Int position, MovementDirectionUtilities.MovementDirection direction) { var endPosition = position + MovementDirectionUtilities.VectorFromDirection(direction); return(CanWalk(endPosition)); }
protected Coroutine Move(MovementDirectionUtilities.MovementDirection movementDirection, bool force = false) { if (movementDirection != MovementDirectionUtilities.MovementDirection.None) { return(Move(currentPosition + MovementDirectionUtilities.VectorFromDirection(movementDirection), force)); } return(null); }
public GameTile GetTileInDirection(Vector2Int position, MovementDirectionUtilities.MovementDirection direction) { var vectorFromDirection = MovementDirectionUtilities.VectorFromDirection(direction); return(GameSessionManager.Instance.currentSceneObjects.currentWorld.GetTile(position + vectorFromDirection)); }