Example #1
0
    public void SaveWorldAndLoadedChunks()
    {
        int size = GManager.MAX_CHUNK_SIZE;

        foreach (KeyValuePair <Vector2Int, Chunk> ch in chunks)
        {
            int       iX   = ch.Key.x / size;
            int       iZ   = ch.Key.y / size;
            ChunkArea area = currAreas.Find(a => a.iX == iX && a.iZ == iZ);
            ChunkInfo chI  = ch.Value.getChunkInfo();
            if (area != null)
            {
                Vector3 pos = new Vector3(ch.Value.selfPosInt.x, 0, ch.Value.selfPosInt.y);
                area.chunks.TryGetValue(pos, out ChunkInfo inf);
                if (inf == null)
                {
                    area.chunks.Add(pos, chI);
                }
                else
                {
                    area.chunks[pos] = chI;
                }
            }
        }
        currAreas.ForEach(a => {
            using (FileStream fileStream =
                       File.Open(chunksPath + "chA" + a.iX + "" + a.iZ + ".dat", FileMode.OpenOrCreate)) {
                binFormatter.Serialize(fileStream, a);
            }
        });
        SaveWorld();
    }
Example #2
0
 public void Update()
 {
     if (GManager.done && !myDone)
     {
         int size = GManager.MAX_CHUNK_SIZE;
         if (!canLoad)
         {
             StartCoroutine(GManager.self.generate(Vector2.zero));
         }
         else
         {
             using (FileStream fileStream = File.Open(persisPath + "w.dat", FileMode.Open)) {
                 worldInfo = (WorldInfo)binFormatter.Deserialize(fileStream);
                 GManager.self.LoadDefault(worldInfo);
             }
             int aX = (int)worldInfo.playerPos.x / (size * size);
             int aZ = (int)worldInfo.playerPos.z / (size * size);
             using (FileStream fileStream = File.Open(chunksPath + "chA" + aX + "" + aZ + ".dat", FileMode.Open)) {
                 ChunkArea chArea = (ChunkArea)binFormatter.Deserialize(fileStream);
                 chArea.chunks.Where(ch => Vector3.Distance(worldInfo.playerPos, ch.Key) < 50f)
                 .ToList().ForEach(ch => StartCoroutine(LoadChunk(ch.Key, ch.Value)));
                 currAreas.Add(chArea);
             }
             GManager.self.LoadPlayerInfo();
         }
         myDone = true;
     }
     if (myDone)
     {
         if (Input.GetKeyUp(KeyCode.S))
         {
             SaveWorldAndLoadedChunks();
         }
     }
 }