blitz3d/blitz3d/model.h

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