From c47cb547020fae8bef79178e4121025ef8511b0f Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Thu, 26 May 2022 18:04:37 -0500 Subject: [PATCH] fix on-RPC-command explosion sounds not playing the first time --- Engine/source/T3D/assets/SoundAsset.h | 43 ++++++++++++++++++++++++++- Engine/source/T3D/fx/explosion.cpp | 4 +-- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/Engine/source/T3D/assets/SoundAsset.h b/Engine/source/T3D/assets/SoundAsset.h index d320986b9..5cb6a3564 100644 --- a/Engine/source/T3D/assets/SoundAsset.h +++ b/Engine/source/T3D/assets/SoundAsset.h @@ -40,6 +40,9 @@ #endif #include "gui/editor/guiInspectorTypes.h" +#ifndef _ASSET_PTR_H_ +#include "assets/assetPtr.h" +#endif #ifndef _BITSTREAM_H_ #include "core/stream/bitStream.h" @@ -57,6 +60,10 @@ #include "sfx/sfxProfile.h" #endif // !_SFXPROFILE_H_ +#ifndef _RESOURCEMANAGER_H_ +#include "core/resourceManager.h" +#endif + #include "assetMacroHelpers.h" class SFXResource; @@ -178,6 +185,7 @@ public: StringTableEntry m##name##AssetId;\ AssetPtr m##name##Asset = NULL;\ SFXProfile* m##name##Profile = NULL;\ + SFXDescription* m##name##Desc = NULL;\ public: \ const StringTableEntry get##name##File() const { return m##name##Name; }\ void set##name##File(const FileName &_in) { m##name##Name = StringTable->insert(_in.c_str());}\ @@ -271,7 +279,15 @@ public: \ SFXProfile* get##name##Profile()\ {\ if (get##name() != StringTable->EmptyString() && m##name##Asset.notNull())\ - return m##name##Asset->getSfxProfile();\ + m##name##Profile = m##name##Asset->getSfxProfile();\ + return m##name##Profile;\ + return NULL;\ + }\ + SFXDescription* get##name##Description()\ + {\ + if (get##name() != StringTable->EmptyString() && m##name##Asset.notNull())\ + m##name##Desc = m##name##Asset->getSfxDescription();\ + return m##name##Desc;\ return NULL;\ }\ bool is##name##Valid() { return (get##name() != StringTable->EmptyString() && m##name##Asset->getStatus() == AssetBase::Ok); } @@ -290,6 +306,31 @@ public: \ #endif // TORQUE_SHOW_LEGACY_FILE_FIELDS +//network send - datablock +#define PACKDATA_SOUNDASSET(name)\ + if (stream->writeFlag(m##name##Asset.notNull()))\ + {\ + if (m##name##Profile)\ + m##name##Profile->packData(stream);\ + sfxWrite(stream, m##name##Desc);\ + }\ + else\ + stream->writeString(m##name##Name); + +//network recieve - datablock +#define UNPACKDATA_SOUNDASSET(name)\ + if (stream->readFlag())\ + {\ + if (m##name##Profile)\ + m##name##Profile->unpackData(stream);\ + sfxRead(stream, &m##name##Desc);\ + }\ + else\ + {\ + m##name##Name = stream->readSTString();\ + _set##name(m##name##Name);\ + } + #pragma endregion #pragma region Arrayed Asset Macros diff --git a/Engine/source/T3D/fx/explosion.cpp b/Engine/source/T3D/fx/explosion.cpp index d73d1bc01..cfa5d8ef4 100644 --- a/Engine/source/T3D/fx/explosion.cpp +++ b/Engine/source/T3D/fx/explosion.cpp @@ -652,7 +652,7 @@ void ExplosionData::packData(BitStream* stream) PACKDATA_ASSET(ExplosionShape); - PACKDATA_ASSET(Sound); + PACKDATA_SOUNDASSET(Sound); if (stream->writeFlag(particleEmitter)) stream->writeRangedU32(particleEmitter->getId(),DataBlockObjectIdFirst,DataBlockObjectIdLast); @@ -756,7 +756,7 @@ void ExplosionData::unpackData(BitStream* stream) UNPACKDATA_ASSET(ExplosionShape); - UNPACKDATA_ASSET(Sound); + UNPACKDATA_SOUNDASSET(Sound); if (stream->readFlag()) particleEmitterId = stream->readRangedU32(DataBlockObjectIdFirst, DataBlockObjectIdLast);