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 cObject* mOwner; 00029 00031 float* mBasefv; 00032 00034 float* mMountfv; 00035 00037 float mPosef[16]; 00038 00040 float mScale; 00041 00043 float mReloading; 00044 00046 float mReadying; 00047 00049 float mFiring; 00050 00052 short mAmmo; 00053 00055 short mClips; 00056 00058 short mClipsize; 00059 00061 short mDepotsize; 00062 00064 unsigned mSoundSource; 00065 00066 std::list<cParticle*> mShrapnels; 00067 std::list<cParticle*> mCastoff; 00068 std::list<cParticle*> mMissiles; 00069 std::list<cParticle*> mDamages; 00070 00071 public: 00072 cWeapon(); 00073 00074 void playSource(); 00075 void playSourceIfNotPlaying(); 00076 00090 virtual float fit(OID target) { 00091 return 0.5f; 00092 }; 00093 00098 virtual bool ready() { 00099 return !((mReloading > +0.0f) 00100 || (mReadying > +0.0f) 00101 || (mFiring > +0.0f) 00102 || (mAmmo == 0) 00103 ); 00104 }; 00105 00109 virtual void fire(OID target) = 0; 00110 00114 virtual void animate(float spf) { 00115 }; 00116 00122 virtual void transform(); 00123 00127 virtual void drawSolid() { 00128 }; 00129 00133 virtual void drawEffect() { 00134 }; 00135 00140 virtual void drawHUD() { 00141 }; 00142 00146 int damageByParticle(float* worldpos, float radius, int roles, float damage); 00147 }; 00148 00152 class cMachineGun : public cWeapon { 00153 public: 00154 cMachineGun(); 00155 00156 virtual void fire(OID target); 00157 virtual void animate(float spf); 00158 virtual void drawSolid(); 00159 virtual void drawEffect(); 00160 virtual void drawHUD(); 00161 }; 00162 00166 class cPlasmaGun : public cWeapon { 00167 public: 00168 cPlasmaGun(); 00169 00170 virtual void fire(OID target); 00171 virtual void animate(float spf); 00172 virtual void drawSolid(); 00173 virtual void drawEffect(); 00174 virtual void drawHUD(); 00175 }; 00176 00180 class cSparkGun : public cWeapon { 00181 public: 00182 cSparkGun(); 00183 00184 virtual void fire(OID target); 00185 virtual void animate(float spf); 00186 virtual void drawSolid(); 00187 virtual void drawEffect(); 00188 virtual void drawHUD(); 00189 }; 00190 00194 class cRaybeam : public cWeapon { 00195 public: 00196 cRaybeam(); 00197 00198 virtual void fire(OID target); 00199 virtual void animate(float spf); 00200 virtual void drawSolid(); 00201 virtual void drawEffect(); 00202 virtual void drawHUD(); 00203 }; 00204 00208 class cHomingMissile : public cWeapon { 00209 public: 00210 cHomingMissile(); 00211 00212 virtual void fire(OID target); 00213 virtual void animate(float spf); 00214 virtual void drawSolid(); 00215 virtual void drawEffect(); 00216 virtual void drawHUD(); 00217 }; 00218 00222 class cExplosion : public cWeapon { 00223 public: 00224 cExplosion(); 00225 00226 virtual void fire(OID target); 00227 virtual void animate(float spf); 00228 virtual void drawSolid(); 00229 virtual void drawEffect(); 00230 }; 00231 00232 00233 #endif /* _CWEAPON_H */ 00234