Esempio n. 1
0
        public LocalBlockPosition(IChunk chunk, BlockPosition position)
            : this()
        {
            var chunkPos = chunk.Position();
            var size     = chunk.Size();

            X = position.X - chunkPos.ChunkX * size.X;
            Y = position.Y;
            Z = position.Z - chunkPos.ChunkZ * size.Z;
        }
Esempio n. 2
0
        public ChunkPartition([NotNull] IChunk chunk, BoxSelection boundaries)
        {
            Chunk = chunk;

            var size          = chunk.Size();
            var position      = chunk.Position();
            var lesserCorner  = new BlockPosition(position, new LocalBlockPosition(0, 0, 0), size);
            var greaterCorner = new BlockPosition(position, new LocalBlockPosition(size.X, size.Y, size.Z), size);

            // translate boundaries into chunk-local
            // if minimum or maximum are out of bounds, cap them
            XMin = (boundaries.Left - lesserCorner.X).Clamp(0, size.X);
            YMin = (boundaries.Bottom - lesserCorner.Y).Clamp(0, size.Y);
            ZMin = (boundaries.Forward - lesserCorner.Z).Clamp(0, size.Z);

            XMax = (boundaries.Right - lesserCorner.X + 1).Clamp(0, size.X);
            YMax = (boundaries.Top - lesserCorner.Y + 1).Clamp(0, size.Y);
            ZMax = (boundaries.Backward - lesserCorner.Z + 1).Clamp(0, size.Z);
        }