MissionEvaluationClass


public:
  ulong    contact_score;      // Total AA score of all actual contacts
  uchar    pack_success;      // Package success
  uchar    package_mission;
  uchar    package_context;
  FlightDataClass  *package_element;
  FlightDataClass  *player_element;
  PilotDataClass  *player_pilot;
  uchar    player_aircraft_slot;
  uchar    friendly_losses;
  uchar    friendly_aa_losses;
  uchar    friendly_ga_losses;
  uchar    action_type;
  Team    team;
  short    flags;
  short    responses;
  short    threat_ids[MAX_COLLECTED_THREATS]; // weapon ids of threats
  GridIndex   threat_x[MAX_COLLECTED_THREATS];
  GridIndex   threat_y[MAX_COLLECTED_THREATS];
  VU_ID    alternate_strip_id;
  VU_ID    requesting_ent;
  VU_ID    intercepting_ent;
  VU_ID    awacs_id;
  VU_ID    jstar_id;
  VU_ID    ecm_id;
  VU_ID    tanker_id;
  VU_ID    package_target_id;
  VU_ID    potential_targets[MAX_POTENTIAL_TARGETS];
  CampaignTime  assigned_tot;
  CampaignTime  actual_tot;
  CampaignTime  patrol_time;
  CampaignTime  player_start_time;     // Time player started flying the mission
  CampaignTime  player_end_time;     // Time player stopped flying the mission
  GridIndex   tx,ty,abx,aby,awx,awy,jsx,jsy,tankx,tanky;
  FlightDataClass  *flight_data;
  short    curr_data;       // Floating data point
  uchar    curr_flight;      // What flight we're talking about
  uchar    curr_weapon;      // What weapon we're talking about
  PilotDataClass  *curr_pilot;      // What pilot we're talking about
  uchar    parse_types[(LastFalconEvent+7)/8]; // messages types to parse
  uchar    rounds_won[MAX_DOGFIGHT_TEAMS];  // Dogfight rounds won
  uchar    last_related_event;
  _TCHAR    *related_events[MAX_RELATED_EVENTS];
  CAMP_MISS_STRUCT logbook_data;      // Structure we'll pass to the logbook
 public:
  MissionEvaluationClass(void);
  ~MissionEvaluationClass(void);

  void CleanupFlightData (void);
  void CleanupPilotData (void);
  void PreDogfightEval (void);
  int PreMissionEval (Flight flight, uchar aircraft_slot);
  void PreEvalFlight (Flight element, Flight flight);
  void RecordTargetStatus (FlightDataClass *flight_ptr, CampBaseClass *target);
  int PostMissionEval (void);
  int MissionSuccess (FlightDataClass *flight_ptr);
  void SetPackageData (void);
  void ClearPackageData (void);
  void ClearPotentialTargets (void);
  void FindPotentialTargets (void);
  void CollectThreats (Flight flight, WayPoint tw);
  void CollectThreats (GridIndex X, GridIndex Y, int Z, int flags, int *dists);

  // Dogfight kill evalutators
  void GetTeamKills (short *kills);
  void GetTeamDeaths (short *deaths);
  void GetTeamScore (short *score);
  int GetKills (FalconSessionEntity *player);
  int GetMaxKills (void);
  int GetMaxScore (void);

  // Event list builders
  void RegisterDivert(FalconDivertMessage *dm);
  void RegisterShotAtPlayer(void);
  void RegisterShot(FalconWeaponsFire *wfm);
  void RegisterHit(FalconDamageMessage *dmm);
  void RegisterKill(FalconDeathMessage *dtm, int type, int pilot_status);
  void RegisterPlayerJoin(FalconPlayerStatusMessage *fpsm);
  void RegisterEjection(FalconEjectMessage *em, int pilot_status);
  void RegisterLanding(FalconLandingMessage *lm, int pilot_status);
  void RegisterContact(Unit contact);
  void ParseTime (CampaignTime time, char* time_str);
  void ParseTime (double time, char* time_str);
  void AddEventToList (EventElement* theEvent, FlightDataClass *flight_ptr, PilotDataClass* pilot_data, int wn);

  // Event trigger checks
  void RegisterKill (FalconEntity *shooter, FalconEntity *target, int targetEl);
  void RegisterMove (Flight flight);
  void RegisterAbort (Flight flight);
  void RegisterRelief (Flight flight);
  void RegisterDivert (Flight flight, MissionRequestClass *mis);
  void RegisterRoundWon (int team);
  void RegisterWin (int team);
  void RegisterEvent (GridIndex x, GridIndex y, int team, int type, _TCHAR *event);

  void SetFinalAircraft (Flight flight);

  int GetPilotName (int pilot_num, TCHAR* buffer);
  int GetFlightName (TCHAR* buffer);

  PilotDataClass* AddNewPlayerPilot (FlightDataClass *flight_ptr, int pilot_num, Flight flight, FalconSessionEntity *player);
  PilotDataClass* AddNewPilot (FlightDataClass *flight_ptr, int pilot_num, int ac_num, Flight flight);
  PilotDataClass* FindPilotData (FlightDataClass *flight_ptr, int pilot_num);
  PilotDataClass* FindPilotData (int flight_id, int pilot_num);
  PilotDataClass* FindPilotDataFromAC (FlightDataClass *flight_ptr, int aircraft_slot);

  FlightDataClass* FindFlightData (Flight flight);

  void SetupPilots (FlightDataClass *flight_ptr, Flight flight);
  void SetPlayerPilot (Flight flight, uchar aircraft_slot);

  void RebuildEvaluationData (void);