Browse Source

More turns

-Flying Vehicle
-Proximinity Mine
marauder2k7 4 years ago
parent
commit
30b57c0f95

+ 20 - 22
Engine/source/T3D/proximityMine.cpp

@@ -74,16 +74,16 @@ IMPLEMENT_CALLBACK( ProximityMineData, onExplode, void, ( ProximityMine* obj, Po
 ProximityMineData::ProximityMineData()
  : armingDelay( 0 ),
    armingSequence( -1 ),
-   armingSound( NULL ),
    triggerRadius( 5.0f ),
    triggerSpeed( 1.0f ),
    autoTriggerDelay( 0 ),
    triggerOnOwner( false ),
    triggerDelay( 0 ),
    triggerSequence( -1 ),
-   triggerSound( NULL ),
    explosionOffset( 0.05f )
 {
+   INIT_SOUNDASSET(ArmSound);
+   INIT_SOUNDASSET(TriggerSound);
 }
 
 void ProximityMineData::initPersistFields()
@@ -91,9 +91,9 @@ void ProximityMineData::initPersistFields()
    addGroup( "Arming" );
    addField( "armingDelay", TypeF32, Offset(armingDelay, ProximityMineData), 
       "Delay (in seconds) from when the mine is placed to when it becomes active." );
-   addField( "armingSound", TypeSFXTrackName, Offset(armingSound, ProximityMineData),
-      "Sound to play when the mine is armed (starts at the same time as "
-      "the <i>armed</i> sequence if defined)." );
+
+   INITPERSISTFIELD_SOUNDASSET(ArmSound, ProximityMineData, "Arming sound for this proximity mine.");
+
    endGroup( "Arming" );
 
    addGroup( "Triggering" );
@@ -111,9 +111,9 @@ void ProximityMineData::initPersistFields()
       "Speed above which moving objects within the trigger radius will trigger the mine" );
    addField( "triggerDelay", TypeF32, Offset(triggerDelay, ProximityMineData),
       "Delay (in seconds) from when the mine is triggered until it explodes." );
-   addField( "triggerSound", TypeSFXTrackName, Offset(triggerSound, ProximityMineData),
-      "Sound to play when the mine is triggered (starts at the same time as "
-      "the <i>triggered</i> sequence if defined)." );
+
+   INITPERSISTFIELD_SOUNDASSET(TriggerSound, ProximityMineData, "Arming sound for this proximity mine.");
+
    endGroup( "Triggering" );
 
    addGroup( "Explosion" );
@@ -135,12 +135,10 @@ bool ProximityMineData::preload( bool server, String& errorStr )
 
    if ( !server )
    {
-      // Resolve sounds
-      String sfxErrorStr;
-      if( !sfxResolve( &armingSound, sfxErrorStr ) )
-         Con::errorf( ConsoleLogEntry::General, "ProximityMineData::preload: Invalid packet: %s", sfxErrorStr.c_str() );
-      if( !sfxResolve( &triggerSound, sfxErrorStr ) )
-         Con::errorf( ConsoleLogEntry::General, "ProximityMineData::preload: Invalid packet: %s", sfxErrorStr.c_str() );
+      if( !getArmSound() )
+         Con::errorf( ConsoleLogEntry::General, "ProximityMineData::preload: Invalid arming sound." );
+      if( !getTriggerSound() )
+         Con::errorf( ConsoleLogEntry::General, "ProximityMineData::preload: Invalid trigger sound." );
    }
 
    if ( mShape )
@@ -158,14 +156,14 @@ void ProximityMineData::packData( BitStream* stream )
    Parent::packData( stream );
 
    stream->write( armingDelay );
-   sfxWrite( stream, armingSound );
+   PACKDATA_SOUNDASSET(ArmSound);
 
    stream->write( autoTriggerDelay );
    stream->writeFlag( triggerOnOwner );
    stream->write( triggerRadius );
    stream->write( triggerSpeed );
    stream->write( triggerDelay );
-   sfxWrite( stream, triggerSound );
+   PACKDATA_SOUNDASSET(TriggerSound);
 }
 
 void ProximityMineData::unpackData( BitStream* stream )
@@ -173,14 +171,14 @@ void ProximityMineData::unpackData( BitStream* stream )
    Parent::unpackData(stream);
 
    stream->read( &armingDelay );
-   sfxRead( stream, &armingSound );
+   UNPACKDATA_SOUNDASSET(ArmSound);
 
    stream->read( &autoTriggerDelay );
    triggerOnOwner = stream->readFlag();
    stream->read( &triggerRadius );
    stream->read( &triggerSpeed );
    stream->read( &triggerDelay );
-   sfxRead( stream, &triggerSound );
+   UNPACKDATA_SOUNDASSET(TriggerSound);
 }
 
 //----------------------------------------------------------------------------
@@ -428,8 +426,8 @@ void ProximityMine::processTick( const Move* move )
                   mAnimThread = mShapeInstance->addThread();
                   mShapeInstance->setSequence( mAnimThread, mDataBlock->armingSequence, 0.0f );
                }
-               if ( mDataBlock->armingSound )
-                  SFX->playOnce( mDataBlock->armingSound, &getRenderTransform() );
+               if ( mDataBlock->getArmSound() )
+                  SFX->playOnce( mDataBlock->getArmSoundAsset()->getSfxProfile(), &getRenderTransform() );
             }
             break;
 
@@ -469,8 +467,8 @@ void ProximityMine::processTick( const Move* move )
                   mAnimThread = mShapeInstance->addThread();
                   mShapeInstance->setSequence( mAnimThread, mDataBlock->triggerSequence, 0.0f );
                }
-               if ( mDataBlock->triggerSound )
-                  SFX->playOnce( mDataBlock->triggerSound, &getRenderTransform() );
+               if ( mDataBlock->getTriggerSound() )
+                  SFX->playOnce( mDataBlock->getTriggerSoundAsset()->getSfxProfile(), &getRenderTransform() );
 
                if ( isServerObject() )
                   mDataBlock->onTriggered_callback( this, sql.mList[0] );

+ 6 - 2
Engine/source/T3D/proximityMine.h

@@ -27,6 +27,8 @@
    #include "T3D/item.h"
 #endif
 
+#include "T3D/assets/SoundAsset.h"
+
 class ExplosionData;
 class SFXTrack;
 class ProximityMine;
@@ -43,7 +45,8 @@ struct ProximityMineData: public ItemData
 public:
    F32               armingDelay;
    S32               armingSequence;
-   SFXTrack*         armingSound;
+   DECLARE_SOUNDASSET(ProximityMineData, ArmSound);
+   DECLARE_SOUNDASSET_SETGET(ProximityMineData, ArmSound);
 
    F32               autoTriggerDelay;
    bool              triggerOnOwner;
@@ -51,7 +54,8 @@ public:
    F32               triggerSpeed;
    F32               triggerDelay;
    S32               triggerSequence;
-   SFXTrack*         triggerSound;
+   DECLARE_SOUNDASSET(ProximityMineData, TriggerSound);
+   DECLARE_SOUNDASSET_SETGET(ProximityMineData, TriggerSound);
 
    F32               explosionOffset;
 

+ 15 - 21
Engine/source/T3D/vehicles/flyingVehicle.cpp

@@ -116,7 +116,7 @@ FlyingVehicleData::FlyingVehicleData()
       jetEmitter[j] = 0;
 
    for (S32 i = 0; i < MaxSounds; i++)
-      sound[i] = 0;
+      INIT_SOUNDASSET_ARRAY(FlyingSounds, i);
 
    vertThrustMultiple = 1.0;
 }
@@ -131,8 +131,10 @@ bool FlyingVehicleData::preload(bool server, String &errorStr)
    // Resolve objects transmitted from server
    if (!server) {
       for (S32 i = 0; i < MaxSounds; i++)
-         if (sound[i])
-            Sim::findObject(SimObjectId((uintptr_t)sound[i]),sound[i]);
+         if (mFlyingSounds[i])
+         {
+            _setFlyingSounds(getFlyingSounds(i), i);
+         }
 
       for (S32 j = 0; j < MaxJetEmitters; j++)
          if (jetEmitter[j])
@@ -163,10 +165,8 @@ bool FlyingVehicleData::preload(bool server, String &errorStr)
 
 void FlyingVehicleData::initPersistFields()
 {
-   addField( "jetSound", TYPEID< SFXProfile >(), Offset(sound[JetSound], FlyingVehicleData),
-      "Looping sound to play while the vehicle is jetting." );
-   addField( "engineSound", TYPEID< SFXProfile >(), Offset(sound[EngineSound], FlyingVehicleData),
-      "Looping engine sound." );
+
+   INITPERSISTFIELD_SOUNDASSET_ARRAY(FlyingSounds, Sounds::MaxSounds, FlyingVehicleData, "Sounds for flying vehicle");
 
    addField( "maneuveringForce", TypeF32, Offset(maneuveringForce, FlyingVehicleData),
       "@brief Maximum X and Y (horizontal plane) maneuvering force.\n\n"
@@ -240,11 +240,7 @@ void FlyingVehicleData::packData(BitStream* stream)
 
    for (S32 i = 0; i < MaxSounds; i++)
    {
-      if (stream->writeFlag(sound[i]))
-      {
-         SimObjectId writtenId = mPacked ? SimObjectId((uintptr_t)sound[i]) : sound[i]->getId();
-         stream->writeRangedU32(writtenId, DataBlockObjectIdFirst, DataBlockObjectIdLast);
-      }
+      PACKDATA_SOUNDASSET_ARRAY(FlyingSounds, i);
    }
 
    for (S32 j = 0; j < MaxJetEmitters; j++)
@@ -277,11 +273,9 @@ void FlyingVehicleData::unpackData(BitStream* stream)
 {
    Parent::unpackData(stream);
 
-   for (S32 i = 0; i < MaxSounds; i++) {
-      sound[i] = NULL;
-      if (stream->readFlag())
-         sound[i] = (SFXProfile*)(uintptr_t)stream->readRangedU32(DataBlockObjectIdFirst,
-                                                         DataBlockObjectIdLast);
+   for (S32 i = 0; i < MaxSounds; i++)
+   {
+      UNPACKDATA_SOUNDASSET_ARRAY(FlyingSounds, i);
    }
 
    for (S32 j = 0; j < MaxJetEmitters; j++) {
@@ -374,11 +368,11 @@ bool FlyingVehicle::onNewDataBlock(GameBaseData* dptr, bool reload)
       SFX_DELETE( mJetSound );
       SFX_DELETE( mEngineSound );
 
-      if ( mDataBlock->sound[FlyingVehicleData::EngineSound] )
-         mEngineSound = SFX->createSource( mDataBlock->sound[FlyingVehicleData::EngineSound], &getTransform() );
+      if ( mDataBlock->getFlyingSounds(FlyingVehicleData::EngineSound) )
+         mEngineSound = SFX->createSource( mDataBlock->getFlyingSoundProfile(FlyingVehicleData::EngineSound), &getTransform() );
 
-      if ( mDataBlock->sound[FlyingVehicleData::JetSound] )
-         mJetSound = SFX->createSource( mDataBlock->sound[FlyingVehicleData::JetSound], &getTransform() );
+      if ( mDataBlock->getFlyingSounds(FlyingVehicleData::JetSound))
+         mJetSound = SFX->createSource( mDataBlock->getFlyingSoundProfile(FlyingVehicleData::JetSound), &getTransform() );
    }
 
    // Jet Sequences

+ 9 - 1
Engine/source/T3D/vehicles/flyingVehicle.h

@@ -45,7 +45,15 @@ struct FlyingVehicleData: public VehicleData {
       EngineSound,
       MaxSounds,
    };
-   SFXProfile* sound[MaxSounds];
+   DECLARE_SOUNDASSET_ARRAY(FlyingVehicleData, FlyingSounds, Sounds::MaxSounds);
+   DECLARE_SOUNDASSET_ARRAY_SETGET(FlyingVehicleData, FlyingSounds);
+   SFXProfile* getFlyingSoundProfile(U32 id)
+   {
+      if (mFlyingSoundsAsset[id] != NULL)
+         return mFlyingSoundsAsset[id]->getSfxProfile();
+      else
+         return NULL;
+   }
 
    enum Jets {
       // These enums index into a static name list.