mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
Adjusts handling for special-case networking of sound assets where we may need to account for stuff like SFXPlaylists. DB names aren't transported, so we need to do Id lookups
This commit is contained in:
parent
448a453e51
commit
7efab038d1
|
|
@ -186,6 +186,7 @@ public:
|
|||
AssetPtr<SoundAsset> m##name##Asset = NULL;\
|
||||
SFXProfile* m##name##Profile = NULL;\
|
||||
SFXDescription* m##name##Desc = NULL;\
|
||||
SimObjectId m##name##SFXId = 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());}\
|
||||
|
|
@ -310,31 +311,57 @@ public: \
|
|||
#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);\
|
||||
stream->writeString(m##name##Asset.getAssetId());\
|
||||
}\
|
||||
else\
|
||||
stream->writeString(m##name##Name);
|
||||
{\
|
||||
if(stream->writeFlag(Sim::findObject(m##name##Name)))\
|
||||
{\
|
||||
SFXTrack* sndTrack;\
|
||||
Sim::findObject(m##name##Name, sndTrack);\
|
||||
stream->writeRangedU32(SimObjectId(sndTrack->getId()), DataBlockObjectIdFirst, DataBlockObjectIdLast);\
|
||||
}\
|
||||
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);\
|
||||
m##name##AssetId = stream->readSTString();\
|
||||
_set##name(m##name##AssetId);\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
m##name##Name = stream->readSTString();\
|
||||
_set##name(m##name##Name);\
|
||||
if(stream->readFlag())\
|
||||
{\
|
||||
m##name##SFXId = stream->readRangedU32( DataBlockObjectIdFirst, DataBlockObjectIdLast );\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
m##name##Name = stream->readSTString(); \
|
||||
_set##name(m##name##Name); \
|
||||
}\
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Arrayed Asset Macros
|
||||
|
||||
#define INIT_SOUNDASSET_ARRAY(name, index) \
|
||||
{\
|
||||
m##name##Name[index] = StringTable->EmptyString(); \
|
||||
m##name##AssetId[index] = StringTable->EmptyString(); \
|
||||
m##name##Asset[index] = NULL;\
|
||||
m##name[index] = NULL;\
|
||||
m##name##Profile[index] = NULL;\
|
||||
m##name##SFXId[index] = 0;\
|
||||
}
|
||||
|
||||
#define DECLARE_SOUNDASSET_ARRAY(className,name,max) public: \
|
||||
static const U32 sm##name##Count = max;\
|
||||
Resource<SFXResource> m##name[max];\
|
||||
|
|
@ -342,6 +369,7 @@ public: \
|
|||
StringTableEntry m##name##AssetId[max];\
|
||||
AssetPtr<SoundAsset> m##name##Asset[max];\
|
||||
SFXProfile* m##name##Profile[max];\
|
||||
SimObjectId m##name##SFXId[max];\
|
||||
public: \
|
||||
const StringTableEntry get##name##File(const U32& index) const { return m##name##Name[index]; }\
|
||||
void set##name##File(const FileName &_in, const U32& index) { m##name##Name[index] = StringTable->insert(_in.c_str());}\
|
||||
|
|
@ -489,6 +517,46 @@ if (m##name##AssetId[index] != StringTable->EmptyString())\
|
|||
addField(assetEnumNameConcat(enumString, Asset), TypeSoundAssetId, Offset(m##name##AssetId[0], consoleClass) + sizeof(m##name##AssetId[0])*i, assetText(name, asset reference.));\
|
||||
}\
|
||||
}
|
||||
|
||||
#define PACKDATA_SOUNDASSET_ARRAY(name, index)\
|
||||
if (stream->writeFlag(m##name##Asset[index].notNull()))\
|
||||
{\
|
||||
stream->writeString(m##name##Asset[index].getAssetId());\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
if(stream->writeFlag(Sim::findObject(m##name##Name[index])))\
|
||||
{\
|
||||
SFXTrack* sndTrack;\
|
||||
Sim::findObject(m##name##Name[index], sndTrack);\
|
||||
stream->writeRangedU32(SimObjectId(sndTrack->getId()), DataBlockObjectIdFirst, DataBlockObjectIdLast);\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
stream->writeString(m##name##Name[index]);\
|
||||
}\
|
||||
}
|
||||
|
||||
|
||||
//network recieve - datablock
|
||||
#define UNPACKDATA_SOUNDASSET_ARRAY(name, index)\
|
||||
if (stream->readFlag())\
|
||||
{\
|
||||
m##name##AssetId[index] = stream->readSTString();\
|
||||
_set##name(m##name##AssetId[index], index);\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
if(stream->readFlag())\
|
||||
{\
|
||||
m##name##SFXId[index] = stream->readRangedU32( DataBlockObjectIdFirst, DataBlockObjectIdLast );\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
m##name##Name[index] = stream->readSTString(); \
|
||||
_set##name(m##name##Name[index], index); \
|
||||
}\
|
||||
}
|
||||
#pragma endregion
|
||||
|
||||
#endif // _ASSET_BASE_H_
|
||||
|
|
|
|||
|
|
@ -652,7 +652,8 @@ void ExplosionData::packData(BitStream* stream)
|
|||
|
||||
PACKDATA_ASSET(ExplosionShape);
|
||||
|
||||
PACKDATA_SOUNDASSET(Sound);
|
||||
//PACKDATA_SOUNDASSET(Sound);
|
||||
PACKDATA_ASSET(Sound);
|
||||
|
||||
if (stream->writeFlag(particleEmitter))
|
||||
stream->writeRangedU32(particleEmitter->getId(),DataBlockObjectIdFirst,DataBlockObjectIdLast);
|
||||
|
|
@ -756,7 +757,7 @@ void ExplosionData::unpackData(BitStream* stream)
|
|||
|
||||
UNPACKDATA_ASSET(ExplosionShape);
|
||||
|
||||
UNPACKDATA_SOUNDASSET(Sound);
|
||||
UNPACKDATA_ASSET(Sound);
|
||||
|
||||
if (stream->readFlag())
|
||||
particleEmitterId = stream->readRangedU32(DataBlockObjectIdFirst, DataBlockObjectIdLast);
|
||||
|
|
|
|||
|
|
@ -258,7 +258,7 @@ ShapeBaseImageData::ShapeBaseImageData()
|
|||
stateShapeSequence[i] = 0;
|
||||
stateScaleShapeSequence[i] = false;
|
||||
|
||||
INIT_ASSET_ARRAY(stateSound, i);
|
||||
INIT_SOUNDASSET_ARRAY(stateSound, i);
|
||||
stateScript[i] = 0;
|
||||
stateEmitter[i] = 0;
|
||||
stateEmitterTime[i] = 0;
|
||||
|
|
@ -588,17 +588,32 @@ void ShapeBaseImageData::handleStateSoundTrack(const U32& stateId)
|
|||
|
||||
s.sound = getstateSoundAsset(stateId);
|
||||
|
||||
if (s.sound == NULL && mstateSoundName[stateId] != StringTable->EmptyString())
|
||||
if (s.sound == NULL)
|
||||
{
|
||||
//ok, so we've got some sort of special-case here like a fallback or SFXPlaylist. So do the hook-up now
|
||||
SFXTrack* sndTrack;
|
||||
if (!Sim::findObject(mstateSoundName[stateId], sndTrack))
|
||||
if (mstateSoundName[stateId] != StringTable->EmptyString())
|
||||
{
|
||||
Con::errorf("ShapeBaseImageData::onAdd() - attempted to find sound %s but failed!", mstateSoundName[stateId]);
|
||||
//ok, so we've got some sort of special-case here like a fallback or SFXPlaylist. So do the hook-up now
|
||||
SFXTrack* sndTrack;
|
||||
if (!Sim::findObject(mstateSoundName[stateId], sndTrack))
|
||||
{
|
||||
Con::errorf("ShapeBaseImageData::onAdd() - attempted to find sound %s but failed!", mstateSoundName[stateId]);
|
||||
}
|
||||
else
|
||||
{
|
||||
s.soundTrack = sndTrack;
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (mstateSoundSFXId[stateId] != 0)
|
||||
{
|
||||
s.soundTrack = sndTrack;
|
||||
SFXTrack* sndTrack;
|
||||
if (!Sim::findObject(mstateSoundSFXId[stateId], sndTrack))
|
||||
{
|
||||
Con::errorf("ShapeBaseImageData::onAdd() - attempted to find sound %i but failed!", mstateSoundSFXId[stateId]);
|
||||
}
|
||||
else
|
||||
{
|
||||
s.soundTrack = sndTrack;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1172,7 +1187,7 @@ void ShapeBaseImageData::packData(BitStream* stream)
|
|||
}
|
||||
}
|
||||
|
||||
PACKDATA_ASSET_ARRAY(stateSound, i);
|
||||
PACKDATA_SOUNDASSET_ARRAY(stateSound, i);
|
||||
}
|
||||
stream->write(maxConcurrentSounds);
|
||||
stream->writeFlag(useRemainderDT);
|
||||
|
|
@ -1377,7 +1392,7 @@ void ShapeBaseImageData::unpackData(BitStream* stream)
|
|||
else
|
||||
s.emitter = 0;
|
||||
|
||||
UNPACKDATA_ASSET_ARRAY(stateSound, i);
|
||||
UNPACKDATA_SOUNDASSET_ARRAY(stateSound, i);
|
||||
handleStateSoundTrack(i);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue