示例#1
0
    public void Rebuild(BlockMaterialsList bml, bool i_natural, bool compensateStructures, bool redrawCall)
    {
        byte newmask = bml.GetExistenceMask();
        byte x;

        for (byte i = 0; i < 8; i++)
        {
            x = (byte)(1 << i);
            if ((newmask & x) == 0)
            { // удаление
                if ((existingPlanesMask & x) != 0)
                {
                    if (planes.ContainsKey(i))
                    {
                        planes[i].Annihilate(compensateStructures);
                    }
                }
            }
            else
            { // создание или изменение
                if ((existingPlanesMask & x) != 0 && planes != null && planes.ContainsKey(i))
                {
                    planes[i].ChangeMaterial(bml[i], redrawCall);
                }
                else
                {
                    CreatePlane(i, bml[i], redrawCall);
                }
            }
        }
        myBlock.myChunk.RefreshBlockVisualising(myBlock);
    }
示例#2
0
 public void RebuildBlock(BlockMaterialsList bml, bool i_natural, bool compensateStructures, bool redrawCall)
 {
     if (extension == null)
     {
         extension = new BlockExtension(this, bml, i_natural, redrawCall);
     }
     else
     {
         extension.Rebuild(bml, i_natural, compensateStructures, redrawCall);
     }
 }
示例#3
0
 public BlockExtension(Block i_myBlock, BlockMaterialsList bml, float i_volume_pc, bool i_natural, bool redrawCall) : this(i_myBlock, bml, i_natural, redrawCall)
 {
     volume        = MAX_VOLUME * i_volume_pc;
     fossilsVolume = isNatural ? volume : 0f;
 }
示例#4
0
    public BlockExtension(Block i_myBlock, BlockMaterialsList bml, bool i_natural, bool redrawCall) : this(i_myBlock, bml.mainMaterial, i_natural)
    {
        int nomat = PoolMaster.NO_MATERIAL_ID;
        int mat   = bml[Block.FWD_FACE_INDEX];

        if (mat != nomat)
        {
            existingPlanesMask += 1 << Block.FWD_FACE_INDEX;
            if (materialID != mat)
            {
                CreatePlane(Block.FWD_FACE_INDEX, mat, false);
            }
        }
        mat = bml[Block.RIGHT_FACE_INDEX];
        if (mat != nomat)
        {
            existingPlanesMask += 1 << Block.RIGHT_FACE_INDEX;
            if (materialID != mat)
            {
                CreatePlane(Block.RIGHT_FACE_INDEX, mat, false);
            }
        }
        mat = bml[Block.BACK_FACE_INDEX];
        if (mat != nomat)
        {
            existingPlanesMask += 1 << Block.BACK_FACE_INDEX;
            if (materialID != mat)
            {
                CreatePlane(Block.BACK_FACE_INDEX, mat, false);
            }
        }
        mat = bml[Block.LEFT_FACE_INDEX];
        if (mat != nomat)
        {
            existingPlanesMask += 1 << Block.LEFT_FACE_INDEX;
            if (materialID != mat)
            {
                CreatePlane(Block.LEFT_FACE_INDEX, mat, false);
            }
        }
        mat = bml[Block.UP_FACE_INDEX];
        if (mat != nomat)
        {
            existingPlanesMask += 1 << Block.UP_FACE_INDEX;
            if (materialID != mat)
            {
                CreatePlane(Block.UP_FACE_INDEX, mat, false);
            }
        }
        mat = bml[Block.DOWN_FACE_INDEX];
        if (mat != nomat)
        {
            existingPlanesMask += 1 << Block.DOWN_FACE_INDEX;
            if (materialID != mat)
            {
                CreatePlane(Block.DOWN_FACE_INDEX, mat, false);
            }
        }
        mat = bml[Block.SURFACE_FACE_INDEX];
        if (mat != nomat)
        {
            existingPlanesMask += 1 << Block.SURFACE_FACE_INDEX;
            if (materialID != mat)
            {
                CreatePlane(Block.SURFACE_FACE_INDEX, mat, false);
            }
        }
        mat = bml[Block.CEILING_FACE_INDEX];
        if (mat != nomat)
        {
            existingPlanesMask += 1 << Block.CEILING_FACE_INDEX;
            if (materialID != mat)
            {
                CreatePlane(Block.CEILING_FACE_INDEX, mat, false);
            }
        }
        if (redrawCall)
        {
            myBlock.myChunk.RefreshBlockVisualising(myBlock);
        }
    }
示例#5
0
 public Block(Chunk f_chunk, ChunkPos f_chunkPos, BlockMaterialsList bml, float i_volume_pc, bool i_natural, bool redrawCall) : this(f_chunk, f_chunkPos)
 {
     extension = new BlockExtension(this, bml, i_volume_pc, i_natural, redrawCall);
 }