f8/cpp/inputgeom.h
aozhiwei a82a78407b 1
2022-07-21 15:23:06 +08:00

65 lines
2.0 KiB
C++

#pragma once
struct rcChunkyTriMeshNode
{
float bmin[2];
float bmax[2];
int i;
int n;
};
struct rcChunkyTriMesh
{
inline rcChunkyTriMesh() : nodes(0), nnodes(0), tris(0), ntris(0), maxTrisPerChunk(0) {};
inline ~rcChunkyTriMesh() { delete [] nodes; delete [] tris; }
rcChunkyTriMeshNode* nodes;
int nnodes;
int* tris;
int ntris;
int maxTrisPerChunk;
private:
// Explicitly disabled copy constructor and copy assignment operator.
rcChunkyTriMesh(const rcChunkyTriMesh&);
rcChunkyTriMesh& operator=(const rcChunkyTriMesh&);
};
namespace f8
{
class InputGeom
{
public:
void Init(float width, float height);
const float* GetMeshBoundsMin() const { return min_; }
const float* GetMeshBoundsMax() const { return max_; }
const float* GetVerts() const { return !verts_.empty() ? &verts_[0] : nullptr; }
int GetVertCount() const { return verts_.size() / 3; }
const int* GetTris() const { return !tris_.empty() ? &tris_[0] : nullptr; }
int GetTriCount() const { return tris_.size() / 3; }
const rcChunkyTriMesh* GetChunkyMesh() { return &chunky_mesh_; }
int GetOffMeshConnectionCount() const { return 0; }
const float* GetOffMeshConnectionVerts() const { return nullptr; }
const float* GetOffMeshConnectionRads() const { return nullptr; }
const unsigned char* GetOffMeshConnectionDirs() const { return nullptr; }
const unsigned char* GetOffMeshConnectionAreas() const { return nullptr; }
const unsigned short* GetOffMeshConnectionFlags() const { return nullptr; }
const unsigned int* GetOffMeshConnectionId() const { return 0; }
private:
float min_[3] = {0};
float max_[3] = {0};
std::vector<float> verts_;
std::vector<int> tris_;
rcChunkyTriMesh chunky_mesh_;
};
}
int rcGetChunksOverlappingRect(const rcChunkyTriMesh* cm,
float bmin[2], float bmax[2],
int* ids, const int maxIds);