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