void EditorBodyControl::ProcessIsSolidChanging() { Entity *selectedNode = scene->GetSelection(); if(selectedNode) { KeyedArchive *customProperties = selectedNode->GetCustomProperties(); if(customProperties && customProperties->IsKeyExists(String(Entity::SCENE_NODE_IS_SOLID_PROPERTY_NAME))) { bool isSolid = selectedNode->GetSolid(); selectedNode->SetSolid(!isSolid); SceneData *activeScene = SceneDataManager::Instance()->SceneGetActive(); activeScene->RebuildSceneGraphNode(selectedNode); /* #### dock --> KeyedArchive *properties = selectedNode->GetCustomProperties(); if(properties && properties->IsKeyExists(String("editor.referenceToOwner"))) { String filePathname = properties->GetString(String("editor.referenceToOwner")); activeScene->OpenLibraryForFile(filePathname); } <-- */ sceneGraph->SelectNode(selectedNode); } } }
CommandInternalRemoveSceneNode::CommandInternalRemoveSceneNode(Entity* node, bool removeSimilar) : Command(Command::COMMAND_UNDO_REDO, CommandList::ID_COMMAND_INTERNAL_REMOVE_SCENE_NODE) { commandName = "Remove Object"; if (removeSimilar) commandName += "s"; if (!node || !node->GetParent()) return; if (removeSimilar) { String referenceToOwner; Entity* nodeParent = node->GetParent(); KeyedArchive *customProperties = node->GetCustomProperties(); if(customProperties && customProperties->IsKeyExists(ResourceEditor::EDITOR_REFERENCE_TO_OWNER)) { referenceToOwner = customProperties->GetString(ResourceEditor::EDITOR_REFERENCE_TO_OWNER); } nodesForDeletion.reserve(nodeParent->GetChildrenCount()); for (int32 i = 0; i < nodeParent->GetChildrenCount(); ++i) { Entity* child = nodeParent->GetChild(i); customProperties = child->GetCustomProperties(); if (customProperties && customProperties->IsKeyExists(ResourceEditor::EDITOR_REFERENCE_TO_OWNER)) { if (customProperties->GetString(ResourceEditor::EDITOR_REFERENCE_TO_OWNER) == referenceToOwner) { RemoveNodeRec removeNodeRec; removeNodeRec.node = SafeRetain(child); removeNodeRec.nodeParent = nodeParent; int32 i = GetNodeIndex(removeNodeRec); if (i >= 0 && i < nodeParent->GetChildrenCount() - 1) removeNodeRec.insertBeforeNode = nodeParent->GetChild(i + 1); nodesForDeletion.push_back(removeNodeRec); } } } } else { RemoveNodeRec removeNodeRec; removeNodeRec.node = SafeRetain(node); removeNodeRec.nodeParent = node->GetParent(); int32 i = GetNodeIndex(removeNodeRec); if (i >= 0 && i < removeNodeRec.nodeParent->GetChildrenCount() - 1) removeNodeRec.insertBeforeNode = removeNodeRec.nodeParent->GetChild(i + 1); nodesForDeletion.push_back(removeNodeRec); } selectedNode = node; }
void SceneSaver::CopyCustomColorTexture(Scene *scene, const FilePath & sceneFolder, Set<String> &errorLog) { Entity *land = FindLandscapeEntity(scene); if(!land) return; KeyedArchive* customProps = land->GetCustomProperties(); if(!customProps) return; String pathname = customProps->GetString(ResourceEditor::CUSTOM_COLOR_TEXTURE_PROP); if(pathname.empty()) return; FilePath projectPath = CreateProjectPathFromPath(sceneFolder); if(projectPath.IsEmpty()) { Logger::Error("[SceneSaver::CopyCustomColorTexture] Can't copy custom colors texture (%s)", pathname.c_str()); return; } FilePath texPathname = projectPath + pathname; sceneUtils.CopyFile(texPathname, errorLog); FilePath newTexPathname = sceneUtils.GetNewFilePath(texPathname); FilePath newProjectPathname = CreateProjectPathFromPath(sceneUtils.dataFolder); if(newProjectPathname.IsEmpty()) { Logger::Error("[SceneSaver::CopyCustomColorTexture] Can't save custom colors texture (%s)", pathname.c_str()); return; } //save new path to custom colors texture customProps->SetString(ResourceEditor::CUSTOM_COLOR_TEXTURE_PROP, newTexPathname.GetRelativePathname(newProjectPathname)); }
void EditorBodyControl::ReloadNode(Entity *node, const FilePath &pathToFile) {//если в рут ноды сложить такие же рут ноды то на релоаде все накроет пиздой KeyedArchive *customProperties = node->GetCustomProperties(); if (customProperties->GetString(ResourceEditor::EDITOR_REFERENCE_TO_OWNER, "") == pathToFile.GetAbsolutePathname()) { Entity *newNode = scene->GetRootNode(pathToFile)->Clone(); newNode->SetLocalTransform(node->GetLocalTransform()); newNode->GetCustomProperties()->SetString(ResourceEditor::EDITOR_REFERENCE_TO_OWNER, pathToFile.GetAbsolutePathname()); newNode->SetSolid(true); Entity *parent = node->GetParent(); AddedNode addN; addN.nodeToAdd = newNode; addN.nodeToRemove = node; addN.parent = parent; nodesToAdd.push_back(addN); return; } int32 csz = node->GetChildrenCount(); for (int ci = 0; ci < csz; ++ci) { Entity * child = node->GetChild(ci); ReloadNode(child, pathToFile); } }
void QSceneGraphTreeView::ShowSceneGraphMenu(const QModelIndex &index, const QPoint &point) { if(!index.isValid()) { return; } QMenu menu; // For "custom" Particles Editor nodes the "generic" ones aren't needed". if (sceneGraphModel->GetParticlesEditorSceneModelHelper().NeedDisplaySceneEditorPopupMenuItems(index)) { SceneData *activeScene = SceneDataManager::Instance()->SceneGetActive(); LandscapesController *landsacpesController = activeScene->GetLandscapesController(); SceneEditorScreenMain *screen = static_cast<SceneEditorScreenMain *>(UIScreenManager::Instance()->GetScreen(SCREEN_MAIN_OLD)); EditorBodyControl *c = screen->FindCurrentBody()->bodyControl; bool canChangeScene = !landsacpesController->EditorLandscapeIsActive() && !c->LandscapeEditorActive(); if(!canChangeScene) return; AddActionToMenu(&menu, QString("Look at Object"), new CommandLockAtObject()); AddActionToMenu(&menu, QString("Remove Object"), new CommandRemoveSceneNode()); AddActionToMenu(&menu, QString("Debug Flags"), new CommandDebugFlags()); Entity *node = static_cast<Entity *>(sceneGraphModel->ItemData(index)); if (node) { SceneData *activeScene = SceneDataManager::Instance()->SceneGetActive(); if(node->GetParent() == activeScene->GetScene()) { KeyedArchive *properties = node->GetCustomProperties(); if (properties && properties->IsKeyExists(String(ResourceEditor::EDITOR_REFERENCE_TO_OWNER))) { String filePathname = properties->GetString(String(ResourceEditor::EDITOR_REFERENCE_TO_OWNER)); AddActionToMenu(&menu, QString("Remove Root Nodes"), new CommandRemoveRootNodes()); } } FilePath filePathForSaveAs(activeScene->GetScenePathname()); AddActionToMenu(&menu, QString("Save Scene As"), new CommandSaveSpecifiedScene(node, filePathForSaveAs)); } } // For "custom" Particles Editor nodes the "generic" ones aren't needed". // We might need more menu items/actions for Particles Editor. sceneGraphModel->GetParticlesEditorSceneModelHelper().AddPopupMenuItems(menu, index); connect(&menu, SIGNAL(triggered(QAction *)), this, SLOT(SceneGraphMenuTriggered(QAction *))); menu.exec(point); }
void EditorScene::SetShadowColor( const Color &color ) { Entity *land = GetLandscapeNode(this); if(!land) return; KeyedArchive * props = land->GetCustomProperties(); if(!props) return; props->SetVariant("ShadowColor", VariantType(color)); UpdateShadowColorFromLandscape(); }
void EditorScene::UpdateShadowColorFromLandscape() { // try to get shadow color for landscape Entity *land = GetLandscapeNode(this); if(!land) return; KeyedArchive * props = land->GetCustomProperties(); if (props->IsKeyExists("ShadowColor")) { GetRenderSystem()->SetShadowRectColor(props->GetVariant("ShadowColor")->AsColor()); } }