Пример #1
0
        public void SetPointLocal(int x, int y, int z, GridPoint gp, bool suppressRebuild = false)
        {
            _points[ArrayUtil.Convert3DTo1D(x, y, z, _length, _height)] = gp;

            if (!suppressRebuild)
            {
                MarkDataOutOfSync(false);

                List <Chunk> rebuildChunks = new List <Chunk>(1);
                rebuildChunks.Add(this);

                Chunk xNegative = XNegative;
                Chunk xPositive = XPositive;
                Chunk yNegative = YNegative;
                Chunk yPositive = YPositive;
                Chunk zNegative = ZNegative;
                Chunk zPositive = ZPositive;

                Chunk xNegativezNegative = _world.ChunkManager[ChunkSpaceX - 1, ChunkSpaceY, ChunkSpaceZ - 1];
                Chunk xNegativeyNegative = _world.ChunkManager[ChunkSpaceX - 1, ChunkSpaceY - 1, ChunkSpaceZ];
                Chunk yNegativezNegative = _world.ChunkManager[ChunkSpaceX, ChunkSpaceY - 1, ChunkSpaceZ - 1];

                bool minx = false;
                bool miny = false;
                bool minz = false;

                if ((x == 0 || x == 1) && xNegative != null)
                {
                    rebuildChunks.Add(xNegative);
                    minx = true;
                }
                if (x == _width - 1 && xPositive != null)
                {
                    rebuildChunks.Add(xPositive);
                }

                if ((y == 0 || y == 1) && yNegative != null)
                {
                    rebuildChunks.Add(yNegative);
                    miny = true;
                }
                if (y == _height - 1 && yPositive != null)
                {
                    rebuildChunks.Add(yPositive);
                }

                if ((z == 0 || z == 1) && zNegative != null)
                {
                    rebuildChunks.Add(zNegative);
                    minz = true;
                }
                if (z == _length - 1 && zPositive != null)
                {
                    rebuildChunks.Add(zPositive);
                }

                if (minx && minz && xNegativezNegative != null)
                {
                    rebuildChunks.Add(xNegativezNegative);
                }
                if (minx && miny && xNegativeyNegative != null)
                {
                    rebuildChunks.Add(xNegativeyNegative);
                }
                if (miny && minz && yNegativezNegative != null)
                {
                    rebuildChunks.Add(yNegativezNegative);
                }

                _world.ChunkManager.EnqueueChunkForBuild(rebuildChunks.ToArray());
            }
        }