Fixed models crashing game
This commit is contained in:
@@ -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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user