Esempio n. 1
0
    public void LoadFromDisk(Vector2DInt inChunkPosition)
    {
        // Open chunk save file
        string chunkFilePath = Constants.Terrain.CHUNK_SAVE_FOLDER + "\\" + inChunkPosition.ToString() + ".chunk";

        using (FileStream stream = FileStreamExtensions.LoadAndWaitUntilLoaded(chunkFilePath, FileMode.Open))
            using (BinaryReader reader = new BinaryReader(stream))
            {
                // Create tile array
                int chunkSize = Constants.Terrain.CHUNK_SIZE;
                SetTiles(new Tile[chunkSize, chunkSize]);

                // Load all tiles from disk
                for (int y = 0; y < chunkSize; y++)
                {
                    for (int x = 0; x < chunkSize; x++)
                    {
                        Vector2DInt tileLocalPosition = new Vector2DInt(x, y);
                        Terrain     tileTerrain       = new Terrain((TerrainType)reader.ReadUInt16()); // Read: Terrain type

                        _tiles[x, y] = new Tile(tileLocalPosition, inChunkPosition, tileTerrain);
                    }
                }

                // Load and place all furnitures
                int numFurnitures = reader.ReadInt32();                                  // Read: Furniture count
                for (int i = 0; i < numFurnitures; i++)
                {
                    Furniture loadedFurniture = new Furniture(reader);                   // Read: Furniture

                    // TODO: Check if there's a furniture within the target area. If so, take that one and place it on itself.
                    WorldChunkManager.instance.PlaceFurniture(loadedFurniture.position, loadedFurniture);
                }

                // TODO: Load the queue of all the furnitures that should be replaced. The queue should just hold furniture type and position. Get the furniture at the saved position and save it on top of itself

                MultiThreader.InvokeOnMain(() => _dirtyFlags.Add(ChunkDirtyFlags.Terrain, ref _dirtyFlags));
            }
    }
Esempio n. 2
0
    public void WriteToDisk()
    {
        using (FileStream stream = File.OpenWrite(Constants.Terrain.CHUNK_SAVE_FOLDER + "\\" + position.ToString() + ".chunk"))
            using (BinaryWriter writer = new BinaryWriter(stream))
            {
                HashSet <Furniture> furnituresToSave = new HashSet <Furniture>();

                foreach (Tile tile in _tiles)
                {
                    writer.Write((UInt16)tile.terrain.type);                // Write: Terrain type

                    if (tile.furniture != null)
                    {
                        furnituresToSave.Add(tile.furniture);
                    }
                }

                writer.Write(furnituresToSave.Count);                       // Write: Furniture count
                foreach (Furniture furnitureToSave in furnituresToSave)
                {
                    furnitureToSave.BinarySave(writer);                     // Write: Furniture
                }
            }
    }