#ifdef USE_SH_POOLS
public:
// Overload new/delete to use a SmartHeap
fixed size pool
void *operator new(size_t size)
{ ShiAssert( size == sizeof(FlightClass) ); return MemAllocFS(pool);
};
void operator delete(void *mem)
{ if (mem) MemFreeFS(mem); };
static void InitializeStorage()
{ pool = MemPoolInitFS( sizeof(FlightClass), 200, 0 ); };
static void ReleaseStorage()
{ MemPoolFree( pool ); };
static MEM_POOL pool;
#endif
private:
int
dirty_flight;
// Which elements are dirty
long
fuel_burnt;
// Amount of fuel used since takeoff
CampaignTime
last_move;
// Time we moved last
CampaignTime
last_combat;
// Last time this entity fired its weapons
CampaignTime
time_on_target;
// Time on target
CampaignTime
mission_over_time;
// Time off station/target
CampaignTime
last_enemy_lock_time;
// Last time an enemy locked us
VU_ID
mission_target;
// Our target, or flight we're attached to
VU_ID
assigned_target;
// Target we're supposed to IMMEDIATELY attack
VU_ID
enemy_locker;
// ID of enemy flight which is locking us
WayPointClass
override_wp;
// Divert waypoint or other overriding waypoint
LoadoutStruct
*loadout;
// A custom loadout from the Payload window
uchar
loadouts;
// Number of loadouts we have recorded (1 or # of ac)
uchar
mission;
// Unit's mission
uchar
old_mission;
// Previous mission, if we've been diverted
uchar
last_direction;
// Direction of last move
uchar
priority;
// Mission priority
uchar
mission_id;
// Our mission id
uchar
eval_flags;
// Mission evaluation flags
uchar
mission_context;
// Our mission context
VU_ID
package;
// Our parent package
VU_ID
squadron;
// Our parent squadron
VU_ID
requester;
// ID of entity requesting our mission
public:
uchar
slots[PILOTS_PER_FLIGHT]; // Which
vehicle slots this flight is using
uchar
pilots[PILOTS_PER_FLIGHT]; // Which squadron
pilots we're using
uchar
plane_stats[PILOTS_PER_FLIGHT]; // The status of this aircraft
uchar
player_slots[PILOTS_PER_FLIGHT];// Which player pilot is in this slot
uchar
last_player_slot;
// Slot # of last pilot in this slot
uchar
callsign_id;
// Index into callsign table
uchar
callsign_num;
// Locals
float
last_collision_x;
// Last point AWACS vectored us to
float
last_collision_y;
uchar
tacan_channel;
// Support for tankers
uchar
tacan_band;
// Support for tankers
// Access Functions
CampaignTime GetLastMove (void)
{ return last_move; }
CampaignTime GetLastCombat (void)
{ return last_combat; }
CampaignTime GetTimeOnTarget (void)
{ return time_on_target; }
CampaignTime GetMissionOverTime (void)
{ return mission_over_time; }
CampaignTime GetLastEnemyLockTime (void)
{ return last_enemy_lock_time; }
VU_ID GetAssignedTarget (void)
{ return assigned_target; }
VU_ID GetEnemyLocker (void)
{ return enemy_locker; }
WayPoint GetOverrideWP (void);
LoadoutStruct *GetLoadout (void)
{ return loadout; }
uchar GetLoadouts (void)
{ return loadouts; }
uchar GetOriginalMission (void)
{ return old_mission; }
uchar GetLastDirection (void)
{ return last_direction; }
uchar GetEvalFlags (void)
{ return eval_flags; }
uchar GetMissionContext (void)
{ return mission_context; }
VU_ID GetRequesterID (void)
{ return requester; }
void SetLastDirection (uchar);
void SetPackage (VU_ID);
void SetEvalFlag (uchar);
void SetAssignedTarget (VU_ID targetId);
void ClearAssignedTarget (void);
void SetOverrideWP (WayPoint w);
void MakeStoresDirty (void);
// Dirty Data
void ClearDirty (void);
void MakeFlightDirty (Dirty_Flight bits, Dirtyness score);
void WriteDirty (unsigned char **stream);
void ReadDirty (unsigned char **stream);
// Other Functions
FlightClass(int type, Unit parent, Unit squadron);
FlightClass(VU_BYTE **stream);
virtual ~FlightClass();
virtual int SaveSize (void);
virtual int Save (VU_BYTE **stream);
virtual VU_ERRCODE RemovalCallback();
// event Handlers
virtual VU_ERRCODE Handle(VuFullUpdateEvent *event);
// virtuals handled by flight.h
virtual int GetDeaggregationPoint (int slot, CampEntity *ent);
virtual int ShouldDeaggregate(void);
virtual int Reaction (CampEntity what, int zone, float range);
virtual int MoveUnit (CampaignTime time);
virtual int DoCombat (void);
virtual int ChooseTactic (void);
virtual int CheckTactic (int tid);
virtual int DetectOnMove (void);
virtual int ChooseTarget (void);
virtual int Real (void)
{ return 1; }
virtual int CollectWeapons(uchar* dam, MoveType m, uchar w[], uchar wc[],
int dist);
virtual CampaignTime UpdateTime (void)
{ return FLIGHT_MOVE_CHECK_INTERVAL*CampaignSeconds; }
virtual CampaignTime CombatTime (void)
{ return FLIGHT_COMBAT_CHECK_INTERVAL*CampaignSeconds; }
virtual int IsFlight (void)
{ return TRUE; }
virtual int GetDetectionRange (int mt);
virtual int GetRadarMode (void)
{ return FEC_RADAR_SEARCH_100; }
virtual int IsSPJamming (void);
virtual int IsAreaJamming (void);
virtual int HasSPJamming (void);
virtual int HasAreaJamming (void);
virtual int GetVehicleDeagData (SimInitDataClass *simdata, int remote);
virtual void SetUnitLastMove (CampaignTime t)
{ last_move = t; }
virtual void SetCombatTime (CampaignTime t)
{ last_combat = t; }
virtual void SetBurntFuel (long fuel)
{ fuel_burnt = fuel; }
virtual void SetUnitMission (uchar mis);
virtual void SetUnitPriority (int p)
{ priority
= (uchar)p; }
virtual void SetUnitMissionID (int id)
{ mission_id = (uchar)id; }
virtual void SetUnitMissionTarget (VU_ID id)
{ mission_target = id; }
virtual void SetUnitTOT (CampaignTime tot)
{ time_on_target = tot; }
virtual void SetUnitSquadron (VU_ID ID)
{ squadron = ID; }
//
virtual void SetUnitTakeoffSlot (int ts)
{ takeoff_slot = ts; }
virtual void SimSetLocation (float x, float y, float z);
virtual void GetRealPosition (float *x, float *y, float *z);
virtual void SimSetOrientation (float yaw, float pitch, float roll);
virtual void SetLoadout (LoadoutStruct *loadout, int count);
virtual void RemoveLoadout (void);
virtual LoadoutStruct *GetLoadout (int ac);
virtual int GetNumberOfLoadouts (void)
{ return loadouts; }
virtual CampaignTime GetMoveTime (void);
virtual CampaignTime GetCombatTime (void)
{ return (TheCampaign.CurrentTime>last_combat)? TheCampaign.CurrentTime
- last_combat:0; }
virtual int GetBurntFuel (void)
{ return fuel_burnt; }
virtual MissionTypeEnum GetUnitMission (void)
{ return (MissionTypeEnum)mission; }
virtual int GetUnitCurrentRole (void);
virtual int GetUnitPriority (void)
{ return (int)priority; }
virtual int GetUnitWeaponId (int hp, int slot);
virtual int GetUnitWeaponCount (int hp, int slot);
virtual int GetUnitMissionID (void)
{ return (int)mission_id; }
virtual CampEntity GetUnitMissionTarget (void)
{ return (CampEntity)vuDatabase->Find(mission_target); }
virtual VU_ID GetUnitMissionTargetID (void)
{ return mission_target; }
virtual CampaignTime GetUnitTOT (void)
{ return time_on_target; }
virtual Unit GetUnitSquadron (void)
{ return FindUnit(squadron); }
virtual VU_ID GetUnitSquadronID (void)
{ return squadron; }
virtual CampEntity GetUnitAirbase (void);
virtual VU_ID GetUnitAirbaseID (void);
//
virtual int GetUnitTakeoffSlot (void)
{ return (int)takeoff_slot; }
virtual int LoadWeapons (void *squadron, uchar *dam, MoveType mt, int num,
int type_flags, int guide_flags);
virtual int DumpWeapons (void);
virtual CampaignTime ETA (void);
virtual F4PFList GetKnownEmitters (void);
virtual int BuildMission (MissionRequestClass *mis);
virtual void GetUnitAssemblyPoint (int type, GridIndex *x, GridIndex *y);
virtual Unit GetUnitParent (void)
{ return (Unit)vuDatabase->Find(package); }
virtual VU_ID GetUnitParentID (void)
{ return package; }
virtual void SetUnitParent (Unit p)
{ SetPackage(p->Id()); }
virtual void IncrementTime (CampaignTime dt)
{ last_move += dt; }
virtual int GetBestVehicleWeapon (int,uchar*,MoveType,int,int*);
virtual void UseFuel (long);
// Core functions
int DetectVs (AircraftClass *ac, float *d, int *combat, int *spotted, int
*estr);
int DetectVs (CampEntity e, float *d, int *combat, int *spotted, int *estr);
PackageClass* GetUnitPackage (void)
{ return (PackageClass*)vuDatabase->Find(package); }
int PickRandomPilot (int seed);
int GetAdjustedPlayerSlot (int pslot);
int GetPilotSquadronID (int pilotSlot)
{ return pilots[pilotSlot]; }
PilotClass* GetPilotData (int pilotSlot);
int GetPilotID (int pilotSlot);
int GetPilotCallNumber (int pilot_slot);
uchar GetPilotVoiceID (int pilotSlot);
int GetPilotCount(void);
// Returns # of pilots in flight (including players)
int GetACCount(void);
// Returns # of aircraft in flight
int GetFlightLeadSlot (void);
// Returns slot of flightleader
int GetFlightLeadCallNumber (void);
// Returns the callnumber (1-36) of the flightleader
uchar GetFlightLeadVoiceID (void);
// Returns the voiceId of the flightleader
int GetAdjustedAircraftSlot(int aircraftNum);
long CalculateFuelAvailable (int aircraftNum);
int HasWeapons (void);
int HasFuel (void);
int CanAbort (void);
// returns 1 if don't have enough fuel or weapons
Flight GetAWACSFlight (void);
Flight GetJSTARFlight (void);
Flight GetFACFlight (void);
Flight GetTankerFlight(void);
int FindCollisionPoint (FalconEntity *target, vector *collPoint, int noAWACS);
void RegisterLock (FalconEntity *locker);
// Component accessers (Sim Flight emulators)
void SendComponentMessage (int command, VuEntity *sender);