Files
BlitzNext/Runtime/blitz3d/terrainrep.hpp
T

57 lines
1.5 KiB
C++
Raw Normal View History

2014-01-31 08:23:00 +13:00
#ifndef TERRAINREP_H
#define TERRAINREP_H
#include <queue>
2019-01-18 15:55:06 +01:00
#include "model.hpp"
2014-01-31 08:23:00 +13:00
2019-01-18 17:04:17 +01:00
struct TerrainRep {
public:
TerrainRep(int cell_shift);
2014-01-31 08:23:00 +13:00
~TerrainRep();
2019-01-18 17:04:17 +01:00
2014-01-31 08:23:00 +13:00
void clear();
2019-01-18 17:04:17 +01:00
void setShading(bool shading);
void setDetail(int n, bool morph);
void setHeight(int x, int z, float h, bool realtime);
void setTile(int x, int z, const Brush& brush);
void render(Model* model, const RenderContext& rc);
2014-01-31 08:23:00 +13:00
2019-01-18 17:04:17 +01:00
int getSize() const;
float getHeight(int x, int z) const;
bool collide(const Line& line, float radius, Collision* curr_coll, const Transform& tform) const;
2014-01-31 08:23:00 +13:00
struct Tri;
struct Vert;
2019-01-18 17:04:17 +01:00
private:
2014-01-31 08:23:00 +13:00
struct Cell;
struct Error;
friend struct Tri;
friend struct Vert;
2019-01-18 17:04:17 +01:00
Cell* cells;
Error* errors;
gxMesh* mesh;
2014-01-31 08:23:00 +13:00
2019-01-18 17:04:17 +01:00
int cell_size, cell_shift, cell_mask;
int end_tri_id, detail, mesh_verts, mesh_tris;
bool morph, shading;
2014-01-31 08:23:00 +13:00
mutable bool errs_valid;
2019-01-18 17:04:17 +01:00
void insert(Tri* t);
void split(Tri* t);
void validateErrs() const;
Vector getNormal(int x, int z) const;
Error calcErr(int id, const Vert& v0, const Vert& v1, const Vert& v2) const;
Error calcErr(int id, int x, int z, const Vert& v0, const Vert& v1, const Vert& v2) const;
bool collide(const Line& line, Collision* curr_coll, const Transform& tform, int id, const Vert& v0, const Vert& v1,
const Vert& v2, const Line& l) const;
bool collide(const Line& line, float radius, Collision* curr_coll, const Transform& tform, int id, const Vert& v0,
const Vert& v1, const Vert& v2, const Box& box) const;
2014-01-31 08:23:00 +13:00
};
#endif