00001
00008 #ifndef _CMECH_H
00009 #define _CMECH_H
00010
00011 class cMech;
00012
00013 #include "cObject.h"
00014 #include "cWeapon.h"
00015 #include "cComcom.h"
00016
00017 #include <vector>
00018
00019 class cWeapon;
00020
00021
00022 #define MECH_CHASSIS_LR_AXIS AX_LR1
00023 #define MECH_TURRET_LR_AXIS AX_LR2
00024 #define MECH_TURRET_UD_AXIS AX_UD2
00025 #define MECH_THROTTLE_AXIS AX_UD1
00026
00027 #define MECH_FIRE_BUTTON BT_R2
00028
00029 #define MECH_JET_BUTTON BT_L2
00030 #define MECH_CAMERA_BUTTON BT_DELTA
00031
00036 class cMech : public cObject {
00037 friend class cWepcom;
00038 friend class cForcom;
00039 protected:
00040
00042
00043 enum Rotators {
00044 CTorsor, LUpLeg, RUpLeg, LLoLeg, RLoLeg, MAX_ROTATORS
00045 };
00046
00048
00049 enum {
00050 MAX_CAMERAMODES = 6
00051 };
00052
00054
00055 enum Jumpstates {
00056 GROUNDED = 0,
00057 FALLING = 1,
00058 JUMPING = 2,
00059 JETTING = 3
00060 };
00061
00062 protected:
00063
00065 static int sInstances;
00066
00068 static long sTextures[1];
00069
00070 protected:
00071 std::vector<cWeapon*> mWeapons;
00072 int mCurrentWeapon;
00073
00074
00075 float mTwr[3];
00076
00077
00078 float mJetOn;
00079
00080
00081 float mThrottle;
00082
00083
00084 int mJumpstate;
00085 float mGndstick;
00086
00087
00088 float mRotators[MAX_ROTATORS][3];
00089
00090
00091 float mHead[16];
00092 float mCenter[16];
00093 float mBack[16];
00094 float mLeft[16];
00095 float mRight[16];
00096 float mRightupper[16];
00097 float mRightlower[16];
00098 float mLeftupper[16];
00099 float mLeftlower[16];
00100
00102 int mCameraState;
00103
00104 cExplosion mExplosion;
00105
00106 unsigned int mSoundSource;
00107
00108 cComcom* mComcom;
00109 cTarcom* mTarcom;
00110 cSyscom* mSyscom;
00111 cWepcom* mWepcom;
00112 cForcom* mForcom;
00113 cNavcom* mNavcom;
00114
00115 float mScale;
00116
00117 public:
00118 cMech(float* pos = NULL, float* rot = NULL);
00119 ~cMech();
00120
00121 virtual void onSpawn();
00122
00123 void multEyeMatrix();
00124 void setAsAudioListener();
00125
00126 void animatePhysics(float spf);
00127 void poseRunning(float spf);
00128 void poseJumping(float spf);
00129
00130 void ChassisLR(float radians);
00131 void ChassisUD(float radians);
00132 float TowerLR(float radians);
00133 void TowerUD(float radians);
00134
00135 void fireAllWeapons();
00136 void fireWeapon(unsigned n);
00137 void mountWeapon(char* point, cWeapon *weapon, bool add = true);
00138
00139 virtual void animate(float spf);
00140 virtual void transform();
00141 virtual void drawSolid();
00142 virtual void drawEffect();
00143 virtual void drawHUD();
00144
00145 virtual rImpact* damageByBeam(float* a, float* dir, float radius, float damage, bool all);
00146
00147 virtual void damageByParticle(float* localpos, float damage);
00148 virtual float constrainParticle(float* worldpos, float radius = 0.0f, float* localpos = NULL);
00149 float constrainParticleToWorld(float* worldpos, float radius = 0.0f);
00150 public:
00151
00152 virtual OID enemyNearby();
00153
00154
00155 virtual float inDestinationRange();
00156 virtual float inMeeleRange();
00157 virtual float inWeaponRange();
00158 virtual float inTargetRange();
00159
00160
00161 virtual void do_moveTowards();
00162 virtual void do_moveNear();
00163 virtual void do_aimAt();
00164 virtual void do_fireAt();
00165 virtual void do_idle();
00166 virtual void do_aimFor(OID target);
00167 virtual void do_moveFor(float* dest);
00168 };
00169
00170
00171 #endif
00172