/// <summary>
        /// Update the internal palette to match the bitsPerBlock
        /// </summary>
        /// <remarks>This should never be called directly, please use <see cref="Resize"/></remarks>
        /// <param name="bitsPerBlock">The number of bits used to store a block state</param>
        /// <returns>true if the internal array must be updated, false otherwise</returns>
        private bool UpdatePalette(byte bitsPerBlock)
        {
            bitsPerBlock = System.Math.Clamp(bitsPerBlock, MinBitsPerBlock, _globalPalette.BitsPerBlock);

            if (BlockPalette.BitsPerBlock == bitsPerBlock)
            {
                return(false);
            }

            var flag = true;

            if (bitsPerBlock <= 8)
            {
                if (BlockPalette is LinearBlockPalette blockPalette)
                {
                    blockPalette.Resize(bitsPerBlock);
                    flag = false;
                }
                else
                {
                    BlockPalette = new LinearBlockPalette(_globalPalette, bitsPerBlock);
                }
            }
            else
            {
                BlockPalette = _globalPalette;
            }

            _nBitsArray = NBitsArray.Create(bitsPerBlock, 4096); // TODO replace that by chunk section block count
            return(flag);
        }
Exemple #2
0
        /// <summary>
        /// Update the internal palette to match the bitsPerBlock
        /// </summary>
        /// <remarks>This should never be called directly, please use <see cref="Resize"/></remarks>
        /// <param name="bitsPerBlock">The number of bits used to store a block state</param>
        /// <returns>true if the internal array must be updated, false otherwise</returns>
        private bool UpdatePalette(byte bitsPerBlock)
        {
            bitsPerBlock = Math.Clamp(bitsPerBlock, MinBitsPerBlock, _globalPalette.BitsPerBlock);

            if (BlockPalette.BitsPerBlock == bitsPerBlock)
            {
                return(false);
            }

            var flag = true;

            if (bitsPerBlock <= 8)
            {
                if (BlockPalette is LinearBlockPalette blockPalette)
                {
                    blockPalette.Resize(bitsPerBlock);
                    flag = false;
                }
                else
                {
                    BlockPalette = new LinearBlockPalette(_globalPalette, bitsPerBlock);
                }
            }
            else
            {
                BlockPalette = _globalPalette;
            }

            _nBitsArray = NBitsArray.Create(bitsPerBlock, Minecraft.Units.Chunk.SectionBlockCount);
            return(flag);
        }