00001 00009 #ifndef _CWEAPON_H 00010 #define _CWEAPON_H 00011 00012 class cWeapon; 00013 #include "cWorld.h" 00014 #include <list> 00015 #include <vector> 00016 00017 #include "cParticle.h" 00018 00025 class cWeapon { 00026 public: 00028 static int sInstances; 00030 static std::map<int,long> sTextures; 00031 00032 public: 00034 cObject* weaponOwner; 00036 float* weaponBasefv; 00038 float* weaponMountfv; 00040 float weaponPosef[16]; 00042 float weaponScale; 00044 float timeReloading; 00046 float timeReadying; 00048 float timeFiring; 00050 short remainingAmmo; 00052 short remainingClips; 00054 short clipSize; 00056 short depotSize; 00058 unsigned soundSource; 00060 std::list<cParticle*> shrapnelParticles; 00062 std::list<cParticle*> castoffParticles; 00064 std::list<cParticle*> missileParticles; 00066 std::list<cParticle*> damageParticles; 00067 00068 public: 00069 cWeapon(); 00070 00074 void playSource(); 00075 00079 void playSourceIfNotPlaying(); 00080 00094 virtual float fit(OID target) { 00095 return 0.5f; 00096 }; 00097 00102 virtual bool ready() { 00103 return !((timeReloading > +0.0f) 00104 || (timeReadying > +0.0f) 00105 || (timeFiring > +0.0f) 00106 || (remainingAmmo == 0) 00107 ); 00108 }; 00109 00113 virtual void fire(OID target) = 0; 00114 00118 virtual void animate(float spf) { 00119 }; 00120 00126 virtual void transform(); 00127 00131 virtual void drawSolid() { 00132 }; 00133 00137 virtual void drawEffect() { 00138 }; 00139 00144 virtual void drawHUD() { 00145 }; 00146 00150 int damageByParticle(float* worldpos, float radius, int roles, float damage); 00151 }; 00152 00156 class cMachineGun : public cWeapon { 00157 public: 00158 cMachineGun(); 00159 00160 virtual void fire(OID target); 00161 virtual void animate(float spf); 00162 virtual void drawSolid(); 00163 virtual void drawEffect(); 00164 virtual void drawHUD(); 00165 }; 00166 00170 class cPlasmaGun : public cWeapon { 00171 public: 00172 cPlasmaGun(); 00173 00174 virtual void fire(OID target); 00175 virtual void animate(float spf); 00176 virtual void drawSolid(); 00177 virtual void drawEffect(); 00178 virtual void drawHUD(); 00179 }; 00180 00184 class cSparkGun : public cWeapon { 00185 public: 00186 cSparkGun(); 00187 00188 virtual void fire(OID target); 00189 virtual void animate(float spf); 00190 virtual void drawSolid(); 00191 virtual void drawEffect(); 00192 virtual void drawHUD(); 00193 }; 00194 00198 class cRaybeam : public cWeapon { 00199 public: 00200 cRaybeam(); 00201 00202 virtual void fire(OID target); 00203 virtual void animate(float spf); 00204 virtual void drawSolid(); 00205 virtual void drawEffect(); 00206 virtual void drawHUD(); 00207 }; 00208 00212 class cHomingMissile : public cWeapon { 00213 public: 00214 cHomingMissile(); 00215 00216 virtual void fire(OID target); 00217 virtual void animate(float spf); 00218 virtual void drawSolid(); 00219 virtual void drawEffect(); 00220 virtual void drawHUD(); 00221 }; 00222 00226 class cExplosion : public cWeapon { 00227 public: 00228 cExplosion(); 00229 00230 virtual void fire(OID target); 00231 virtual void animate(float spf); 00232 virtual void drawSolid(); 00233 virtual void drawEffect(); 00234 }; 00235 00236 00237 #endif /* _CWEAPON_H */ 00238