/*
* This method returns if the obstacle can be placed at the given cell in the gameworld.
* Params - obstacleGrid: the PlacementGrid of the obstacle you are testing
* cell: the cell to test placement on
*/
bool CanPlaceObject(PlacementGrid obstacleGrid, PGridCell cell) {
// False if grid bounding box goes outside bounds of level
if (obstacleGrid.Height + cell.Row > levelPGrid.Height
|| obstacleGrid.Width + cell.Col > levelPGrid.Width)
return false;
// Go through obstacle's placement grid and make sure that each spot
// it needs is available, starting at cell
for (int r = 0; r < obstacleGrid.Height; r++) {
for (int c = 0; c < obstacleGrid.Width; c++) {
// If a cell is closed on the obstacle then it is occupied
// If a cell is closed on the main grid, it is occpupied or adjacent to an occupied spot
if (obstacleGrid.Closed(r, c)
&& levelPGrid.Closed(cell.Row + r, cell.Col + c)) {
return false;
}
}
}
return true;
}