The SMS Class

Superclass

The SMSBaseClass

Subclasses: SMSClass

The SMS Class


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

   protected:
      int numOnBoard[wcNoWpn+1];
      char flash;
      int rippleInterval, pair, rippleCount, curRippleCount;
      float burstHeight;
      unsigned long nextDrop;
      void ReleaseCurWeapon(int stationUnderTest);
      void JettisonStation (int stationNum, int rippedOff = FALSE);
      void SetCurrentWeapon(int station, SimWeaponClass *weapon);

   public:
      int curWpnNum;
      int lastWpnStation, lastWpnNum;
      WeaponType curWeaponType;
      WeaponDomain curWeaponDomain;
      WeaponClass curWeaponClass;
      SmsDrawable* drawable;
      SimWeaponClass* curWeapon;
      short curWeaponId;

      SMSClass(SimVehicleClass *newOwnship, uchar *weapId, uchar *weapCnt);
      virtual ~SMSClass();

      virtual void AddWeaponGraphics (void);
      virtual void FreeWeaponGraphics (void);
      virtual SimWeaponClass* GetCurrentWeapon (void) {return curWeapon;};

      void SetWeaponType (WeaponType newMode);
      void IncrementStores (WeaponClass wClass, int count);
      void DecrementStores (WeaponClass wClass, int count);
      void SelectiveJettison (void);
      void EmergencyJettison (void);
      void JettisonWeapon (int hardpoint);
      void RemoveWeapon (int hardpoint);
      void AGJettison (void);
           int  DidEmergencyJettison (void)             { return flags & EmergencyJettisonFlag; }
      void WeaponStep (int symFlag = FALSE);
      int  FindWeapon (int indexDesired);
      int  FindWeaponClass (WeaponClass weaponDesired, int needWeapon = TRUE);
      int  FindWeaponType (WeaponType weaponDesired);
      int  DropBomb (int allowRipple = TRUE);
      int  LaunchMissile (void);
      int  LaunchRocket (void);
      void SetUnlimitedGuns (int flag);
      int UnlimitedAmmo (void) {return flags & UnlimitedAmmoFlag;};
      void SetUnlimitedAmmo (int newFlag);
      int  HasHarm (void) {return (flags & HTSOnBoard ? TRUE : FALSE);};
      int  HasLGB (void) {return (flags & LGBOnBoard ? TRUE : FALSE);};
      int  HasTrainable (void);
      int  HasSPJammer (void) {return (flags & SPJamOnBoard ? TRUE : FALSE);};
      int  HasWeaponClass (WeaponClass classDesired);
      void FreeWeapons (void);
      void Exec (void);
      void SetPlayerSMS (int flag);
      void SetPair (int flag);
      void IncrementRippleCount(void);
      void DecrementRippleCount(void);
      void IncrementRippleInterval(void);
      void DecrementRippleInterval(void);
      void IncrementBurstHeight(void);
      void DecrementBurstHeight(void);
      void ResetCurrentWeapon(void);
      void SetRippleCount (int newVal) {rippleCount = newVal;};
      int  RippleCount(void) {return rippleCount;};
      int  RippleInterval(void) {return rippleInterval;};
      int  Pair(void) {return pair;};
      WeaponType GetNextWeapon (WeaponDomain);
      void RemoveStore(int station, int storeId);
      void AddStore(int station, int storeId, int visible);
      void ChooseLimiterMode(int hardpoint);
      void RipOffWeapons( float noseAngle );

   friend SmsDrawable;