diff --git a/Projects/Engine/Header/App/V8/DataModel/PartInstance.hpp b/Projects/Engine/Header/App/V8/DataModel/PartInstance.hpp index 4e96971..f37f35e 100644 --- a/Projects/Engine/Header/App/V8/DataModel/PartInstance.hpp +++ b/Projects/Engine/Header/App/V8/DataModel/PartInstance.hpp @@ -54,6 +54,7 @@ namespace RNR std::string mesh_id; public: PartInstance(); + ~PartInstance(); void updateMatrix(); PartSurfaceInfo& getSurface(NormalId normal) { return m_surfaces[normal]; }; diff --git a/Projects/Engine/Header/App/V8/DataModel/Workspace.hpp b/Projects/Engine/Header/App/V8/DataModel/Workspace.hpp index 2e99f96..0a3dba0 100644 --- a/Projects/Engine/Header/App/V8/DataModel/Workspace.hpp +++ b/Projects/Engine/Header/App/V8/DataModel/Workspace.hpp @@ -25,6 +25,7 @@ namespace RNR public: Workspace(); + WorkspaceBatchingMode getBatchMode() { return m_batchMode; } virtual std::string getClassName() { return "Workspace"; } virtual void onDescendantAdded(RNR::Instance* childAdded); virtual void onDescendantRemoved(RNR::Instance* childRemoved); diff --git a/Projects/Engine/Source/App/V8/DataModel/PartInstance.cpp b/Projects/Engine/Source/App/V8/DataModel/PartInstance.cpp index 11c286b..9a712dc 100644 --- a/Projects/Engine/Source/App/V8/DataModel/PartInstance.cpp +++ b/Projects/Engine/Source/App/V8/DataModel/PartInstance.cpp @@ -66,6 +66,11 @@ namespace RNR updateMatrix(); } + PartInstance::~PartInstance() + { + getNode()->removeAndDestroyAllChildren(); + } + void PartInstance::updateMatrix() { m_matrix = m_cframe.getMatrix(); diff --git a/Projects/Engine/Source/App/V8/DataModel/Workspace.cpp b/Projects/Engine/Source/App/V8/DataModel/Workspace.cpp index 3f8fca7..6b7ee86 100644 --- a/Projects/Engine/Source/App/V8/DataModel/Workspace.cpp +++ b/Projects/Engine/Source/App/V8/DataModel/Workspace.cpp @@ -84,7 +84,14 @@ namespace RNR { PartInstance* part = dynamic_cast(childRemoved); if(part) + { + if(m_batchMode == BATCH_INSTANCED) + { + Ogre::InstancedEntity* entity = (Ogre::InstancedEntity*)part->getObject(); + world->getOgreSceneManager()->destroyInstancedEntity(entity); + } world->getComPlicitNgine()->deletePhysicsPart(part); + } m_geomDirty = true; } diff --git a/Projects/Engine/Source/App/V8/World/World.cpp b/Projects/Engine/Source/App/V8/World/World.cpp index 5f23ad3..52e7d35 100644 --- a/Projects/Engine/Source/App/V8/World/World.cpp +++ b/Projects/Engine/Source/App/V8/World/World.cpp @@ -56,13 +56,13 @@ namespace RNR start_cam->setParent(m_workspace); m_workspace->setCurrentCamera(start_cam); - PartInstance* baseplate = new PartInstance(); + /*PartInstance* baseplate = new PartInstance(); baseplate->setName("Baseplate"); baseplate->getCFrame().setPosition(Ogre::Vector3(0, -64, 0)); baseplate->setSize(Ogre::Vector3(512, 1, 512)); baseplate->setBrickColor(2); baseplate->setAnchored(true); - baseplate->setParent(m_workspace); + baseplate->setParent(m_workspace);*/ } World::~World() @@ -109,13 +109,6 @@ namespace RNR { m_refs.clear(); - Instance* baseplate = m_workspace->findFirstChild("Baseplate"); - if(baseplate) - { - baseplate->setParent(NULL); - delete baseplate; - } - JointsService* joints = (JointsService*)m_datamodel->getService("JointsService"); Camera* old_camera = m_workspace->getCurrentCamera(); if(old_camera)