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())
{
// XplicitNgine Start
std::vector<PartInstance *> 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();
}

View File

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

View File

@@ -123,22 +123,22 @@ void PartInstance::setParent(Instance* prnt)
{
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());
break;
}
cparent = cparent->getParent();
}
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);
break;
}
parent = parent->getParent();
cparent = cparent->getParent();
}
}
PartInstance::PartInstance(const PartInstance &oinst)

View File

@@ -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)