void XKPPlacementLayout::addWidget(QWidget *widget) { #ifdef DEBUG_XKPPLACEMENT qDebug() << "addWidget:: name " << widget->objectName() << " with size(" << widget->size().width() << "," << widget->size().height() << ")"; #endif add(new QWidgetItem(widget), Placement(widget->property(placementName).toUInt()), widget); widget->setProperty(placementSizeName, widget->size()); widget->installEventFilter(this); }
void cPrefab::Draw(cChunkDesc & a_Dest, const Vector3i & a_Placement, int a_NumRotations) const { // Draw the basic image: Vector3i Placement(a_Placement); int ChunkStartX = a_Dest.GetChunkX() * cChunkDef::Width; int ChunkStartZ = a_Dest.GetChunkZ() * cChunkDef::Width; Placement.Move(-ChunkStartX, 0, -ChunkStartZ); const cBlockArea & Image = m_BlockArea[a_NumRotations]; // If the placement is outside this chunk, bail out: if ( (Placement.x > cChunkDef::Width) || (Placement.x + Image.GetSizeX() < 0) || (Placement.z > cChunkDef::Width) || (Placement.z + Image.GetSizeZ() < 0) ) { return; } // Write the image: a_Dest.WriteBlockArea(Image, Placement.x, Placement.y, Placement.z, m_MergeStrategy); // If requested, draw the floor (from the bottom of the prefab down to the nearest non-air) if (m_ShouldExtendFloor) { int MaxX = Image.GetSizeX(); int MaxZ = Image.GetSizeZ(); for (int z = 0; z < MaxZ; z++) { int RelZ = Placement.z + z; if ((RelZ < 0) || (RelZ >= cChunkDef::Width)) { // Z coord outside the chunk continue; } for (int x = 0; x < MaxX; x++) { int RelX = Placement.x + x; if ((RelX < 0) || (RelX >= cChunkDef::Width)) { // X coord outside the chunk continue; } BLOCKTYPE BlockType; NIBBLETYPE BlockMeta; Image.GetRelBlockTypeMeta(x, 0, z, BlockType, BlockMeta); if ((BlockType == E_BLOCK_AIR) || (BlockType == E_BLOCK_SPONGE)) { // Do not expand air nor sponge blocks continue; } for (int y = Placement.y - 1; y >= 0; y--) { BLOCKTYPE ExistingBlock = a_Dest.GetBlockType(RelX, y, RelZ); if (ExistingBlock != E_BLOCK_AIR) { // End the expansion for this column, reached the end break; } a_Dest.SetBlockTypeMeta(RelX, y, RelZ, BlockType, BlockMeta); } // for y } // for x } // for z } }