public void Load()
 {
     using (var ocReader = new OCDataReader(GetOCDataFilePath()))
     {
         tree = new BoundsOctree <Cell>();
         LoadBlock(ocReader, 0);
     }
     RuntimeGetRenderableObjs();
 }
        public override void Load(byte[] ocData, int blockIndex = 0)
        {
            using (var ocReader = new OCDataReader(ocData))
            {
                tree = new BoundsOctree <Cell>();
                LoadBlock(ocReader, blockIndex);
            }

            RuntimeGetRenderableObjs();
        }
        public void TestLoad()
        {
            Open(OpenSceneMode.Single);
            using (var ocReader = new OCDataReader(GetOCDataFilePath()))
            {
                tree = new BoundsOctree <Cell>();
                LoadBlock(ocReader, 0);
            }

            RuntimeGetRenderableObjs();
        }
Exemple #4
0
        public void Load(OCDataReader reader)
        {
            _aabb.center = reader.ReadVector3();

            _aabb.size = new Vector3(owner.CellSize, owner.CellSize, owner.CellSize);

            if (owner.owner.Owner == null)
            {
                Byte[]   datas = reader.ReadBytes(owner.owner.MaxGameObjectIDCount / 8);
                BitArray flag  = new BitArray(datas);
                visFlagDic.Add(new Index(0, 0), flag);
            }
            else
            {
                //Byte[] mainDatas = reader.ReadBytes(0);
                //BitArray mainFlag = new BitArray(mainDatas);
                //visFlagDic.Add(Index.InValidIndex, mainFlag);

                Index currentIndex = owner.owner.TileIndex;
                for (int i = -1; i < 2; i++)
                {
                    for (int j = -1; j < 2; j++)
                    {
                        Index newIndex = currentIndex + new Index(i, j);
                        if (owner.owner.Owner.IsValidIndex(newIndex))
                        {
                            //var multiScene = owner.owner.Owner as MultiScene;
                            //var scene = multiScene.GetTile(newIndex) as SingleScene;

                            //if (scene != null)
                            {
                                var maxGameObjectIdCount = owner.owner.GetNeighborSceneMaxObjectId(newIndex);
                                if (maxGameObjectIdCount > 0)
                                {
                                    Byte[]   datas = reader.ReadBytes(maxGameObjectIdCount / 8);
                                    BitArray flag  = new BitArray(datas);
                                    visFlagDic.Add(new Index(i, j), flag);
                                }
                            }
                        }
                    }
                }
            }

            int childCount = reader.ReadInt();

            for (int i = 0; i < childCount; i++)
            {
                Cell cell = new Cell(owner);
                cell._aabb.center = reader.ReadVector3();
                cell._aabb.size   = Vector3.one;
                AddChild(cell);
            }
        }
Exemple #5
0
        public void Load(OCDataReader reader)
        {
            cellSize = reader.ReadFloat();

            aabb = reader.ReadBounds();

            int len = reader.ReadInt();

            for (int i = 0; i < len; i++)
            {
                Cell cell = new Cell(this);
                cell.Load(reader);
                AddCell(cell);
            }
        }
Exemple #6
0
        private void MergeOCData(byte[, ][] ocDatas)
        {
            var filePath = GetOCDataFilePath();

            Load();

            try
            {
                Debug.LogFormat("Merge OC Data for MultiScene Name Pattern {0}", NamePattern);
                using (var writer = new OCDataWriter(filePath, _tileDimension, _maxIDs))
                {
                    for (int x = 0; x < _tileDimension; ++x)
                    {
                        for (int y = 0; y < _tileDimension; ++y)
                        {
                            if (!Config.IsBatchMode)
                            {
                                Progress("合并OC数据",
                                         String.Format("处理OC数据{0}/{1}", x * _tileDimension + y, _tileDimension * _tileDimension),
                                         ((float)x * _tileDimension + y) / _tileDimension * _tileDimension);
                            }
                            var data        = ocDatas[x, y];
                            var ocDataBlock = OCDataBlock.Empty;
                            if (data != null)
                            {
                                var reader = new OCDataReader(data);
                                ocDataBlock = reader.GetDataBlock(0);
                            }

                            writer.FillOCDataBlock(x * _tileDimension + y, data, ocDataBlock.Offset,
                                                   ocDataBlock.Length);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Debug.LogException(e);
                throw;
            }
            finally
            {
                if (!Config.IsBatchMode)
                {
                    EditorUtility.ClearProgressBar();
                }
            }
        }
        private void LoadNeighborMaxGameObjId(OCDataReader ocReader)
        {
            var tileDimension = ocReader.ReadInt();

            if (tileDimension > 0)
            {
                _neighborMaxObjIdTable = new int[tileDimension, tileDimension];
                for (int x = 0; x < tileDimension; ++x)
                {
                    for (int y = 0; y < tileDimension; ++y)
                    {
                        _neighborMaxObjIdTable[x, y] = ocReader.ReadInt();
                    }
                }
            }
        }
        private void LoadBlock(OCDataReader ocReader, int blockIndex)
        {
            if (ocReader.TrySetBlock(blockIndex))
            {
                LoadNeighborMaxGameObjId(ocReader);
                _maxGameObjectIDCount = ocReader.ReadInt();

                int len = ocReader.ReadInt();

                for (int i = 0; i < len; i++)
                {
                    VisVolume volume = new VisVolume(this);
                    volume.Load(ocReader);
                    volumelList.Add(volume);
                }
            }
        }