From 19eb3c42f015a80b09bfeb7f66181ce3af8ad8fa Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Sat, 2 Oct 2021 21:05:04 -0500 Subject: [PATCH] more enum work, now with somewhat clearer boundary names, and some debug spam for initpersistfields, and pack and unpack macros to help us try and trace why those are scrambling --- Engine/source/T3D/assets/SoundAsset.h | 47 ++++++++++++++++++-- Engine/source/T3D/player.cpp | 64 +++++++++++++-------------- Engine/source/T3D/player.h | 4 +- 3 files changed, 77 insertions(+), 38 deletions(-) diff --git a/Engine/source/T3D/assets/SoundAsset.h b/Engine/source/T3D/assets/SoundAsset.h index 97b68f745..5a9af9eb3 100644 --- a/Engine/source/T3D/assets/SoundAsset.h +++ b/Engine/source/T3D/assets/SoundAsset.h @@ -381,11 +381,18 @@ DefineEngineMethod(className, set##name, bool, (const char* shape), , assetText {\ const char* enumString = castConsoleTypeToString(static_cast(i));\ if (enumString && enumString[0])\ - {\ + { Con::printf("%s", enumString);\ addProtectedField(assetEnumNameConcat(enumString, File), TypeSoundFilename, Offset(m##name##Name[i], consoleClass), _set##name##Data, & defaultProtectedGetFn, assetText(name, docs), AbstractClassRep::FIELD_HideInInspectors); \ addProtectedField(assetEnumNameConcat(enumString, Asset), TypeSoundAssetId, Offset(m##name##AssetId[i], consoleClass), _set##name##Data, & defaultProtectedGetFn, assetText(name, asset reference.));\ }\ } + +#define INITPERSISTFIELD_SOUNDASSET_ENUM(enumString, name, enumVal, consoleClass, docs) \ + {\ + addProtectedField(assetText(enumString, File), TypeSoundFilename, Offset(m##name##Name[enumVal], consoleClass), _set##name##Data, & defaultProtectedGetFn, assetText(name[enumVal], docs), AbstractClassRep::FIELD_HideInInspectors); \ + addProtectedField(assetText(enumString, Asset), TypeSoundAssetId, Offset(m##name##AssetId[enumVal], consoleClass), _set##name##Data, & defaultProtectedGetFn, assetText(name[enumVal], asset reference.));\ + }\ + #pragma region Arrayed Asset Macros #define DECLARE_SOUNDASSET_ARRAY(className,name,max) public: \ @@ -574,6 +581,7 @@ DefineEngineMethod(className, set##name, bool, (const char* map, S32 index), , a m##name##Name[index] = other.m##name##Name[index];\ m##name##AssetId[index] = other.m##name##AssetId[index];\ m##name##Asset[index] = other.m##name##Asset[index];\ + m##name[index] = = other.m##name[index];\ } #define LOAD_SOUNDASSET_ARRAY(name, index)\ @@ -602,7 +610,10 @@ if (m##name##AssetId[index] != StringTable->EmptyString())\ _set##name(m##name##AssetId[index], index);\ }\ else\ - m##name##Name[index] = stream->readSTString(); + {\ + m##name##Name[index] = stream->readSTString();\ + _set##name(m##name##AssetId[index], index);\ + } #define PACK_SOUNDASSET_ARRAY(netconn, name, index)\ if (stream->writeFlag(m##name##Asset[index].notNull()))\ @@ -620,8 +631,38 @@ if (m##name##AssetId[index] != StringTable->EmptyString())\ _set##name(m##name##AssetId[index], index);\ }\ else\ - m##name##Name[index] = stream->readSTString(); + {\ + m##name##Name[index] = stream->readSTString();\ + _set##name(m##name##AssetId[index], index);\ + } +#define PACKDATA_SOUNDASSET_ARRAY_ENUMED(name, enumType, index )\ +{\ + if (stream->writeFlag(m##name##Asset[index].notNull()))\ + {\ + stream->writeString(m##name##Asset[index].getAssetId());\ + const char* enumString = castConsoleTypeToString(static_cast(index));\ + Con::printf("pack: %s = %s",enumString, m##name##AssetId[index]);\ + }\ + else\ + stream->writeString(m##name##Name[index]);\ +} + +#define UNPACKDATA_SOUNDASSET_ARRAY_ENUMED(name, enumType, index )\ +{\ + if (stream->readFlag())\ + {\ + m##name##AssetId[index] = stream->readSTString();\ + _set##name(m##name##AssetId[index], index);\ + const char* enumString = castConsoleTypeToString(static_cast(index));\ + Con::printf("unpack: %s = %s",enumString, m##name##AssetId[index]);\ + }\ + else\ + {\ + m##name##Name[index] = stream->readSTString();\ + _set##name(m##name##AssetId[index], index);\ + }\ +} #pragma endregion #endif // _ASSET_BASE_H_ diff --git a/Engine/source/T3D/player.cpp b/Engine/source/T3D/player.cpp index 37655598f..3e994995a 100644 --- a/Engine/source/T3D/player.cpp +++ b/Engine/source/T3D/player.cpp @@ -194,24 +194,24 @@ DefineEnumType(playerSoundsEnum); ImplementEnumType(playerSoundsEnum, "enum types.\n" "@ingroup PlayerData\n\n") - {PlayerData::Sounds::FootSoft, "FootSoft","..." }, - {PlayerData::Sounds::FootHard, "FootHard","..." }, - {PlayerData::Sounds::FootMetal, "FootMetal","..." }, - {PlayerData::Sounds::FootSnow, "FootSnow","..." }, - {PlayerData::Sounds::FootShallowSplash, "FootShallowSplash","..." }, - {PlayerData::Sounds::FootWading, "FootWading","..." }, - {PlayerData::Sounds::FootUnderWater, "FootUnderWater","..." }, - {PlayerData::Sounds::FootBubbles, "FootBubbles","..." }, - {PlayerData::Sounds::MoveBubbles, "MoveBubbles","..." }, - {PlayerData::Sounds::WaterBreath, "WaterBreath","..." }, - {PlayerData::Sounds::ImpactSoft, "ImpactSoft","..." }, - {PlayerData::Sounds::ImpactHard, "ImpactHard","..." }, - {PlayerData::Sounds::ImpactMetal, "ImpactMetal","..." }, - {PlayerData::Sounds::ImpactSnow, "ImpactSnow","..." }, - {PlayerData::Sounds::ImpactWaterEasy, "ImpactWaterEasy","..." }, - {PlayerData::Sounds::ImpactWaterMedium, "ImpactWaterMedium","..." }, - {PlayerData::Sounds::ImpactWaterHard, "ImpactWaterHard","..." }, - {PlayerData::Sounds::ExitWater, "ExitWater","..." }, + { playerSoundsEnum::FootSoft, "FootSoft", "..." }, + { playerSoundsEnum::FootHard, "FootHard","..." }, + { playerSoundsEnum::FootMetal, "FootMetal","..." }, + { playerSoundsEnum::FootSnow, "FootSnow","..." }, + { playerSoundsEnum::FootShallowSplash, "FootShallowSplash","..." }, + { playerSoundsEnum::FootWading, "FootWading","..." }, + { playerSoundsEnum::FootUnderWater, "FootUnderWater","..." }, + { playerSoundsEnum::FootBubbles, "FootBubbles","..." }, + { playerSoundsEnum::MoveBubbles, "MoveBubbles","..." }, + { playerSoundsEnum::WaterBreath, "WaterBreath","..." }, + { playerSoundsEnum::ImpactSoft, "ImpactSoft","..." }, + { playerSoundsEnum::ImpactHard, "ImpactHard","..." }, + { playerSoundsEnum::ImpactMetal, "ImpactMetal","..." }, + { playerSoundsEnum::ImpactSnow, "ImpactSnow","..." }, + { playerSoundsEnum::ImpactWaterEasy, "ImpactWaterEasy","..." }, + { playerSoundsEnum::ImpactWaterMedium, "ImpactWaterMedium","..." }, + { playerSoundsEnum::ImpactWaterHard, "ImpactWaterHard","..." }, + { playerSoundsEnum::ExitWater, "ExitWater","..." }, EndImplementEnumType; //---------------------------------------------------------------------------- @@ -469,18 +469,16 @@ bool PlayerData::preload(bool server, String &errorStr) if(!Parent::preload(server, errorStr)) return false; - // Resolve objects transmitted from server - if( !server ) + for (U32 i = 0; i < MaxSounds; ++i) { - for( U32 i = 0; i < MaxSounds; ++ i ) + _setPlayerSound(getPlayerSound(i), i); + if (getPlayerSound(i) != StringTable->EmptyString()) { - if (getPlayerSound(i) != StringTable->EmptyString()) - { - _setPlayerSound(getPlayerSound(i), i); - } - if (!getPlayerSoundProfile(i)) - Con::errorf("PlayerData::Preload() - unable to find sfxProfile for asset %d %s", i, getPlayerSound(i)); + Con::errorf("PlayerData::Preload() - unable to find sfxProfile for asset %d %s", i, mPlayerSoundAssetId[i]); + + const char* enumString = castConsoleTypeToString(static_cast(i)); + Con::printf("preload: %s = %s", enumString, mPlayerSoundAssetId[i]); } } @@ -1051,7 +1049,7 @@ void PlayerData::initPersistFields() addGroup( "Interaction: Sounds" ); - INITPERSISTFIELD_SOUNDASSET_ENUMED(PlayerSound, playerSoundsEnum, PlayerData::Sounds::MaxSounds, PlayerData, "Sounds related to player interaction."); + INITPERSISTFIELD_SOUNDASSET_ENUMED(PlayerSound, playerSoundsEnum, PlayerData::Sounds::MaxSounds, PlayerData, "Sounds related to player interaction."); endGroup( "Interaction: Sounds" ); @@ -1277,7 +1275,7 @@ void PlayerData::packData(BitStream* stream) stream->write(minLateralImpactSpeed); for (U32 i = 0; i < MaxSounds; i++) - PACKDATA_SOUNDASSET_ARRAY(PlayerSound, i); + PACKDATA_SOUNDASSET_ARRAY_ENUMED(PlayerSound, PlayerData::Sounds, i); mathWrite(*stream, boxSize); mathWrite(*stream, crouchBoxSize); @@ -1458,7 +1456,7 @@ void PlayerData::unpackData(BitStream* stream) stream->read(&minLateralImpactSpeed); for (U32 i = 0; i < MaxSounds; i++) - UNPACKDATA_SOUNDASSET_ARRAY(PlayerSound, i); + UNPACKDATA_SOUNDASSET_ARRAY_ENUMED(PlayerSound, PlayerData::Sounds, i); mathRead(*stream, &boxSize); mathRead(*stream, &crouchBoxSize); @@ -7059,7 +7057,7 @@ void Player::playFootstepSound( bool triggeredLeft, Material* contactMaterial, S // Play default sound. S32 sound = -1; - if (contactMaterial && (contactMaterial->mFootstepSoundId>-1 && contactMaterial->mFootstepSoundIdmFootstepSoundId > -1 && contactMaterial->mFootstepSoundId < PlayerData::WaterStart)) sound = contactMaterial->mFootstepSoundId; else if( contactObject && contactObject->getTypeMask() & VehicleObjectType ) sound = 2; @@ -7090,13 +7088,13 @@ void Player:: playImpactSound() else { S32 sound = -1; - if (material && (material->mImpactSoundId>-1 && material->mImpactSoundIdmImpactSoundId > -1 && material->mImpactSoundId < PlayerData::WaterStart)) sound = material->mImpactSoundId; else if( rInfo.object->getTypeMask() & VehicleObjectType ) sound = 2; // Play metal; if (sound >= 0) - SFX->playOnce(mDataBlock->getPlayerSoundProfile(PlayerData::ImpactStart + sound), &getTransform()); + SFX->playOnce(mDataBlock->getPlayerSoundProfile(PlayerData::ImpactSoft + sound), &getTransform()); } } } diff --git a/Engine/source/T3D/player.h b/Engine/source/T3D/player.h index 5b775a79f..55430749c 100644 --- a/Engine/source/T3D/player.h +++ b/Engine/source/T3D/player.h @@ -201,8 +201,8 @@ struct PlayerData: public ShapeBaseData { FootHard, FootMetal, FootSnow, - MaxSoundOffsets, - FootShallowSplash, + WaterStart, + FootShallowSplash = WaterStart, FootWading, FootUnderWater, FootBubbles,