/// <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]); } }
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"); }
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]); } }