/* QuickTextureOverlay3d::applyTexture * Applies the current texture to all selected walls/flats *******************************************************************/ void QuickTextureOverlay3d::applyTexture() { // Check editor is associated if (!editor) return; // Get selection/hilight auto& selection = editor->selection(); // Go through items if (!selection.empty()) { for (unsigned a = 0; a < selection.size(); a++) { // Thing (skip) if (selection[a].type == MapEditor::ItemType::Thing) continue; // Floor else if (selection[a].type == MapEditor::ItemType::Floor && (sel_type == 0 || sel_type == 2)) { MapSector* sector = editor->map().getSector(selection[a].index); if (sector) sector->setStringProperty("texturefloor", textures[current_index].name); } // Ceiling else if (selection[a].type == MapEditor::ItemType::Ceiling && (sel_type == 0 || sel_type == 2)) { MapSector* sector = editor->map().getSector(selection[a].index); if (sector) sector->setStringProperty("textureceiling", textures[current_index].name); } // Wall else if (sel_type > 0) { MapSide* side = editor->map().getSide(selection[a].index); if (side) { // Upper if (selection[a].type == MapEditor::ItemType::WallTop) side->setStringProperty("texturetop", textures[current_index].name); // Middle else if (selection[a].type == MapEditor::ItemType::WallMiddle) side->setStringProperty("texturemiddle", textures[current_index].name); // Lower else if (selection[a].type == MapEditor::ItemType::WallBottom) side->setStringProperty("texturebottom", textures[current_index].name); } } } } }
/* SectorPropsPanel::applyChanges * Apply values to opened objects *******************************************************************/ void SectorPropsPanel::applyChanges() { for (unsigned a = 0; a < objects.size(); a++) { MapSector* sector = (MapSector*)objects[a]; // Special if (cb_override_special->GetValue()) sector->setIntProperty("special", panel_special->getSelectedSpecial(theMapEditor->currentMapDesc().format)); // Floor texture if (!fcb_floor->GetValue().IsEmpty()) sector->setStringProperty("texturefloor", fcb_floor->GetValue()); // Ceiling texture if (!fcb_ceiling->GetValue().IsEmpty()) sector->setStringProperty("textureceiling", fcb_ceiling->GetValue()); // Floor height if (!text_height_floor->GetValue().IsEmpty()) sector->setIntProperty("heightfloor", text_height_floor->getNumber(sector->getFloorHeight())); // Ceiling height if (!text_height_ceiling->GetValue().IsEmpty()) sector->setIntProperty("heightceiling", text_height_ceiling->getNumber(sector->getCeilingHeight())); // Light level if (!text_light->GetValue().IsEmpty()) sector->setIntProperty("lightlevel", text_light->getNumber(sector->getLightLevel())); // Tag if (!text_tag->GetValue().IsEmpty()) sector->setIntProperty("id", text_tag->getNumber(sector->getTag())); } if (mopp_all_props) mopp_all_props->applyChanges(); }
/* MapEditContext::floodFill3d * Pastes previously copied wall/flat/thing info to selection and ad *******************************************************************/ void Edit3D::floodFill(CopyType type) { // Get items to paste to auto& selection = context_.selection(); auto items = getAdjacent(selection.hilight()); // Restrict floodfill to selection, if any if (selection.size() > 0) { for (auto i = items.begin(); i < items.end(); ++i) { bool found = false; for (unsigned a = 0; a < selection.size(); a++) { if (selection[a].type == i->type && selection[a].index == i->index) { found = true; break; } } if (!found) items.erase(i); } } // Begin undo step string ptype = "Floodfill textures"; undo_manager_->beginRecord(ptype); // Go through items for (unsigned a = 0; a < items.size(); a++) { // Wall if (items[a].type == ItemType::WallTop || items[a].type == ItemType::WallMiddle || items[a].type == ItemType::WallBottom) { auto side = context_.map().getSide(items[a].index); undo_manager_->recordUndoStep(new MapEditor::PropertyChangeUS(side)); // Upper wall if (items[a].type == ItemType::WallTop) { // Texture if (type == CopyType::TexType) side->setStringProperty("texturetop", copy_texture_); } // Middle wall else if (items[a].type == ItemType::WallMiddle) { // Texture if (type == CopyType::TexType) side->setStringProperty("texturemiddle", copy_texture_); } // Lower wall else if (items[a].type == ItemType::WallBottom) { // Texture if (type == CopyType::TexType) side->setStringProperty("texturebottom", copy_texture_); } } // Flat else if (items[a].type == ItemType::Floor || items[a].type == ItemType::Ceiling) { MapSector* sector = context_.map().getSector(items[a].index); undo_manager_->recordUndoStep(new MapEditor::PropertyChangeUS(sector)); // Floor if (items[a].type == ItemType::Floor) { // Texture if (type == CopyType::TexType) sector->setStringProperty("texturefloor", copy_texture_); } // Ceiling if (items[a].type == ItemType::Ceiling) { // Texture if (type == CopyType::TexType) sector->setStringProperty("textureceiling", copy_texture_); } } } // Editor message if (type == CopyType::TexType) { context_.addEditorMessage("Floodfilled Texture"); } undo_manager_->endRecord(true); }
/* MapEditContext::paste3d * Pastes previously copied wall/flat/thing info to selection *******************************************************************/ void Edit3D::paste(CopyType type) { // Begin undo step string ptype = "Paste Properties"; if (type == CopyType::TexType) ptype = "Paste Texture/Type"; undo_manager_->beginRecord(ptype); // Go through items auto& selection = context_.selection(); for (auto& item : selection.selectionOrHilight()) { // Wall if (MapEditor::baseItemType(item.type) == ItemType::Side) { MapSide* side = context_.map().getSide(item.index); undo_manager_->recordUndoStep(new MapEditor::PropertyChangeUS(side)); // Upper wall if (item.type == ItemType::WallTop) { // Texture if (type == CopyType::TexType) side->setStringProperty("texturetop", copy_texture_); } // Middle wall else if (item.type == ItemType::WallMiddle) { // Texture if (type == CopyType::TexType) side->setStringProperty("texturemiddle", copy_texture_); } // Lower wall else if (item.type == ItemType::WallBottom) { // Texture if (type == CopyType::TexType) side->setStringProperty("texturebottom", copy_texture_); } } // Flat else if (item.type == ItemType::Floor || item.type == ItemType::Ceiling) { MapSector* sector = context_.map().getSector(item.index); undo_manager_->recordUndoStep(new MapEditor::PropertyChangeUS(sector)); // Floor if (item.type == ItemType::Floor) { // Texture if (type == CopyType::TexType) sector->setStringProperty("texturefloor", copy_texture_); } // Ceiling if (item.type == ItemType::Ceiling) { // Texture if (type == CopyType::TexType) sector->setStringProperty("textureceiling", copy_texture_); } } // Thing else if (item.type == ItemType::Thing) { MapThing* thing = context_.map().getThing(item.index); undo_manager_->recordUndoStep(new MapEditor::PropertyChangeUS(thing)); // Type if (type == CopyType::TexType) thing->setIntProperty("type", copy_thing_.getType()); } } // Editor message if (type == CopyType::TexType) { if (selection.hilight().type == ItemType::Thing) context_.addEditorMessage("Pasted Thing Type"); else context_.addEditorMessage("Pasted Texture"); } undo_manager_->endRecord(true); }