/// <summary> /// Saves the test world to a binary file. /// </summary> public void saveTestWorld() { using (var sw = new BinaryWriter(File.Open("Content/Levels/TestLevel.level", FileMode.Create))) { int worldWidth = 20; int worldHeight = 20; int tilesPerBlockWidth = 20; int tilesPerBlockHeight = 20; int sizeOfTile = 10; sw.Write(worldWidth); //Width of world in Blocks sw.Write(worldHeight); //Height of world in Blocks sw.Write(tilesPerBlockWidth); //Block Width sw.Write(tilesPerBlockHeight); //Block Height sw.Write(sizeOfTile); //The size of a tile. int requiredBlocks = worldWidth * worldHeight; var listOfBlocks = new List <List <CachedTileInformation> >(); for (int block = 0; block < requiredBlocks; block++) { listOfBlocks.Add(new List <CachedTileInformation>()); if (block > worldHeight * 2 - 1) { for (int tileY = 0; tileY < tilesPerBlockHeight; tileY++) { for (int tileX = 0; tileX < tilesPerBlockWidth; tileX++) { CachedTileInformation cacheTileInfo = new CachedTileInformation(); cacheTileInfo.TileID = 1; cacheTileInfo.TilePosX = tileX; cacheTileInfo.TilePosY = tileY; listOfBlocks[block].Add(cacheTileInfo); } } } } int blockID = 0; //Write the blocks to file listOfBlocks.ForEach(list => { sw.Write(blockID++); sw.Write(list.Count); //Write number of tiles in the block //Write tiles to the block list.ForEach(entry => { sw.Write(entry.TileID); sw.Write(entry.TilePosX); sw.Write(entry.TilePosY); }); }); } }
/// <summary> /// Loads the world file (the IDs of the tiles) into a collection and into their corresponding 'Blocks' /// </summary> private void LoadWorldIDsIntoCache() { using (var sr = new BinaryReader(File.Open(m_levelFile, FileMode.Open))) { //Read in the width of the world in Blocks WorldWidth = sr.ReadInt32(); //Rad in the height of the world in Blocks WorldHeight = sr.ReadInt32(); int totalNumberOfBlocks = WorldWidth * WorldHeight; //Read the width of a single Block TilesPerBlockWidth = sr.ReadInt32(); //Read the height of a single Block TilesPerBlockHeight = sr.ReadInt32(); //Size per tile SizePerTile = sr.ReadInt32(); TilesPerBlock = TilesPerBlockWidth * TilesPerBlockHeight; //Time to read in every single block for (int block = 0; block < totalNumberOfBlocks; block++) { //Create a new spot in the cache for the block m_levelBlockCache.Add(new List <CachedTileInformation>()); //Read the BlockID (Not currently used) int blockID = sr.ReadInt32(); //Read in the number of tiles in the block int numOfTileInBlock = sr.ReadInt32(); //Read in the for (int tile = 0; tile < numOfTileInBlock; tile++) { CachedTileInformation cacheTileInfo = new CachedTileInformation(); //Read all the info about the Tile. cacheTileInfo.TileID = sr.ReadInt32(); cacheTileInfo.TilePosX = sr.ReadInt32(); cacheTileInfo.TilePosY = sr.ReadInt32(); m_levelBlockCache[block].Add(cacheTileInfo); } } } }
/// <summary> /// /// </summary> /// <param name="CENTER_LEFT"></param> /// <param name="blockPositionLeft"></param> /// <param name="rectangleSize"></param> /// <param name="i"></param> /// <param name="j"></param> /// <returns></returns> private void LoadBlockIntoRenderKernel(int renderKernelPosition, int blockPosition, ref Rectangle rectangleSize, int i, int j) { int blockPositionWidthModifier = (blockPosition % WorldWidth) * TilesPerBlockWidth; int blockPositionHeightModifier = (blockPosition / WorldHeight) * TilesPerBlockHeight; CachedTileInformation tileInfo = null; if (blockPosition > 0 && m_renderKernelRequiresUpdate[renderKernelPosition]) { int searchLocation = i * WorldWidth + j; if (m_levelBlockCache[blockPosition].Count != 0 && m_levelBlockCache[blockPosition].Count > searchLocation) { tileInfo = m_levelBlockCache[blockPosition][searchLocation]; m_renderKernel.BlockCache[renderKernelPosition].Add( GetTile( m_tileFactory.TileStructureCache [ tileInfo.TileID ] as CollidableTileStructure, new Vector2(((blockPositionWidthModifier + tileInfo.TilePosX) * SizePerTile), (blockPositionHeightModifier + tileInfo.TilePosY) * SizePerTile), rectangleSize)); } } }
/// <summary> /// Loads the world file (the IDs of the tiles) into a collection and into their corresponding 'Blocks' /// </summary> private void LoadWorldIDsIntoCache() { using (var sr = new BinaryReader(File.Open(m_levelFile, FileMode.Open))) { //Read in the width of the world in Blocks WorldWidth = sr.ReadInt32(); //Rad in the height of the world in Blocks WorldHeight = sr.ReadInt32(); int totalNumberOfBlocks = WorldWidth * WorldHeight; //Read the width of a single Block TilesPerBlockWidth = sr.ReadInt32(); //Read the height of a single Block TilesPerBlockHeight = sr.ReadInt32(); //Size per tile SizePerTile = sr.ReadInt32(); TilesPerBlock = TilesPerBlockWidth * TilesPerBlockHeight; //Time to read in every single block for (int block = 0; block < totalNumberOfBlocks; block++) { //Create a new spot in the cache for the block m_levelBlockCache.Add(new List<CachedTileInformation>()); //Read the BlockID (Not currently used) int blockID = sr.ReadInt32(); //Read in the number of tiles in the block int numOfTileInBlock = sr.ReadInt32(); //Read in the for (int tile = 0; tile < numOfTileInBlock; tile++) { CachedTileInformation cacheTileInfo = new CachedTileInformation(); //Read all the info about the Tile. cacheTileInfo.TileID = sr.ReadInt32(); cacheTileInfo.TilePosX = sr.ReadInt32(); cacheTileInfo.TilePosY = sr.ReadInt32(); m_levelBlockCache[block].Add(cacheTileInfo); } } } }
/// <summary> /// Saves the test world to a binary file. /// </summary> public void saveTestWorld() { using (var sw = new BinaryWriter(File.Open("Content/Levels/TestLevel.level", FileMode.Create))) { int worldWidth = 20; int worldHeight = 20; int tilesPerBlockWidth = 20; int tilesPerBlockHeight = 20; int sizeOfTile = 10; sw.Write(worldWidth); //Width of world in Blocks sw.Write(worldHeight); //Height of world in Blocks sw.Write(tilesPerBlockWidth); //Block Width sw.Write(tilesPerBlockHeight); //Block Height sw.Write(sizeOfTile); //The size of a tile. int requiredBlocks = worldWidth * worldHeight; var listOfBlocks = new List<List<CachedTileInformation>>(); for (int block = 0; block < requiredBlocks; block++) { listOfBlocks.Add(new List<CachedTileInformation>()); if (block > worldHeight * 2 - 1) { for (int tileY = 0; tileY < tilesPerBlockHeight; tileY++) { for (int tileX = 0; tileX < tilesPerBlockWidth; tileX++) { CachedTileInformation cacheTileInfo = new CachedTileInformation(); cacheTileInfo.TileID = 1; cacheTileInfo.TilePosX = tileX; cacheTileInfo.TilePosY = tileY; listOfBlocks[block].Add(cacheTileInfo); } } } } int blockID = 0; //Write the blocks to file listOfBlocks.ForEach(list => { sw.Write(blockID++); sw.Write(list.Count); //Write number of tiles in the block //Write tiles to the block list.ForEach(entry => { sw.Write(entry.TileID); sw.Write(entry.TilePosX); sw.Write(entry.TilePosY); }); }); } }