/// <summary> /// 加载实体 /// </summary> /// <param name="entitys"></param> public void LoadEntity(ChunkPos chunkPos, ref List <DataTag> entityDataList) { var entityDataName = chunkPos.IsGlobal() ? "global" : chunkPos.x + "." + chunkPos.z; var loadPath = _dir + "e." + entityDataName + ".dat"; if (!chunkPos.IsAvailable()) { return; } // 如果未创建实体信息则生成 if (!File.Exists(loadPath)) { var worldSize = GameManager.WorldManager.worldInfo.worldSize; if (!chunkPos.IsGlobal()) { if ( !(chunkPos.x < 0 || chunkPos.x > worldSize.x || chunkPos.z < 0 || chunkPos.z > worldSize.z)) { GameManager.WorldManager.worldGenerator.GenChunkEntity(chunkPos, ref entityDataList); } } else { GameManager.WorldManager.worldGenerator.GenGlobalEntity(ref entityDataList); } return; } var entityStream = File.OpenRead(loadPath); var decompressFileStream = new GZipStream(entityStream, CompressionMode.Decompress); var reader = new BinaryReader(decompressFileStream); // 加载实体 var entityCount = reader.ReadInt32(); for (var i = 0; i < entityCount; ++i) { var entityData = DataTag.Empty(); entityData.Load(reader); entityDataList.Add(entityData); } reader.Close(); decompressFileStream.Close(); entityStream.Close(); }
/// <summary> /// 保存实体 /// </summary> /// <param name="entitys"></param> public void SaveEntity(ChunkPos chunkPos, List <DataTag> entityDataList) { if (!chunkPos.IsAvailable()) { return; } if (!chunkPos.IsGlobal()) { SaveEntity(chunkPos.x + "." + chunkPos.z, entityDataList); } else { SaveEntity("global", entityDataList); } }