00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00024 #ifndef _GRCARLIGHT_H_
00025 #define _GRCARLIGHT_H_
00026
00027 class ssgVtxTableCarlight : public ssgVtxTable
00028 {
00029 protected:
00030 int on ;
00031 float size;
00032 sgVec3 pos;
00033 double factor;
00034
00035 virtual void copy_from ( ssgVtxTableCarlight *src, int clone_flags ) ;
00036 public:
00037 virtual ssgBase *clone ( int clone_flags = 0 ) ;
00038 ssgVtxTableCarlight () ;
00039 ssgVtxTableCarlight ( ssgVertexArray *vtx,
00040 double s, sgVec3 p);
00041 int setSize (double s) { size=s ; return 0; }
00042 void setOnOff (int s) { on=s ; }
00043 int isOnOff () { return(on) ; }
00044 sgVec3 * getPos() { return(&pos);}
00045 void setFactor(double f){factor=f;}
00046
00047 void draw_geometry();
00048
00049
00050 virtual void drawHighlight ( sgVec4 colour ){ssgVtxTable::drawHighlight(colour);}
00051 virtual void drawHighlight ( sgVec4 colour, int i ){ssgVtxTable::drawHighlight(colour,i);}
00052
00053 virtual void pick ( int baseName ) { ssgVtxTable::pick(baseName);}
00054 virtual void transform ( const sgMat4 m ) { ssgVtxTable::transform(m);}
00055
00056 virtual void setVertices ( ssgVertexArray *vl ) { ssgVtxTable::setVertices(vl);}
00057 virtual void setNormals ( ssgNormalArray *nl ) { ssgVtxTable::setNormals(nl);}
00058 virtual void setTexCoords ( ssgTexCoordArray *tl ) { ssgVtxTable::setTexCoords(tl);}
00059 virtual void setColours ( ssgColourArray *cl ) { ssgVtxTable::setColours(cl);}
00060
00061 int getNumVertices () { return vertices -> getNum () ; }
00062 int getNumNormals () { return normals -> getNum () ; }
00063 int getNumColours () { return colours -> getNum () ; }
00064 int getNumTexCoords () { return texcoords -> getNum () ; }
00065 int getNumTriangles () { return ssgVtxTable::getNumTriangles();}
00066 void getTriangle ( int n, short *v1, short *v2, short *v3 ) { ssgVtxTable::getTriangle(n,v1,v2,v3);}
00067 int getNumLines () {return ssgVtxTable::getNumLines();}
00068 void getLine ( int n, short *v1, short *v2 ) { ssgVtxTable::getLine(n,v1,v2);}
00069
00070
00071 virtual ~ssgVtxTableCarlight (void);
00072
00073 virtual const char *getTypeName(void) { return ssgVtxTable::getTypeName();}
00074
00075 virtual void print ( FILE *fd = stderr, char *indent = "", int how_much = 2) { ssgVtxTable::print(fd,indent,how_much);}
00076 virtual int load ( FILE *fd ) {return ssgVtxTable::load(fd);}
00077 virtual int save ( FILE *fd ) {return ssgVtxTable::save(fd);}
00078
00079
00080 };
00081
00082 #define MAX_NUMBER_LIGHT 4+4+4+2
00083
00084
00085
00086
00087
00088
00089 #define LIGHT_TYPE_FRONT 1
00090 #define LIGHT_TYPE_FRONT2 2
00091 #define LIGHT_TYPE_REAR 3
00092 #define LIGHT_TYPE_REAR2 4
00093 #define LIGHT_TYPE_BRAKE 5
00094 #define LIGHT_TYPE_BRAKE2 6
00095 #define LIGHT_TYPE_REVERSE 7
00096 #define LIGHT_NO_TYPE 0
00097
00098 typedef struct tgrCarlight_t
00099 {
00100 ssgVtxTableCarlight * lightArray[MAX_NUMBER_LIGHT];
00101 ssgVtxTableCarlight * lightCurr[MAX_NUMBER_LIGHT];
00102 int lightType[MAX_NUMBER_LIGHT];
00103 int numberCarlight;
00104 ssgBranch *lightAnchor;
00105 }tgrCarlight;
00106
00107 extern void grInitCarlight(int index);
00108 extern void grAddCarlight(tCarElt *car, int type, sgVec3 pos, double size);
00109 extern void grUpdateCarlight(tCarElt *car, class cGrPerspCamera *curCam, int dispflag);
00110 extern void grShudownCarlight(void);
00111
00112
00113 #endif