SimObjectLocalData class


SimObjectLocalData class

  public:
 SimObjectLocalData (void) { rdrDetect = painted = detFlags = nextLOSCheck = 0;
        range = ata = az = el = droll = 0.0F; };

 // Absolute true relative geometry for this target
 Float32 ata;    // "antenna train angle" is total angle from nose to target
 Float32 ataFrom;   // total angle from targets nose to our own position
 Float32 atadot;    // ata change rate (radians/sec)
 Float32 ataFromdot;   // ataFrom rate
 Float32 az;     // body relative angle to target in "yaw" plane
 Float32 azFrom;    // same for targets view of us.
 Float32 azFromdot;   // rate of change of azFrom (radians/sec)
 Float32 el;     // body relative angle to target in "pitch" plane
 Float32 elFrom, elFromdot; // from target to use values for elevation
 Float32 droll;    // body relative roll to target (how far to roll to get lift vector on target)
 Float32 range, rangedot; // range to target (feet & feet/sec)

 // Radar specific target data (move into Radar classes???)
 BOOL painted;     // Was this target painted this frame
 Float32 aspect;      // Target aspect (= 180.0F*DTR - ataFrom)
 Int32   rdrSy[NUM_RADAR_HISTORY]; // radar symbol (assigned by exec in RadarDoppler)
 Float32 rdrX[NUM_RADAR_HISTORY]; // azmuth in radians?
 Float32 rdrY[NUM_RADAR_HISTORY]; // range in feet (radial)
 Float32 rdrHd[NUM_RADAR_HISTORY]; // our heading at target paint time (platform->Yaw())
 VU_TIME rdrLastHit;     // Last time this target was detected (SimLibElapsedTime)
 UInt32 rdrDetect;     // Bit field indicating when we did/didn't detect the target

 // Digi use only
 Float32 threatTime;     // How long for him to kill us (digi use only)
 Float32 targetTime;     // How long to kill this target (digi use only)

 // Per sensor data
 Int32  sensorLoopCount[SensorClass::NumSensorTypes]; // Number of frames since the target was last seen
 SensorClass::TrackTypes sensorState[SensorClass::NumSensorTypes]; // What kind of sensor lock do we have

 Float32  irSignature;         // Should go away - look it up when required

 UInt32  detFlags;    //flag field indicating which los's are true
 UInt32  nextLOSCheck;   //next time to check LOS again

 int  CloudLOS(void)    {return (detFlags & 0x01) && TRUE;}
 void SetCloudLOS(int value)  {if(value)detFlags |= 0x01; else detFlags &= ~0x01;}
 int  TerrainLOS(void)   {return (detFlags & 0x02) && TRUE;}
 void SetTerrainLOS(int value) {if(value)detFlags |= 0x02; else detFlags &= ~0x02;}
#ifdef USE_SH_POOLS
   public:
      // Overload new/delete to use a SmartHeap fixed size pool
      void *operator new(size_t size) { ShiAssert( size == sizeof(SimObjectLocalData) ); return MemAllocFS(pool); };
      void operator delete(void *mem) { if (mem) MemFreeFS(mem); };
      static void InitializeStorage() { pool = MemPoolInitFS( sizeof(SimObjectLocalData), 1000, 0 ); };
      static void ReleaseStorage() { MemPoolFree( pool ); };
      static MEM_POOL pool;
#endif
};