The SMSBaseClass

Subclasses: SMSClass

   public:
#ifdef USE_SH_POOLS
      // Overload new/delete to use a SmartHeap fixed size pool
      void *operator new(size_t size) { ShiAssert( size == sizeof(SMSBaseClass) ); return MemAllocFS(pool);     };
      void operator delete(void *mem) { if (mem) MemFreeFS(mem); };
      static void InitializeStorage()   { pool = MemPoolInitFS( sizeof(SMSBaseClass), 200, 0 ); };
      static void ReleaseStorage()      { MemPoolFree( pool ); };
      static MEM_POOL   pool;
#endif
      enum MasterArmState {Safe, Sim, Arm};
      enum CommandFlags
      {
         Loftable                = 0x0001,
         HasDisplay              = 0x0002,
         HasBurstHeight          = 0x0004,
         UnlimitedAmmoFlag       = 0x0008,
         EmergencyJettisonFlag   = 0x0010,
         Firing                  = 0x0020,
         LGBOnBoard              = 0x0040,
         HTSOnBoard              = 0x0080,
         SPJamOnBoard            = 0x0100,
         GunOnBoard              = 0x0200,
         Trainable               = 0x0400
      };
                BasicWeaponStation              **hardPoint;

                SMSBaseClass(SimVehicleClass *newOwnship, uchar *weapId, uchar *weapCnt, int advanced=FALSE);
                virtual ~SMSBaseClass();

                virtual void AddWeaponGraphics (void);
                virtual void FreeWeaponGraphics (void);
                virtual SimWeaponClass* GetCurrentWeapon (void);

                GunClass* GetGun (int hardpoint);
                MissileClass* GetMissile (int hardpoint);
                BombClass* GetBomb (int hardpoint);

                int GetCurrentWeaponHardpoint (void)                    { return curHardpoint; };
                uchar GetCurrentWeaponType (void)                               { return (uchar)hardPoint[curHardpoint]->weaponId; };
                short GetCurrentWeaponIndex (void);
                float GetCurrentWeaponRangeFeet (void);
                void LaunchWeapon (void);
                void DetachWeapon (int hardpoint, SimWeaponClass *theWeapon);
      int CurStationOK (void);
      int NumHardpoints (void) {return numHardpoints;};
      int CurHardpoint (void) {return curHardpoint;};
      int  NumCurrentWpn(void) {return numCurrentWpn;};
      void SetCurHardpoint (int newPoint) {curHardpoint = newPoint;}; // This should go one day
      SimVehicleClass* Ownship(void) {return ownship;};
      MasterArmState MasterArm(void) {return masterArm;};
      void SetMasterArm (MasterArmState newState) {masterArm = newState;};
      void StepMasterArm (void);

                void ReplaceMissile (int, MissileClass*);
                void ReplaceRocket (int, MissileClass*);
                void ReplaceBomb (int, BombClass*);

      void SetFlag (int newFlag) { flags |= newFlag; };
      void ClearFlag (int newFlag) { flags &= ~newFlag; };
      int  IsSet (int newFlag) { return flags & newFlag;};

                float GetWeaponRangeFeet (int hardpoint);

                void SelectBestWeapon (uchar *dam, int mt, int range_km, int guns_only = FALSE);

   protected:
                int numHardpoints;
                int curHardpoint;
      int numCurrentWpn;
      int flags;
                SimVehicleClass* ownship;
      MasterArmState masterArm;