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); }
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); } }
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; }
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); } }
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); }