DeleteCollider();
//delete wall objects
- for (int i = 0; i < (int)Walls.size(); i++)
- {
- if (Walls[i])
- {
- Walls[i]->parent_deleting = true;
- delete Walls[i];
- }
- Walls[i] = 0;
- }
+ DeleteWalls();
std::string nodename;
if (SceneNode)
if (prepared == true)
return;
- //exit if there's no submesh data
- if (Submeshes.size() == 0)
+ //clear vertex data and exit if there's no associated submesh or geometry data
+ if (Submeshes.size() == 0 || MeshGeometry.size() == 0)
+ {
+ delete MeshWrapper->sharedVertexData;
+ MeshWrapper->sharedVertexData = new Ogre::VertexData();
return;
+ }
Ogre::Real radius = 0;
Ogre::AxisAlignedBox box;
//set up vertex buffer
- OGRE_DELETE MeshWrapper->sharedVertexData;
+ delete MeshWrapper->sharedVertexData;
Ogre::VertexData* data = new Ogre::VertexData();
MeshWrapper->sharedVertexData = data;
data->vertexCount = MeshGeometry.size();
current_offset = next_offset;
}
}
+
+void MeshObject::DeleteWalls()
+{
+ //delete all wall objects
+
+ for (int i = 0; i < (int)Walls.size(); i++)
+ {
+ WallObject *wall = Walls[i];
+ if (wall)
+ {
+ wall->parent_deleting = true;
+ delete wall;
+ Walls[i] = 0;
+ }
+ }
+}
+
+void MeshObject::DeleteWalls(Object *parent)
+{
+ //delete walls of specified parent object
+
+ for (int i = 0; i < (int)Walls.size(); i++)
+ {
+ WallObject *wall = Walls[i];
+ if (wall)
+ {
+ if (wall->GetParent() == parent)
+ {
+ wall->parent_deleting = true;
+ wall->DeletePolygons();
+ delete wall;
+ Walls.erase(Walls.begin() + i);
+ i--;
+ }
+ }
+ }
+}
void GetMeshInformation(const Ogre::Mesh* const mesh, int &vertex_count, Ogre::Vector3* &vertices, int &index_count, unsigned long* &indices, float scale_multiplier, Ogre::AxisAlignedBox &extents);
void CreateColliderFromModel(int &vertex_count, Ogre::Vector3* &vertices, int &index_count, unsigned long* &indices);
void CreateBoxCollider(float scale_multiplier);
+ void DeleteWalls();
+ void DeleteWalls(Object *parent);
Ogre::MeshPtr MeshWrapper; //mesh
std::vector<Geometry> MeshGeometry; //mesh geometry (vertices/texels/normals) container