92 lines
2.3 KiB
C++
92 lines
2.3 KiB
C++
|
|
#ifndef MODEL_H
|
|
#define MODEL_H
|
|
|
|
#include "brush.h"
|
|
#include "object.h"
|
|
#include "rendercontext.h"
|
|
|
|
class Sprite;
|
|
class Terrain;
|
|
class PlaneModel;
|
|
class Q3BSPModel;
|
|
|
|
class Model : public Object{
|
|
public:
|
|
enum{
|
|
RENDER_SPACE_LOCAL=0,
|
|
RENDER_SPACE_WORLD=1
|
|
};
|
|
enum{
|
|
COLLISION_GEOMETRY_DEFAULT=0,
|
|
COLLISION_GEOMETRY_TRIS=1,
|
|
COLLISION_GEOMETRY_BOX=2,
|
|
COLLISION_GEOMETRY_SPHERE=3
|
|
};
|
|
enum{
|
|
QUEUE_OPAQUE=0,
|
|
QUEUE_TRANSPARENT=1
|
|
};
|
|
|
|
Model();
|
|
Model( const Model &m );
|
|
|
|
//Entity interface
|
|
Model *getModel(){ return this; }
|
|
|
|
//Object interface
|
|
void capture();
|
|
bool beginRender( float tween );
|
|
|
|
//Model interface
|
|
virtual void setRenderBrush( const Brush &b ){}
|
|
virtual bool render( const RenderContext &rc ){ return false; }
|
|
virtual void renderQueue( int type );
|
|
|
|
virtual Sprite *getSprite(){ return 0; }
|
|
virtual Terrain *getTerrain(){ return 0; }
|
|
virtual PlaneModel *getPlaneModel(){ return 0; }
|
|
virtual MeshModel *getMeshModel(){ return 0; }
|
|
virtual MD2Model *getMD2Model(){ return 0; }
|
|
virtual Q3BSPModel *getBSPModel(){ return 0; }
|
|
|
|
virtual void setBrush( const Brush &b ){ brush=b;w_brush=true; }
|
|
virtual void setColor( const Vector &c ){ brush.setColor(c);w_brush=true; }
|
|
virtual void setAlpha( float a ){ brush.setAlpha(a);w_brush=true; }
|
|
virtual void setShininess( float t ){ brush.setShininess(t);w_brush=true; }
|
|
virtual void setTexture( int i,const Texture &t,int f ){ brush.setTexture(i,t,f);w_brush=true; }
|
|
virtual void setBlend( int n ){ brush.setBlend(n);w_brush=true; }
|
|
virtual void setFX( int n ){ brush.setFX(n);w_brush=true; }
|
|
|
|
const Brush &getBrush()const{ return brush; }
|
|
|
|
void setRenderSpace( int n ){ space=n; }
|
|
int getRenderSpace()const{ return space; }
|
|
|
|
void setAutoFade( float nr,float fr ){ auto_fade_nr=nr;auto_fade_fr=fr;auto_fade=true; }
|
|
|
|
bool doAutoFade( const Vector &eye );
|
|
|
|
void enqueue( gxMesh *mesh,int first_vert,int vert_cnt,int first_tri,int tri_cnt );
|
|
void enqueue( gxMesh *mesh,int first_vert,int vert_cnt,int first_tri,int tri_cnt,const Brush &b );
|
|
|
|
int queueSize( int type )const{ return queues[type].size(); }
|
|
|
|
private:
|
|
class MeshQueue;
|
|
|
|
int space;
|
|
Brush brush,render_brush;
|
|
|
|
mutable bool w_brush;
|
|
float captured_alpha,tweened_alpha;
|
|
|
|
bool auto_fade;
|
|
float auto_fade_nr,auto_fade_fr;
|
|
|
|
vector<MeshQueue*> queues[2];
|
|
|
|
void enqueue( MeshQueue *q );
|
|
};
|
|
|
|
#endif |