Fixed models crashing game

This commit is contained in:
Vulpovile
2022-10-02 17:17:40 -07:00
parent df77572fe7
commit c27aa6a114
4 changed files with 21 additions and 11 deletions

View File

@@ -320,12 +320,24 @@ void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
if(_dataModel->isRunning()) if(_dataModel->isRunning())
{ {
// XplicitNgine Start // XplicitNgine Start
std::vector<PartInstance *> toDelete;
for(size_t i = 0; i < _dataModel->getWorkspace()->partObjects.size(); i++) for(size_t i = 0; i < _dataModel->getWorkspace()->partObjects.size(); i++)
{ {
PartInstance* partInstance = _dataModel->getWorkspace()->partObjects[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(); onLogic();
} }

View File

@@ -34,13 +34,11 @@ void GroupInstance::PropUpdate(LPPROPGRIDITEM &pItem)
std::vector<Instance *> GroupInstance::unGroup() std::vector<Instance *> GroupInstance::unGroup()
{ {
std::vector<Instance *> child;
while(children.size() > 0) while(children.size() > 0)
{ {
child.push_back(children[0]);
children[0]->setParent(parent); children[0]->setParent(parent);
} }
return child; return std::vector<Instance *>();
} }
void GroupInstance::render(RenderDevice * rd) void GroupInstance::render(RenderDevice * rd)

View File

@@ -123,22 +123,22 @@ void PartInstance::setParent(Instance* prnt)
{ {
if(WorkspaceInstance* workspace = dynamic_cast<WorkspaceInstance*>(cparent)) if(WorkspaceInstance* workspace = dynamic_cast<WorkspaceInstance*>(cparent))
{ {
std::cout << "Removed from partarray " << std::endl;
workspace->partObjects.erase(std::remove(workspace->partObjects.begin(), workspace->partObjects.end(), this), workspace->partObjects.end()); workspace->partObjects.erase(std::remove(workspace->partObjects.begin(), workspace->partObjects.end(), this), workspace->partObjects.end());
break;
} }
cparent = cparent->getParent(); cparent = cparent->getParent();
} }
Instance::setParent(prnt); Instance::setParent(prnt);
while(parent != NULL) cparent = getParent();
while(cparent != NULL)
{ {
if(WorkspaceInstance* workspace = dynamic_cast<WorkspaceInstance*>(parent)) if(WorkspaceInstance* workspace = dynamic_cast<WorkspaceInstance*>(cparent))
{ {
workspace->partObjects.push_back(this); workspace->partObjects.push_back(this);
break; break;
} }
parent = parent->getParent(); cparent = cparent->getParent();
} }
} }
PartInstance::PartInstance(const PartInstance &oinst) PartInstance::PartInstance(const PartInstance &oinst)

View File

@@ -39,6 +39,7 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
else if(button->name == "Group") else if(button->name == "Group")
{ {
GroupInstance * inst = new GroupInstance(); GroupInstance * inst = new GroupInstance();
inst->setParent(g_dataModel->getWorkspace());
for(size_t i = 0; i < g_selectedInstances.size(); i++) for(size_t i = 0; i < g_selectedInstances.size(); i++)
{ {
if(g_selectedInstances.at(i)->canDelete) 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)); /*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z));
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/ g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/
} }
inst->setParent(g_dataModel->getWorkspace());
g_selectedInstances.clear(); g_selectedInstances.clear();
g_selectedInstances.push_back(inst); g_selectedInstances.push_back(inst);
if(g_selectedInstances.size() > 0) if(g_selectedInstances.size() > 0)