public static void FindHelper(TileMap tileMap, TileData sourceTile, int movement, FindTilesWithinRangeDTO dto) { if (!dto.TileToMaxMovement.ContainsKey(sourceTile)) { dto.TileToMaxMovement[sourceTile] = movement; } else { int maxMove = dto.TileToMaxMovement[sourceTile]; if (movement > maxMove) { dto.TileToMaxMovement[sourceTile] = movement; } else { return; } } //if (visited.Contains(sourceTile)) { // return; //} //visited.Add(sourceTile); movement = movement - sourceTile.MovementCost; if (movement <= 0) { return; } if (IsTraversable(tileMap.BottomNeighbor(sourceTile), dto)) { FindHelper(tileMap, tileMap.BottomNeighbor(sourceTile), movement, dto); } if (IsTraversable(tileMap.TopNeighbor(sourceTile), dto)) { FindHelper(tileMap, tileMap.TopNeighbor(sourceTile), movement, dto); } if (IsTraversable(tileMap.LeftNeighbor(sourceTile), dto)) { FindHelper(tileMap, tileMap.LeftNeighbor(sourceTile), movement, dto); } if (IsTraversable(tileMap.RightNeighbor(sourceTile), dto)) { FindHelper(tileMap, tileMap.RightNeighbor(sourceTile), movement, dto); } }
public static bool IsTraversable(TileData tileData, FindTilesWithinRangeDTO dto) { if (tileData == null) { return false; } if (tileData.OccupiedTeam == dto.MoveThroughMask) { return false; } if (dto.MoveThroughMask == TeamId.MOVE_THROUGH_NONE && tileData.OccupiedTeam != -1) { return false; } return true; }
public static List<TileData> Find(TileMap tileMap, TileData sourceTile, int movement, int jumpHeight, int moveThroughMask) { FindTilesWithinRangeDTO dto = new FindTilesWithinRangeDTO(); dto.JumpHeight = jumpHeight; dto.MoveThroughMask = moveThroughMask; movement = movement + 1; List<TileData> visited = new List<TileData>(); FindHelper(tileMap, sourceTile, movement, dto); foreach(TileData t in dto.TileToMaxMovement.Keys) { visited.Add(t); } return visited; }
static public bool IsTraversable(TileData tileData, FindTilesWithinRangeDTO dto) { if (tileData == null) { return(false); } if (tileData.OccupiedTeam == dto.MoveThroughMask) { return(false); } if (dto.MoveThroughMask == TeamId.MOVE_THROUGH_NONE && tileData.OccupiedTeam != -1) { return(false); } return(true); }
static public List <TileData> Find(TileMap tileMap, TileData sourceTile, int movement, int jumpHeight, int moveThroughMask) { FindTilesWithinRangeDTO dto = new FindTilesWithinRangeDTO(); dto.JumpHeight = jumpHeight; dto.MoveThroughMask = moveThroughMask; movement = movement + 1; List <TileData> visited = new List <TileData>(); FindHelper(tileMap, sourceTile, movement, dto); foreach (TileData t in dto.TileToMaxMovement.Keys) { visited.Add(t); } return(visited); }
static public void FindHelper(TileMap tileMap, TileData sourceTile, int movement, FindTilesWithinRangeDTO dto) { if (!dto.TileToMaxMovement.ContainsKey(sourceTile)) { dto.TileToMaxMovement[sourceTile] = movement; } else { int maxMove = dto.TileToMaxMovement[sourceTile]; if (movement > maxMove) { dto.TileToMaxMovement[sourceTile] = movement; } else { return; } } //if (visited.Contains(sourceTile)) { // return; //} //visited.Add(sourceTile); movement = movement - sourceTile.MovementCost; if (movement <= 0) { return; } if (IsTraversable(tileMap.BottomNeighbor(sourceTile), dto)) { FindHelper(tileMap, tileMap.BottomNeighbor(sourceTile), movement, dto); } if (IsTraversable(tileMap.TopNeighbor(sourceTile), dto)) { FindHelper(tileMap, tileMap.TopNeighbor(sourceTile), movement, dto); } if (IsTraversable(tileMap.LeftNeighbor(sourceTile), dto)) { FindHelper(tileMap, tileMap.LeftNeighbor(sourceTile), movement, dto); } if (IsTraversable(tileMap.RightNeighbor(sourceTile), dto)) { FindHelper(tileMap, tileMap.RightNeighbor(sourceTile), movement, dto); } }