diff --git a/Engine/source/T3D/fx/precipitation.cpp b/Engine/source/T3D/fx/precipitation.cpp index caebe48cd..91249fe2b 100644 --- a/Engine/source/T3D/fx/precipitation.cpp +++ b/Engine/source/T3D/fx/precipitation.cpp @@ -127,7 +127,7 @@ ConsoleDocClass( PrecipitationData, //---------------------------------------------------------- PrecipitationData::PrecipitationData() { - soundProfile = NULL; + INIT_SOUNDASSET(Sound); INIT_IMAGEASSET(Drop); @@ -143,8 +143,7 @@ PrecipitationData::PrecipitationData() void PrecipitationData::initPersistFields() { - addField( "soundProfile", TYPEID< SFXTrack >(), Offset(soundProfile, PrecipitationData), - "Looping SFXProfile effect to play while Precipitation is active." ); + INITPERSISTFIELD_SOUNDASSET(Sound, PrecipitationData, "Looping SFXProfile effect to play while Precipitation is active."); addProtectedField( "dropTexture", TypeFilename, Offset(mDropName, PrecipitationData), &_setDropData, &defaultProtectedGetFn, "@brief Texture filename for drop particles.\n\n" @@ -190,7 +189,7 @@ bool PrecipitationData::preload( bool server, String &errorStr ) if( Parent::preload( server, errorStr) == false) return false; - if( !server && !sfxResolve( &soundProfile, errorStr ) ) + if (!server && (mSoundAsset.isNull() || !mSoundAsset->getSfxProfile())) return false; return true; @@ -200,7 +199,8 @@ void PrecipitationData::packData(BitStream* stream) { Parent::packData(stream); - sfxWrite( stream, soundProfile ); + PACKDATA_SOUNDASSET(Sound); + //sfxWrite( stream, soundProfile ); PACKDATA_IMAGEASSET(Drop); @@ -217,7 +217,8 @@ void PrecipitationData::unpackData(BitStream* stream) { Parent::unpackData(stream); - sfxRead( stream, &soundProfile ); + UNPACKDATA_SOUNDASSET(Sound); + //sfxRead( stream, &soundProfile ); UNPACKDATA_IMAGEASSET(Drop); @@ -598,9 +599,9 @@ bool Precipitation::onNewDataBlock( GameBaseData *dptr, bool reload ) { SFX_DELETE( mAmbientSound ); - if ( mDataBlock->soundProfile ) + if ( mDataBlock->mSoundAsset && mDataBlock->mSoundAsset->getSfxProfile() ) { - mAmbientSound = SFX->createSource( mDataBlock->soundProfile, &getTransform() ); + mAmbientSound = SFX->createSource(mDataBlock->mSoundAsset->getSfxProfile(), &getTransform() ); if ( mAmbientSound ) mAmbientSound->play(); } diff --git a/Engine/source/T3D/fx/precipitation.h b/Engine/source/T3D/fx/precipitation.h index 58c8c44dd..0bb06e0f2 100644 --- a/Engine/source/T3D/fx/precipitation.h +++ b/Engine/source/T3D/fx/precipitation.h @@ -34,8 +34,9 @@ #endif #include "T3D/assets/ImageAsset.h" +#include "T3D/assets/SoundAsset.h" -class SFXTrack; +//class SFXTrack; class SFXSource; //-------------------------------------------------------------------------- @@ -45,30 +46,32 @@ class PrecipitationData : public GameBaseData typedef GameBaseData Parent; public: - SFXTrack* soundProfile; + //SFXTrack* soundProfile; + DECLARE_SOUNDASSET(PrecipitationData, Sound); + DECLARE_SOUNDASSET_SETGET(PrecipitationData, Sound); - DECLARE_IMAGEASSET(PrecipitationData, Drop, onDropChanged, GFXStaticTextureSRGBProfile); ///< Texture for drop particles - DECLARE_IMAGEASSET_SETGET(PrecipitationData, Drop); + DECLARE_IMAGEASSET(PrecipitationData, Drop, onDropChanged, GFXStaticTextureSRGBProfile); ///< Texture for drop particles + DECLARE_IMAGEASSET_SETGET(PrecipitationData, Drop); - StringTableEntry mDropShaderName; ///< The name of the shader used for raindrops + StringTableEntry mDropShaderName; ///< The name of the shader used for raindrops - DECLARE_IMAGEASSET(PrecipitationData, Splash, onSplashChanged, GFXStaticTextureSRGBProfile); ///< Texture for splash particles - DECLARE_IMAGEASSET_SETGET(PrecipitationData, Splash); + DECLARE_IMAGEASSET(PrecipitationData, Splash, onSplashChanged, GFXStaticTextureSRGBProfile); ///< Texture for splash particles + DECLARE_IMAGEASSET_SETGET(PrecipitationData, Splash); - StringTableEntry mSplashShaderName; ///< The name of the shader used for raindrops + StringTableEntry mSplashShaderName; ///< The name of the shader used for raindrops - S32 mDropsPerSide; ///< How many drops are on a side of the raindrop texture. - S32 mSplashesPerSide; ///< How many splash are on a side of the splash texture. + S32 mDropsPerSide; ///< How many drops are on a side of the raindrop texture. + S32 mSplashesPerSide; ///< How many splash are on a side of the splash texture. - PrecipitationData(); - DECLARE_CONOBJECT(PrecipitationData); - bool preload( bool server, String& errorStr ); - static void initPersistFields(); - virtual void packData(BitStream* stream); - virtual void unpackData(BitStream* stream); + PrecipitationData(); + DECLARE_CONOBJECT(PrecipitationData); + bool preload( bool server, String& errorStr ); + static void initPersistFields(); + virtual void packData(BitStream* stream); + virtual void unpackData(BitStream* stream); - void onDropChanged() {} - void onSplashChanged() {} + void onDropChanged() {} + void onSplashChanged() {} }; struct Raindrop diff --git a/Templates/BaseGame/game/tools/projectImporter/scripts/pre40/T3Dpre4ProjectImporter.tscript b/Templates/BaseGame/game/tools/projectImporter/scripts/pre40/T3Dpre4ProjectImporter.tscript index d996182dd..645bd38ca 100644 --- a/Templates/BaseGame/game/tools/projectImporter/scripts/pre40/T3Dpre4ProjectImporter.tscript +++ b/Templates/BaseGame/game/tools/projectImporter/scripts/pre40/T3Dpre4ProjectImporter.tscript @@ -919,7 +919,7 @@ T3Dpre4ProjectImporter::genProcessor("DebrisData", "shape shapeAsset shapeFile s T3Dpre4ProjectImporter::genProcessor("DecalData", "material materialAsset"); T3Dpre4ProjectImporter::genProcessor("ExplosionData", "explosionShape explosionShapeAsset"); T3Dpre4ProjectImporter::genProcessor("ParticleData", "texture textureAsset textureName textureAsset textureExt textureExtAsset textureExtName textureExtAsset"); -T3Dpre4ProjectImporter::genProcessor("PrecipitationData", "drop dropAsset dropTexture dropAsset splash splashAsset splashTexture splashAsset"); +T3Dpre4ProjectImporter::genProcessor("PrecipitationData", "drop dropAsset dropTexture dropAsset splash splashAsset splashTexture splashAsset soundProfile soundAsset"); T3Dpre4ProjectImporter::genProcessor("SplashData", "texture textureAsset"); T3Dpre4ProjectImporter::genProcessor("LightFlareData", "flareTexture flareTextureAsset"); T3Dpre4ProjectImporter::genProcessor("PhysicsDebrisData", "shape shapeAsset shapeFile shapeAsset"); diff --git a/Templates/BaseGame/game/tools/projectImporter/scripts/projectImporter.tscript b/Templates/BaseGame/game/tools/projectImporter/scripts/projectImporter.tscript index ab62befb8..073a7a6bf 100644 --- a/Templates/BaseGame/game/tools/projectImporter/scripts/projectImporter.tscript +++ b/Templates/BaseGame/game/tools/projectImporter/scripts/projectImporter.tscript @@ -556,23 +556,49 @@ function processLegacyField(%line, %originalFieldName, %newFieldName) %targetFilename = sanitizeFilename(%value); if(isObject(%targetFilename)) + { + if(%originalFieldName $= "soundProfile") + { + $ProjectImporter::assetQuery.clear(); + %foundAssets = AssetDatabase.findAssetName($ProjectImporter::assetQuery, %targetFilename); + if(%foundAssets != 0) + { + %assetId = $ProjectImporter::assetQuery.getAsset(0); + } + } + else { //likely a material name, so handle it that way %assetId = MaterialAsset::getAssetIdByMaterialName(%targetFilename); } + } else { if(!isFile(%targetFilename)) { + if(%originalFieldName $= "soundProfile") + { + $ProjectImporter::assetQuery.clear(); + %foundAssets = AssetDatabase.findAssetName($ProjectImporter::assetQuery, %targetFilename); + if(%foundAssets != 0) + { + %assetId = $ProjectImporter::assetQuery.getAsset(0); + } + } + else + { error("Legacy Project Importer - file described in line could not be found/is not valid"); return %line; } - + } + else + { $ProjectImporter::assetQuery.clear(); %foundAssets = AssetDatabase.findAssetLooseFile($ProjectImporter::assetQuery, %targetFilename); if(%foundAssets != 0) { %assetId = $ProjectImporter::assetQuery.getAsset(0); + } } }