Пример #1
0
        /// <summary>
        /// 重置缓冲区
        /// </summary>
        public void ResetBuffer(TileIndex rTileIndex)
        {
            mSceneBlockBuffer.Reset(rTileIndex);
            SceneBlock rCurBlock = mSceneBlockBuffer.CurBlock;

            for (int i = 0; i < rCurBlock.TileCount; i++)
            {
                CreateLoadRequest(rCurBlock[i]);
            }
        }
Пример #2
0
        public SceneBlockBuffer(int rTileNum)
        {
            this.mTileNum      = rTileNum;
            this.mBlockBuffers = new List <SceneTileWrapper>();

            this.mCurBlock  = new SceneBlock(rTileNum);
            this.mPrevBlock = new SceneBlock(rTileNum);

            this.mMultiSceneRootGo = UtilTool.CreateGameObject("__multiSceneRoot");
        }
Пример #3
0
        public void UpdateDelta(int rDeltaRow, int rDeltaCol)
        {
            if (mSceneBlockBuffer == null)
            {
                return;
            }

            List <TileIndex> rPrevIndices = new List <TileIndex>(mSceneBlockBuffer.PrevBlock.Tiles);

            TileIndex rCenterTile = mSceneBlockBuffer.CurBlock.GetCenter();

            if (rCenterTile == null)
            {
                return;
            }
            mSceneBlockBuffer.PrevBlock.Initialize(rCenterTile.Row, rCenterTile.Col);
            mSceneBlockBuffer.CurBlock.AddDelta(rDeltaRow, rDeltaCol);

            List <TileIndex> rMiddle1Block = SceneBlock.UnionBlock(mSceneBlockBuffer.CurBlock.Tiles, mSceneBlockBuffer.PrevBlock.Tiles);
            List <TileIndex> rMiddle2Block = SceneBlock.UnionBlock(mSceneBlockBuffer.PrevBlock.Tiles, rPrevIndices);
            List <TileIndex> rBigBlock     = SceneBlock.UnionBlock(rMiddle1Block, rPrevIndices);

            List <TileIndex> rDeleteIndices   = SceneBlock.DiffBlock(rBigBlock, rMiddle1Block);
            List <TileIndex> rDeactiveIndices = SceneBlock.DiffBlock(rBigBlock, mSceneBlockBuffer.CurBlock.Tiles);
            List <TileIndex> rLoadIndices     = SceneBlock.DiffBlock(rBigBlock, rMiddle2Block);

            for (int i = 0; i < rDeactiveIndices.Count; i++)
            {
                mSceneBlockBuffer.SetActive(rDeactiveIndices[i], false);
            }

            for (int i = 0; i < rDeleteIndices.Count; i++)
            {
                ReleaseLoadRequest(rDeleteIndices[i]);
            }

            for (int i = 0; i < mSceneBlockBuffer.CurBlock.TileCount; i++)
            {
                mSceneBlockBuffer.SetActive(mSceneBlockBuffer.CurBlock[i], true);
            }

            for (int i = 0; i < rLoadIndices.Count; i++)
            {
                CreateLoadRequest(rLoadIndices[i]);
            }
        }