public bool CheckIfObjectCanBeMoved(IPlacedObject selectedObject, Vector2 position) { ILevelTile levelTile = GetLevelTile(position); if (levelTile.IsTraversable()) { return(true); } return(false); }
public ISet <ILevelTile> GetConnectedNavPoints(ILevelTile tile) { ISet <ILevelTile> ret = new HashSet <ILevelTile>(); LevelController lvlController = LevelController.instance; if (lvlController == null) { Debug.LogError("No active LevelController. Cannot provide navigation graph!"); return(ret); } // Orthogonal connected points ILevelTile upper = lvlController.GetTileAtWorldPos(new Vector2(tile.Pos.x, tile.Pos.y + TILE_SIZE)); bool upperValid = upper != null && upper.IsTraversable(); if (upperValid) { ret.Add(upper); } ILevelTile right = lvlController.GetTileAtWorldPos(new Vector2(tile.Pos.x + TILE_SIZE, tile.Pos.y)); bool rightValid = right != null && right.IsTraversable(); if (rightValid) { ret.Add(right); } ILevelTile lower = lvlController.GetTileAtWorldPos(new Vector2(tile.Pos.x, tile.Pos.y - TILE_SIZE)); bool lowerValid = lower != null && lower.IsTraversable(); if (lowerValid) { ret.Add(lower); } ILevelTile left = lvlController.GetTileAtWorldPos(new Vector2(tile.Pos.x - TILE_SIZE, tile.Pos.y)); bool leftValid = left != null && left.IsTraversable(); if (leftValid) { ret.Add(left); } // Diagonal connected points ret.UnionWith(GetDiagonalConnectedPoints(tile, lvlController, upperValid, rightValid, lowerValid, leftValid)); return(ret); }
private ISet <ILevelTile> GetDiagonalConnectedPoints(ILevelTile tile, LevelController lvlController, bool upperValid, bool rightValid, bool lowerValid, bool leftValid) { ISet <ILevelTile> ret = new HashSet <ILevelTile>(); if (upperValid && rightValid) { ILevelTile upperRight = lvlController.GetTileAtWorldPos(new Vector2(tile.Pos.x + TILE_SIZE, tile.Pos.y + TILE_SIZE)); if (upperRight != null && upperRight.IsTraversable()) { ret.Add(upperRight); } } if (rightValid && lowerValid) { ILevelTile lowerRight = lvlController.GetTileAtWorldPos(new Vector2(tile.Pos.x + TILE_SIZE, tile.Pos.y - TILE_SIZE)); if (lowerRight != null && lowerRight.IsTraversable()) { ret.Add(lowerRight); } } if (upperValid && leftValid) { ILevelTile upperLeft = lvlController.GetTileAtWorldPos(new Vector2(tile.Pos.x - TILE_SIZE, tile.Pos.y + TILE_SIZE)); if (upperLeft != null && upperLeft.IsTraversable()) { ret.Add(upperLeft); } } if (lowerValid && leftValid) { ILevelTile lowerLeft = lvlController.GetTileAtWorldPos(new Vector2(tile.Pos.x - TILE_SIZE, tile.Pos.y - TILE_SIZE)); if (lowerLeft != null && lowerLeft.IsTraversable()) { ret.Add(lowerLeft); } } return(ret); }