blitz3d/blitz3d/terrainrep.h

55 lines
1.4 KiB
C++

#ifndef TERRAINREP_H
#define TERRAINREP_H
#include <queue>
#include "model.h"
struct TerrainRep{
public:
TerrainRep( int cell_shift );
~TerrainRep();
void clear();
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 );
int getSize()const;
float getHeight( int x,int z )const;
bool collide( const Line &line,float radius,Collision *curr_coll,const Transform &tform )const;
struct Tri;
struct Vert;
private:
struct Cell;
struct Error;
friend struct Tri;
friend struct Vert;
Cell *cells;
Error *errors;
gxMesh *mesh;
int cell_size,cell_shift,cell_mask;
int end_tri_id,detail,mesh_verts,mesh_tris;
bool morph,shading;
mutable bool errs_valid;
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;
};
#endif