pioneer/src/CollMesh.cpp

73 lines
1.5 KiB
C++

// Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details
// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
#include "CollMesh.h"
#include "scenegraph/Serializer.h"
#include "collider/GeomTree.h"
//This simply stores the collision GeomTrees
//and AABB.
void CollMesh::Save(Serializer::Writer &wr) const
{
PROFILE_SCOPED()
wr.Vector3d(m_aabb.max);
wr.Vector3d(m_aabb.min);
wr.Double(m_aabb.radius);
m_geomTree->Save(wr);
wr.Int32(m_dynGeomTrees.size());
for (auto it : m_dynGeomTrees) {
it->Save(wr);
}
wr.Int32(m_totalTris);
}
void CollMesh::Load(Serializer::Reader &rd)
{
PROFILE_SCOPED()
m_aabb.max = rd.Vector3d();
m_aabb.min = rd.Vector3d();
m_aabb.radius = rd.Double();
m_geomTree = new GeomTree(rd);
const Uint32 numDynGeomTrees = rd.Int32();
m_dynGeomTrees.reserve(numDynGeomTrees);
for (Uint32 it = 0; it < numDynGeomTrees; ++it) {
m_dynGeomTrees.push_back(new GeomTree(rd));
}
m_totalTris = rd.Int32();
}
CollMesh::~CollMesh()
{
for (auto it = m_dynGeomTrees.begin(); it != m_dynGeomTrees.end(); ++it)
delete *it;
delete m_geomTree;
}
const std::vector<vector3f> &CollMesh::GetGeomTreeVertices() const
{
return m_geomTree->GetVertices();
}
const Uint32 *CollMesh::GetGeomTreeIndices() const
{
return m_geomTree->GetIndices();
}
const unsigned int *CollMesh::GetGeomTreeTriFlags() const
{
return m_geomTree->GetTriFlags();
}
unsigned int CollMesh::GetGeomTreeNumTris() const
{
return m_geomTree->GetNumTris();
}