1 enum { MDL_MD2
= 1, MDL_MD3
};
6 bool collide
, ellipsecollide
, cullface
, shadow
;
10 vec bbcenter
, bbradius
;
11 float eyeheight
, collideradius
, collideheight
;
14 model() : spin(0), collide(true), ellipsecollide(false), cullface(true), shadow(true), scale(1.0f
), translate(0, 0, 0), bih(0), bbcenter(0, 0, 0), bbradius(0, 0, 0), eyeheight(0.9f
), collideradius(0), collideheight(0), batch(-1) {}
15 virtual ~model() { DELETEP(bih
); }
16 virtual void calcbb(int frame
, vec
¢er
, vec
&radius
) = 0;
17 virtual void extendbb(int frame
, vec
¢er
, vec
&radius
, modelattach
&a
) {}
18 virtual void render(int anim
, int varseed
, float speed
, int basetime
, const vec
&o
, float yaw
, float pitch
, dynent
*d
, modelattach
*a
= NULL
, const vec
&color
= vec(0, 0, 0), const vec
&dir
= vec(0, 0, 0)) = 0;
19 virtual void setskin(int tex
= 0) = 0;
20 virtual bool load() = 0;
21 virtual char *name() = 0;
22 virtual int type() = 0;
23 virtual BIH
*setBIH() { return 0; }
24 virtual bool envmapped() { return false; }
26 virtual void setshader(Shader
*shader
) {}
27 virtual void setenvmap(float envmapmin
, float envmapmax
, Texture
*envmap
) {}
28 virtual void setspec(float spec
) {}
29 virtual void setambient(float ambient
) {}
30 virtual void setglow(float glow
) {}
31 virtual void setalphatest(float alpha
) {}
32 virtual void setalphablend(bool blend
) {}
33 virtual void settranslucency(float translucency
) {}
34 virtual void setfullbright(float fullbright
) {}
36 virtual void startrender() {}
37 virtual void endrender() {}
39 void boundbox(int frame
, vec
¢er
, vec
&radius
, modelattach
*a
= NULL
)
41 if(frame
) calcbb(frame
, center
, radius
);
44 if(bbradius
.iszero()) calcbb(0, bbcenter
, bbradius
);
48 if(a
) for(int i
= 0; a
[i
].name
; i
++) if(a
[i
].m
) extendbb(frame
, center
, radius
, a
[i
]);
51 void collisionbox(int frame
, vec
¢er
, vec
&radius
)
53 boundbox(frame
, center
, radius
);
56 center
[0] = center
[1] = 0;
57 radius
[0] = radius
[1] = collideradius
;
61 center
[2] = radius
[2] = collideheight
/2;
65 float boundsphere(int frame
, vec
¢er
, modelattach
*a
= NULL
)
68 boundbox(frame
, center
, radius
, a
);
69 return radius
.magnitude();
72 float above(int frame
= 0)
75 boundbox(frame
, center
, radius
);
76 return center
.z
+radius
.z
;