Пример #1
0
        /// <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);
                    });
                });
            }
        }
Пример #2
0
        /// <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);
                    }
                }
            }
        }
Пример #3
0
        /// <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);
                    });
                });
            }
        }