mirror of https://github.com/OpenMW/openmw.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
1.2 KiB
C++
33 lines
1.2 KiB
C++
#include "recastmesh.hpp"
|
|
#include "exceptions.hpp"
|
|
|
|
#include <Recast.h>
|
|
|
|
namespace DetourNavigator
|
|
{
|
|
Mesh::Mesh(std::vector<int>&& indices, std::vector<float>&& vertices, std::vector<AreaType>&& areaTypes)
|
|
{
|
|
if (indices.size() / 3 != areaTypes.size())
|
|
throw InvalidArgument("Number of flags doesn't match number of triangles: triangles="
|
|
+ std::to_string(indices.size() / 3) + ", areaTypes=" + std::to_string(areaTypes.size()));
|
|
indices.shrink_to_fit();
|
|
vertices.shrink_to_fit();
|
|
areaTypes.shrink_to_fit();
|
|
mIndices = std::move(indices);
|
|
mVertices = std::move(vertices);
|
|
mAreaTypes = std::move(areaTypes);
|
|
}
|
|
|
|
RecastMesh::RecastMesh(std::size_t generation, std::size_t revision, Mesh mesh, std::vector<Water> water)
|
|
: mGeneration(generation)
|
|
, mRevision(revision)
|
|
, mMesh(std::move(mesh))
|
|
, mWater(std::move(water))
|
|
{
|
|
if (mMesh.getVerticesCount() > 0)
|
|
rcCalcBounds(mMesh.getVertices().data(), static_cast<int>(mMesh.getVerticesCount()),
|
|
mBounds.mMin.ptr(), mBounds.mMax.ptr());
|
|
mWater.shrink_to_fit();
|
|
}
|
|
}
|