The SimMissileClass

Superclasses

VuEntity

FalconEntity

Other Subclasses: CampBaseClass , SimBaseClass,TeamClass

SimBaseClass

Other Subclasses:   SimStaticClass

SimMoverClass

Other Subclasses :, SimVehicleClass, EjectedPilotClass

SimWeaponClass

Other Subclasses: BombClass,GunClass
SimMissileClass

MissileClass


 public:
      MissileClass (VU_BYTE** stream);
      MissileClass (FILE* filePtr);
      MissileClass (int type);
      virtual ~MissileClass (void);

      enum MissileFlags {
         EndGame             = 0x1,
         ClosestApprch       = 0x2,
         SensorLostLock      = 0x4,
      };

      int Flags (void) {return flags;};
      enum FlightState {PreLaunch, Launching, InFlight};
      enum DisplayType {DisplayNone, DisplayBW, DisplayIR, DisplayColor, DisplayHTS};
      int GetDisplayType (void) { return inputData->displayType;};
      int GetSeekerType (void) { return inputData->seekerType;};

      DrawableTrail *trail;
      Drawable2D *engGlow;
      Drawable2D *groundGlow;
      DrawableBSP *engGlowBSP1;
      DrawableClass* display;
      SimBaseClass* slaveTgt;
      FalconMissileEndMessage::MissileEndCode done;
      FlightState launchState;
      int isCaged;
      float alpha, alphat, beta;
      float x, y, z, alt;
      float xdot, ydot, zdot;
      float theta, phi, psi;
          float groundZ;
          int lastRmaxAta;
          int lastRmaxAlt, lastRmaxVt;

      void Init (void);
      virtual void Init (SimInitDataClass* initData);
      int Exec (void);
      void GetTransform(TransformMatrix vmat);
                void Start (SimObjectType* tgt);
      void UpdateTargetData(void);
      void SetTarget (SimObjectType* tgt);
      void ClearReferences (void);
      void DropTarget (void);
      int  SetSeekerPos(float* az, float* el);
      void GetSeekerPos(float* az, float* el);
      void RunSeeker (void);
      void InitTrail (void);
      void UpdatePosition (void);
      void SetTargetPosition (float newX, float newY, float newZ) {
         targetX = newX; targetY = newY; targetZ = newZ;};
      void GetTargetPosition (float* newX, float* newY, float* newZ) {
         *newX = targetX; *newY = targetY; *newZ = targetZ;};
      void SetTargetVelocity (float newDX, float newDY, float newDZ) {
         targetDX = newDX; targetDY = newDY; targetDZ = newDZ;};
      void GetTargetVelocity (float* newDX, float* newDY, float* newDZ) {
         *newDX = targetDX; *newDY = targetDY; *newDZ = targetDZ;};
                float GetRMax (float alt, float vt, float az, float targetVt, float ataFrom);
                float GetRMin (float alt, float vt, float ataFrom, float targetVt);
                float GetRNe  (float alt, float vt, float ataFrom, float targetVt);
                float GetTOF  (float alt, float vt, float ataFrom, float targetVt, float range);
                float GetASE  (float alt, float vt, float ataFrom, float targetVt, float range);
                float GetActiveTime(float alt, float vt, float ataFrom, float targetVt, float range);
                float GetActiveRange(float alt, float vt, float ataFrom, float targetVt, float range);
      void SetLaunchPosition (float nx, float ny, float nz) {initXLoc = nx; initYLoc = ny; initZLoc = nz;};
      void SetLaunchRotation (float az, float el) {initAz = az; initEl = el;};
      void SetLaunchData (void);
      void SetDead (int);
      virtual int Sleep (void);
      virtual int Wake (void);
      virtual void SetVuPosition (void);
      virtual int IsMissile (void) { return TRUE; };
          BOOL FindRocketGroundImpact ( float *impactX,
                                                                        float *impactY,
                                                                        float *impactZ,
                                                                        float *impactTime );

private:

      // Performance Data
      float weight, wprop, mass;
      float m0, mp0, mprop;

      MissileAeroData    *aeroData;
      MissileInputData   *inputData;
      MissileRangeData   *rangeData;
      MissileEngineData  *engineData;

      int flags;
      float runTime;
      float vt, vtdot, mach, rho, ps, vcas;

      float targetX,  targetY,  targetZ;
      float targetDX, targetDY, targetDZ;

      // Launch Data
      float initXLoc, initYLoc, initZLoc;
      float initAz, initEl;
      float gimbal, gimdot, ataerr;
      float ata;
      float p, q, r;
      float timpct,ricept;
      float range ;

          // pointer to class for in flight data
       MissileInFlightData   *ifd;
 

      // Functions
      void Accelerometers(void);
      void Aerodynamics (void);
      void Atmosphere (void);
      void ClosestApproach (void);
      void CommandGuide(void);
      void Engine(void);
      void EquationsOfMotion(void);
      void Flight(void);
      void FlightControlSystem(void);
      void FlyMissile(void);
      void Gains(void);
          void GoActive(void);
      void Init1(void);
      void Init2(void);
      void Launch (void);
      void LimitSeeker(void);
      void Pitch(void);
      void ReadAero(int idx);
      void ReadEngine(int idx);
      void ReadInput(int idx);
      void ReadRange(int idx);
      void ReadDegrade(int idx);
      void SetStatus(void);
      void Trigenometry (void);
      void Yaw(void);
      void UpdateTrail (void);
      void RemoveTrail (void);
      void InitData (void);
          void EndMissile( void );
          void ApplyProximityDamage( void );

#ifdef USE_SH_POOLS
   public:
      // Overload new/delete to use a SmartHeap fixed size pool
      void *operator new(size_t size) { ShiAssert( size == sizeof(MissileClass) ); return MemAllocFS(pool);     };
      void operator delete(void *mem) { if (mem) MemFreeFS(mem); };
      static void InitializeStorage()   { pool = MemPoolInitFS( sizeof(MissileClass), 200, 0 ); };
      static void ReleaseStorage()      { MemPoolFree( pool ); };
      static MEM_POOL   pool;
#endif