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