コード例 #1
0
 /// <summary> Potentially generates meshes for several pending chunks. </summary>
 public void Update(double deltaTime)
 {
     if (chunks == null)
     {
         return;
     }
     ChunkSorter.UpdateSortOrder(game, updater);
     updater.UpdateChunks(deltaTime);
 }
コード例 #2
0
        public void AdjChunks(int oldChunkX, int oldChunkZ)
        {
            int  length    = game.World.ChunkHandler.ChunkArray.GetLength(0);
            bool xNeg      = false;
            bool zNeg      = false;
            int  curChunkX = game.World.ChunkHandler.curChunkX;
            int  curChunkZ = game.World.ChunkHandler.curChunkY;

            if (oldChunkX > curChunkX)
            {
                xNeg = true;
            }
            if (oldChunkZ > curChunkZ)
            {
                zNeg = true;
            }
            int adjX = curChunkX - oldChunkX;
            int adjZ = curChunkZ - oldChunkZ;
            int curX = 0;

            if (xNeg)
            {
                curX = length - 1;
            }
            int curZ = 0;

            if (zNeg)
            {
                curZ = length - 1;
            }
            for (int x = 0; x < length; x++)
            {
                for (int z = 0; z < length; z++)
                {
                    int newX = curX - adjX;
                    Console.WriteLine(adjX);
                    int newZ = curZ - adjZ;
                    if (newX >= 0 && newZ >= 0 && newX < length && newZ < length)
                    {
                        for (int y = 0; y < 8; y++)
                        {
                            ChunkInfo info = GetChunk(curX, y, curZ);
                            if (info == null)
                            {
                                continue;
                            }
                            info.CentreX += (ushort)(16 * adjX);
                            info.CentreZ += (ushort)(16 * adjZ);
                            info.Reset(newX * 16, y * 16, newZ * 16);
                            SetChunk(newX, y, newZ, info);
                            //SetChunk(curX, y, curZ, null);
                            MarkDeleteChunk(curX, y, curZ);
                        }
                    }
                    else
                    {
                        for (int y = 0; y < 8; y++)
                        {
                            //SetChunk(curX, y, curZ, null);
                            MarkDeleteChunk(curX, y, curZ);
                        }
                    }
                    if (zNeg)
                    {
                        curZ -= 1;
                    }
                    else
                    {
                        curZ += 1;
                    }
                }
                if (xNeg)
                {
                    curX -= 1;
                }
                else
                {
                    curX += 1;
                }
                curZ = 0;
                if (zNeg)
                {
                    curZ = length - 1;
                }
            }
            updater.chunkPos = new Vector3I(0, 0, 0);
            ChunkSorter.UpdateSortOrder(game, updater);
        }