// Helper function to set parts of the level private void setFragmentIntoLevel(LevelFragment fragment, FragmentPosition position) { int texWidth = fragment.levelTexture.Width; int texHeight = fragment.levelTexture.Height; int gridWidth = fragment.grid.GetLength(0); int gridHeight = fragment.grid.GetLength(1); int texStartWidth = 0; int texStartHeight = 0; int gridStartWidth = 0; int gridStartHeight = 0; switch (position) { case FragmentPosition.LeftHalf: case FragmentPosition.TopHalf: texStartWidth = 0; texStartHeight = 0; gridStartWidth = 0; gridStartHeight = 0; break; case FragmentPosition.TopLeftCorner: texStartWidth = 0; texStartHeight = 0; gridStartWidth = 0; gridStartHeight = 0; break; case FragmentPosition.RightHalf: case FragmentPosition.TopRightCorner: texStartWidth = texWidth + TILE_SIZE; texStartHeight = 0; gridStartWidth = gridWidth - 1; gridStartHeight = 0; break; case FragmentPosition.BottomHalf: case FragmentPosition.BottomLeftCorner: texStartWidth = 0; texStartHeight = texHeight + TILE_SIZE; gridStartWidth = 0; gridStartHeight = gridHeight - 1; break; case FragmentPosition.BottomRightCorner: texStartWidth = texWidth + TILE_SIZE; texStartHeight = texHeight + TILE_SIZE; gridStartWidth = gridWidth - 1; gridStartHeight = gridHeight - 1; break; } //cut off last row/column if necessary switch (position) { case FragmentPosition.LeftHalf: case FragmentPosition.BottomLeftCorner: gridHeight--; break; case FragmentPosition.TopHalf: case FragmentPosition.TopRightCorner: gridWidth--; break; case FragmentPosition.RightHalf: case FragmentPosition.BottomHalf: case FragmentPosition.BottomRightCorner: gridWidth--; gridHeight--; break; } //color grid switch (position) { case FragmentPosition.LeftHalf: fragmentGrid[0, 0] = fragment; fragmentGrid[0, 1] = fragment; break; case FragmentPosition.RightHalf: fragmentGrid[1, 0] = fragment; fragmentGrid[1, 1] = fragment; break; case FragmentPosition.TopHalf: fragmentGrid[0, 0] = fragment; fragmentGrid[1, 0] = fragment; break; case FragmentPosition.BottomHalf: fragmentGrid[0, 1] = fragment; fragmentGrid[1, 1] = fragment; break; case FragmentPosition.TopLeftCorner: fragmentGrid[0, 0] = fragment; break; case FragmentPosition.TopRightCorner: fragmentGrid[1, 0] = fragment; break; case FragmentPosition.BottomLeftCorner: fragmentGrid[0, 1] = fragment; break; case FragmentPosition.BottomRightCorner: fragmentGrid[1, 1] = fragment; break; } //level grid grid.setDataRectangle<LevelContent.LevelTile>(new Rectangle(gridStartWidth, gridStartHeight, gridWidth, gridHeight), fragment.grid); //locations collectableLocations.AddRange(fragment.getCollectableLocations(position)); enemyLocations.AddRange(fragment.getEnemyLocations(position)); prisonerLocations.AddRange(fragment.getPrisonerLocations(position)); powerupLocations.AddRange(fragment.getPowerupLocations(position)); }
// Helper function to set parts of the level private void setFragmentIntoLevel(LevelFragment fragment, FragmentPosition position) { int texWidth = fragment.levelTexture.Width; int texHeight = fragment.levelTexture.Height; int gridWidth = fragment.grid.GetLength(0); int gridHeight = fragment.grid.GetLength(1); int texStartWidth = 0; int texStartHeight = 0; int gridStartWidth = 0; int gridStartHeight = 0; switch (position) { case FragmentPosition.LeftHalf: case FragmentPosition.TopHalf: texStartWidth = 0; texStartHeight = 0; gridStartWidth = 0; gridStartHeight = 0; break; case FragmentPosition.TopLeftCorner: texStartWidth = 0; texStartHeight = 0; gridStartWidth = 0; gridStartHeight = 0; break; case FragmentPosition.RightHalf: case FragmentPosition.TopRightCorner: texStartWidth = texWidth + TILE_SIZE; texStartHeight = 0; gridStartWidth = gridWidth - 1; gridStartHeight = 0; break; case FragmentPosition.BottomHalf: case FragmentPosition.BottomLeftCorner: texStartWidth = 0; texStartHeight = texHeight + TILE_SIZE; gridStartWidth = 0; gridStartHeight = gridHeight - 1; break; case FragmentPosition.BottomRightCorner: texStartWidth = texWidth + TILE_SIZE; texStartHeight = texHeight + TILE_SIZE; gridStartWidth = gridWidth - 1; gridStartHeight = gridHeight - 1; break; } //cut off last row/column if necessary switch (position) { case FragmentPosition.LeftHalf: case FragmentPosition.BottomLeftCorner: gridHeight--; break; case FragmentPosition.TopHalf: case FragmentPosition.TopRightCorner: gridWidth--; break; case FragmentPosition.RightHalf: case FragmentPosition.BottomHalf: case FragmentPosition.BottomRightCorner: gridWidth--; gridHeight--; break; } //color grid switch (position) { case FragmentPosition.LeftHalf: fragmentGrid[0, 0] = fragment; fragmentGrid[0, 1] = fragment; break; case FragmentPosition.RightHalf: fragmentGrid[1, 0] = fragment; fragmentGrid[1, 1] = fragment; break; case FragmentPosition.TopHalf: fragmentGrid[0, 0] = fragment; fragmentGrid[1, 0] = fragment; break; case FragmentPosition.BottomHalf: fragmentGrid[0, 1] = fragment; fragmentGrid[1, 1] = fragment; break; case FragmentPosition.TopLeftCorner: fragmentGrid[0, 0] = fragment; break; case FragmentPosition.TopRightCorner: fragmentGrid[1, 0] = fragment; break; case FragmentPosition.BottomLeftCorner: fragmentGrid[0, 1] = fragment; break; case FragmentPosition.BottomRightCorner: fragmentGrid[1, 1] = fragment; break; } //level grid grid.setDataRectangle <LevelContent.LevelTile>(new Rectangle(gridStartWidth, gridStartHeight, gridWidth, gridHeight), fragment.grid); //locations collectableLocations.AddRange(fragment.getCollectableLocations(position)); enemyLocations.AddRange(fragment.getEnemyLocations(position)); prisonerLocations.AddRange(fragment.getPrisonerLocations(position)); powerupLocations.AddRange(fragment.getPowerupLocations(position)); }