00001
00008 #ifndef _CWEAPON_H
00009 #define _CWEAPON_H
00010
00011 class cWeapon;
00012 #include "cWorld.h"
00013 #include <list>
00014 #include <vector>
00015
00022 class cWeapon {
00023 public:
00025 cObject* mOwner;
00026
00028 float* mBasefv;
00029
00031 float* mMountfv;
00032
00034 float mPosef[16];
00035
00037 float mScale;
00038
00040 float mReloading;
00041
00043 float mReadying;
00044
00046 float mFiring;
00047
00049 short mAmmo;
00050
00052 short mClips;
00053
00055 short mClipsize;
00056
00058 short mDepotsize;
00059
00061 unsigned mSoundSource;
00062
00071 struct Particle {
00073 std::vector<float> pos;
00075 std::vector<float> vel;
00077 float fuel;
00079 float timer;
00081 float spawn;
00083 OID target;
00085 int type;
00087 void* data;
00089 std::list<Particle*> trail;
00090
00091 Particle() :
00092 pos(3), vel(3), fuel(1), timer(0),
00093 spawn(-1), target(0), type(0), data(NULL) {
00094 };
00095 };
00096
00097 std::list<cWeapon::Particle*> mShrapnels;
00098 std::list<cWeapon::Particle*> mCastoff;
00099 std::list<cWeapon::Particle*> mMissiles;
00100 std::list<cWeapon::Particle*> mDamages;
00101
00102 public:
00103 cWeapon();
00104
00105 void playSource();
00106 void playSourceIfNotPlaying();
00107
00121 virtual float fit(OID target) {
00122 return 0.5f;
00123 };
00124
00129 virtual bool ready() {
00130 return !((mReloading > +0.0f)
00131 || (mReadying > +0.0f)
00132 || (mFiring > +0.0f)
00133 || (mAmmo == 0)
00134 );
00135 };
00136
00140 virtual void fire(OID target) = 0;
00141
00145 virtual void animate(float spf) {
00146 };
00147
00153 virtual void transform();
00154
00158 virtual void drawSolid() {
00159 };
00160
00164 virtual void drawEffect() {
00165 };
00166
00171 virtual void drawHUD() {
00172 };
00173
00179
00180
00181 int damageByParticle(float* worldpos, float radius, int roles, float damage);
00182 };
00183
00187 class cMachineGun : public cWeapon {
00188 public:
00189 cMachineGun();
00190
00191 virtual void fire(OID target);
00192 virtual void animate(float spf);
00193 virtual void drawSolid();
00194 virtual void drawEffect();
00195 virtual void drawHUD();
00196 };
00197
00201 class cPlasmaGun : public cWeapon {
00202 public:
00203 cPlasmaGun();
00204
00205 virtual void fire(OID target);
00206 virtual void animate(float spf);
00207 virtual void drawSolid();
00208 virtual void drawEffect();
00209 virtual void drawHUD();
00210 };
00211
00215 class cSparkGun : public cWeapon {
00216 public:
00217 cSparkGun();
00218
00219 virtual void fire(OID target);
00220 virtual void animate(float spf);
00221 virtual void drawSolid();
00222 virtual void drawEffect();
00223 virtual void drawHUD();
00224 };
00225
00229 class cRaybeam : public cWeapon {
00230 public:
00231 cRaybeam();
00232
00233 virtual void fire(OID target);
00234 virtual void animate(float spf);
00235 virtual void drawSolid();
00236 virtual void drawEffect();
00237 virtual void drawHUD();
00238 };
00239
00243 class cHomingMissile : public cWeapon {
00244 public:
00245 cHomingMissile();
00246
00247 virtual void fire(OID target);
00248 virtual void animate(float spf);
00249 virtual void drawSolid();
00250 virtual void drawEffect();
00251 virtual void drawHUD();
00252 };
00253
00257 class cExplosion : public cWeapon {
00258 public:
00259 cExplosion();
00260
00261 virtual void fire(OID target);
00262 virtual void animate(float spf);
00263 virtual void drawSolid();
00264 virtual void drawEffect();
00265 };
00266
00267
00268 #endif
00269