diff --git a/src/source/Application.cpp b/src/source/Application.cpp index b40c972..0ad5702 100644 --- a/src/source/Application.cpp +++ b/src/source/Application.cpp @@ -320,12 +320,24 @@ void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) { if(_dataModel->isRunning()) { // XplicitNgine Start + std::vector toDelete; for(size_t i = 0; i < _dataModel->getWorkspace()->partObjects.size(); i++) { PartInstance* partInstance = _dataModel->getWorkspace()->partObjects[i]; - _dataModel->getEngine()->createBody(partInstance, sdt*15/_dataModel->getWorkspace()->partObjects.size()); + if(partInstance->getPosition().y < -20) + { + toDelete.push_back(partInstance); + } + else + _dataModel->getEngine()->createBody(partInstance, sdt*15/_dataModel->getWorkspace()->partObjects.size()); + } + while(toDelete.size() > 0) + { + PartInstance * p = toDelete.back(); + toDelete.pop_back(); + p->setParent(NULL); + delete p; } - onLogic(); } diff --git a/src/source/DataModelV2/GroupInstance.cpp b/src/source/DataModelV2/GroupInstance.cpp index c392f07..45492b9 100644 --- a/src/source/DataModelV2/GroupInstance.cpp +++ b/src/source/DataModelV2/GroupInstance.cpp @@ -34,13 +34,11 @@ void GroupInstance::PropUpdate(LPPROPGRIDITEM &pItem) std::vector GroupInstance::unGroup() { - std::vector child; while(children.size() > 0) { - child.push_back(children[0]); children[0]->setParent(parent); } - return child; + return std::vector(); } void GroupInstance::render(RenderDevice * rd) diff --git a/src/source/DataModelV2/PartInstance.cpp b/src/source/DataModelV2/PartInstance.cpp index db45cf6..20b619f 100644 --- a/src/source/DataModelV2/PartInstance.cpp +++ b/src/source/DataModelV2/PartInstance.cpp @@ -123,22 +123,22 @@ void PartInstance::setParent(Instance* prnt) { if(WorkspaceInstance* workspace = dynamic_cast(cparent)) { - std::cout << "Removed from partarray " << std::endl; workspace->partObjects.erase(std::remove(workspace->partObjects.begin(), workspace->partObjects.end(), this), workspace->partObjects.end()); - break; } cparent = cparent->getParent(); } Instance::setParent(prnt); - while(parent != NULL) + cparent = getParent(); + while(cparent != NULL) { - if(WorkspaceInstance* workspace = dynamic_cast(parent)) + if(WorkspaceInstance* workspace = dynamic_cast(cparent)) { workspace->partObjects.push_back(this); break; } - parent = parent->getParent(); + cparent = cparent->getParent(); } + } PartInstance::PartInstance(const PartInstance &oinst) diff --git a/src/source/Listener/GUDButtonListener.cpp b/src/source/Listener/GUDButtonListener.cpp index 4e00f43..0195b0d 100644 --- a/src/source/Listener/GUDButtonListener.cpp +++ b/src/source/Listener/GUDButtonListener.cpp @@ -39,6 +39,7 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button) else if(button->name == "Group") { GroupInstance * inst = new GroupInstance(); + inst->setParent(g_dataModel->getWorkspace()); for(size_t i = 0; i < g_selectedInstances.size(); i++) { if(g_selectedInstances.at(i)->canDelete) @@ -52,7 +53,6 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button) /*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z)); g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/ } - inst->setParent(g_dataModel->getWorkspace()); g_selectedInstances.clear(); g_selectedInstances.push_back(inst); if(g_selectedInstances.size() > 0)