The Package Class

Superclasses

VuEntity

FalconEntity

Other Subclasses: CampManagerClass , SimBaseClass,TeamClass

CampBaseClass

Subclasses: ObjectiveClass

UnitClass

Subclasses: AirUnitClass, GroundUnitClass, TaskForceClass

AirUnitClass

SubClasses: FlightClass SquadronClass

Package


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

        private:
                uchar                           elements;                                       // Number of child units
                uchar                           c_element;                                      // Which one we're looking at
                VU_ID                           element[MAX_UNIT_CHILDREN];     // VU_IDs of elements
             VU_ID                            interceptor;                            // ID of enemy BARCAP/SWEEP/Etc flight, if any
             VU_ID                            awacs;                                          // ID of any awacs support
             VU_ID                         jstar;                                          // ID of any jstar support
             VU_ID                         ecm;                                            // ID of any ecm support
                VU_ID                         tanker;                                         // ID of any tanker support
                uchar                           wait_cycles;                            // How many cycles until timeout
                uchar                           flights;                                        // flights in this package
                ushort                          wait_for;                                       // Mission Requests to wait for (until timeout)
                // This stuff shouldn't change after init
             GridIndex                       iax,iay;                                        // Ingress assembly point
             GridIndex                       eax,eay;                                        // Egress assembly point (if any)
             GridIndex                       bpx,bpy;                                        // Break point (if any)
             GridIndex                       tpx,tpy;                                        // Turn point (if any)
             CampaignTime          takeoff;                                        // Earliest flight's takeoff time
                CampaignTime            tp_time;
                ulong                           package_flags;
                short                           caps;                                           // capabilities required for this package
                short                           requests;                                       // What other mission types we want.
                short                           responses;                                      // What sort of reaction we've caused
             WayPoint                        ingress;                                        // Ingress Route
                WayPoint                        egress;                                         // Egress Route
             MissionRequestClass     mis_request;                            // The origional request (lot'so repeated data here, we could trim)
                // Not added to i/o functions
                short                           aa_strength;                                    // The combined Air to Air strength of this package
                int                                     dirty_package;

        public:
                // Access Functions

                VU_ID GetInterceptor (void)                                             { return interceptor; }
                VU_ID GetAwacs (void)                                                   { return awacs; }
                VU_ID GetJStar (void)                                                   { return jstar; }
                VU_ID GetECM (void)                                                             { return ecm; }
                VU_ID GetTanker (void)                                                  { return tanker; }
                Flight GetFACFlight (void);
                CampaignTime GetTakeoff (void)                                  { return takeoff; }
                CampaignTime GetTPTime (void)                                   { return tp_time; }
                uchar GetFlights (void)                                                 { return flights; }
                short GetResponses (void)                                               { return responses; }
                WayPoint GetIngress (void)                                              { return ingress; }
                WayPoint GetEgress (void)                                               { return egress; }
                short GetAAStrength (void)                                              { return aa_strength; }
                MissionRequestClass *GetMissionRequest (void)   { return &mis_request; }

                void SetTanker (VU_ID);
                void SetTakeoff (CampaignTime);
                void SetPackageFlags (ulong);
                void SetTPTime (CampaignTime);

        public:
                // constructors and serial functions
                PackageClass(ushort type);
                PackageClass(VU_BYTE **stream);
                virtual ~PackageClass();
                virtual int SaveSize (void);
                virtual int Save (VU_BYTE **stream);

                // event Handlers
                virtual VU_ERRCODE Handle(VuFullUpdateEvent *event);

                // required virtuals
                virtual int Reaction (CampEntity, int, float)   {       return 0; }
                virtual int MoveUnit (CampaignTime);
                virtual int ChooseTactic (void)                                                                 {       return 0; }
                virtual int CheckTactic (int)                                                           {       return 0; }
                virtual int Father (void)                                                                               {       return 1; }
                virtual int Real (void)                                                                                 {       return 0; }
                virtual int IsPackage (void)                                                                    {       return TRUE; }

                // Dirty Data Stuff
                void MakePackageDirty (Dirty_Package bits, Dirtyness score);
                void WriteDirty (unsigned char **stream);
                void ReadDirty (unsigned char **stream);

                // core functions
                virtual int BuildPackage(MissionRequest mis, F4PFList assemblyList);
                int RecordFlightAddition (Flight flight, MissionRequest mis, int targetd);
                void FindSupportFlights (MissionRequest mis, int targetd);
                virtual void HandleRequestReceipt(int type, int them, VU_ID flight);
                virtual Unit GetFirstUnitElement (void);
                virtual Unit GetNextUnitElement (void);
                virtual Unit GetUnitElement (int e);
                virtual Unit GetUnitElementByID (int eid);
                virtual void AddUnitChild (Unit e);
                virtual void DisposeChildren (void);
                virtual void RemoveChild (VU_ID eid);
                int CheckNeedRequests (void);
                void CancelFlight (Flight flight);
                void SetPackageType (uchar p)                                                                   {       mis_request.mission = p; }
                int GetPackageType (void)                                                                               {       return mis_request.mission; }
                VU_ID GetMainFlightID (void);
                Flight GetMainFlight (void);

                virtual void SetUnitAssemblyPoint (int type, GridIndex x, GridIndex y);
                virtual void GetUnitAssemblyPoint (int type, GridIndex *x, GridIndex *y);