The Fire Controle Computer

Superclass:

DrawableClass


FCC

public:
        enum FCCMasterMode {Gun, Missile, ILS, Nav, AirGroundBomb, AirGroundMissile, AirGroundHARM, AirGroundLaser, Dogfight,
                MissileOverride, AirGroundCamera/* PrevMode, NextModeCmd */ };
        enum FCCSubMode {EEGS, LCOS, Snapshot, SAM, Aim9, Aim120, CCIP, CCRP, LADD, DTOSS, RCKT, STRAF, PRE,
                BSGT, SLAVE, HTS, TargetingPod, TimeToGo, ETE, ETA, /* PrevSub, NextSub */ };

        enum FCCStptMode {FCCWaypoint, FCCDLinkpoint, FCCMarkpoint};

  private:
        FCCMasterMode   lastMasterMode;
        FCCSubMode              lastSubMode;
        int                             lastCage, playerFCC, lastDesignate;
   int bombReleaseOverride;

        // Air - Ground Mode
        void AirGroundMode (void);
   void DTOSMode(void);
        void AirGroundMissileMode (void);
        void MaverickMode (void);
   SimObjectType* MavCheckLock (MissileClass*);
        void HarmMode (void);
        void TargetingPodMode (void);
        void NavMode (void);
        void CalculateImpactPoint(void);
   void CalculateRocketImpactPoint(void);
        void FindRelativeImpactPoint(void);
        void DelayModePipperCorrection(void);
        void CheckForBombRelease(void);
        void DesignateGroundTarget(void);
        void SetDesignatedTarget (void);
        void CalculateReleaseRange (void);
        void FindTargetError(void);
        int  FindGroundIntersection (float el, float az, float* x, float* y, float* z);
        void CheckFeatures (MissileClass* theMissile);
        void CheckFeatures (LaserPodClass* targetingPod);
        void UpdateGroundObjectRelativeGeometry (void);
        SimObjectType* TargetStep (SimObjectType*, int);

        // Steerpoints
        WayPointClass*  mpSavedWaypoint;
        int                             mSavedWayNumber;
        FCCStptMode             mStptMode;
        FCCStptMode             mNewStptMode;

        void StepPoint(void);
        void InitNewStptMode(void);
        void StepNextWayPoint(void);
        void StepPrevWayPoint(void);
 

        // Air - Air Mode
        void AirAirMode(void);

        SimObjectType* targetPtr;
        SimObjectType* targetList;
        SimVehicleClass *platform;
        FCCMasterMode masterMode;
        FCCSubMode subMode;
        void Display(VirtualDisplay*);
        void DisplayInit (ImageBuffer*);
        float HSDRange;

        void NavDisplay(void);
        void DrawNavPoints(void);
        void DrawWayPoints(void);
        void DrawMarkPoints(void);
        void DrawLinkPoints(void);
        void MapWaypointToDisplay(WayPointClass*, float*, float*);
        void DrawPointPair(WayPointClass*, float, float, float, float);
        void DrawPointSymbol(WayPointClass*, float, float);
        void DrawTGTSymbol(float, float);
        void DrawIPSymbol(float, float);
        void DrawFLOT (void);
        void DrawPPThreats(void);
        void DrawBullseye(void);
        void DrawGhostCursor(void);
        void DrawScanVolume(void);

  public:

        char autoTarget;
        char releaseConsent, preDesignate, postDrop;
        char designateCmd, dropTrackCmd;
        char groundPipperOnHud, missileCageCmd;
        char bombPickle, missileTarget, noSolution, waypointStepCmd;
        char HSDRangeStepCmd;
        signed char cursorXCmd, cursorYCmd;

        FireControlComputer (SimVehicleClass*, int);
        ~FireControlComputer (void);
        enum TossAnticipation {NoCue, EarlyPreToss, PreToss, PullUp, AwaitingRelease};
        TossAnticipation tossAnticipationCue;
        int inRange;
        float verticalSteering, predictedClimbAngle, predictedReleaseAltitude;
        float missileTOF;
        float lastMissileImpactTime;
        float nextMissileImpactTime;
        float missileActiveTime, missileActiveRange;
        float missileRMax, missileRMin, missileRneMax, missileRneMin;
        float missileSeekerAz, missileSeekerEl;
        float missileWEZDisplayRange;
        float airGroundDelayTime, airGroundRange, airGroundBearing, airGroundMinRange, airGroundMaxRange;
        float groundImpactX, groundImpactY, groundImpactZ, groundImpactTime;
        float groundDesignateAz, groundDesignateEl, groundDesignateDroll;
        float groundDesignateX, groundDesignateY, groundDesignateZ;
        float groundPipperAz, groundPipperEl;

        char subModeString[8];

        SMSClass* Sms;
        void ClearOverrideMode (void);
        void NextSubMode(void);
        void SetMasterMode(FCCMasterMode);
        void SetSubMode(FCCSubMode);
        void WeaponStep(void);
        SimObjectType* Exec (SimObjectType* curTarget, SimObjectType* targetList, PilotInputs* theInputs);
        FCCMasterMode GetMasterMode (void) {return (masterMode);};
        FCCSubMode GetSubMode (void) {return (subMode);};
        int PlayerFCC (void) {return playerFCC;};
        void SetPlayerFCC (int flag);
        SimObjectType* TargetPtr(void) {return targetPtr; };
        void ClearCurrentTarget (void);
        void SetTarget (SimObjectType* newTarget);
        void PushButton (int whichButton, int whichMFD = 0);
        void SetStptMode(FCCStptMode);
   void SetWaypointNum (int num);
        FCCStptMode GetStptMode(void) {return mStptMode;};
        BOOL InTransistion(void) {return mStptMode != mNewStptMode;};
   void SetBombReleaseOverride (int newVal) {bombReleaseOverride = newVal;};