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

This commit is contained in:
AzaezelX 2021-10-02 21:05:04 -05:00
parent 0760621212
commit 19eb3c42f0
3 changed files with 77 additions and 38 deletions

View file

@ -381,11 +381,18 @@ DefineEngineMethod(className, set##name, bool, (const char* shape), , assetText
{\ {\
const char* enumString = castConsoleTypeToString(static_cast<enumType>(i));\ const char* enumString = castConsoleTypeToString(static_cast<enumType>(i));\
if (enumString && enumString[0])\ 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, 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.));\ 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 #pragma region Arrayed Asset Macros
#define DECLARE_SOUNDASSET_ARRAY(className,name,max) public: \ #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##Name[index] = other.m##name##Name[index];\
m##name##AssetId[index] = other.m##name##AssetId[index];\ m##name##AssetId[index] = other.m##name##AssetId[index];\
m##name##Asset[index] = other.m##name##Asset[index];\ m##name##Asset[index] = other.m##name##Asset[index];\
m##name[index] = = other.m##name[index];\
} }
#define LOAD_SOUNDASSET_ARRAY(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);\ _set##name(m##name##AssetId[index], index);\
}\ }\
else\ 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)\ #define PACK_SOUNDASSET_ARRAY(netconn, name, index)\
if (stream->writeFlag(m##name##Asset[index].notNull()))\ 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);\ _set##name(m##name##AssetId[index], index);\
}\ }\
else\ 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<enumType>(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<enumType>(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 #pragma endregion
#endif // _ASSET_BASE_H_ #endif // _ASSET_BASE_H_

View file

@ -194,24 +194,24 @@ DefineEnumType(playerSoundsEnum);
ImplementEnumType(playerSoundsEnum, "enum types.\n" ImplementEnumType(playerSoundsEnum, "enum types.\n"
"@ingroup PlayerData\n\n") "@ingroup PlayerData\n\n")
{PlayerData::Sounds::FootSoft, "FootSoft","..." }, { playerSoundsEnum::FootSoft, "FootSoft", "..." },
{PlayerData::Sounds::FootHard, "FootHard","..." }, { playerSoundsEnum::FootHard, "FootHard","..." },
{PlayerData::Sounds::FootMetal, "FootMetal","..." }, { playerSoundsEnum::FootMetal, "FootMetal","..." },
{PlayerData::Sounds::FootSnow, "FootSnow","..." }, { playerSoundsEnum::FootSnow, "FootSnow","..." },
{PlayerData::Sounds::FootShallowSplash, "FootShallowSplash","..." }, { playerSoundsEnum::FootShallowSplash, "FootShallowSplash","..." },
{PlayerData::Sounds::FootWading, "FootWading","..." }, { playerSoundsEnum::FootWading, "FootWading","..." },
{PlayerData::Sounds::FootUnderWater, "FootUnderWater","..." }, { playerSoundsEnum::FootUnderWater, "FootUnderWater","..." },
{PlayerData::Sounds::FootBubbles, "FootBubbles","..." }, { playerSoundsEnum::FootBubbles, "FootBubbles","..." },
{PlayerData::Sounds::MoveBubbles, "MoveBubbles","..." }, { playerSoundsEnum::MoveBubbles, "MoveBubbles","..." },
{PlayerData::Sounds::WaterBreath, "WaterBreath","..." }, { playerSoundsEnum::WaterBreath, "WaterBreath","..." },
{PlayerData::Sounds::ImpactSoft, "ImpactSoft","..." }, { playerSoundsEnum::ImpactSoft, "ImpactSoft","..." },
{PlayerData::Sounds::ImpactHard, "ImpactHard","..." }, { playerSoundsEnum::ImpactHard, "ImpactHard","..." },
{PlayerData::Sounds::ImpactMetal, "ImpactMetal","..." }, { playerSoundsEnum::ImpactMetal, "ImpactMetal","..." },
{PlayerData::Sounds::ImpactSnow, "ImpactSnow","..." }, { playerSoundsEnum::ImpactSnow, "ImpactSnow","..." },
{PlayerData::Sounds::ImpactWaterEasy, "ImpactWaterEasy","..." }, { playerSoundsEnum::ImpactWaterEasy, "ImpactWaterEasy","..." },
{PlayerData::Sounds::ImpactWaterMedium, "ImpactWaterMedium","..." }, { playerSoundsEnum::ImpactWaterMedium, "ImpactWaterMedium","..." },
{PlayerData::Sounds::ImpactWaterHard, "ImpactWaterHard","..." }, { playerSoundsEnum::ImpactWaterHard, "ImpactWaterHard","..." },
{PlayerData::Sounds::ExitWater, "ExitWater","..." }, { playerSoundsEnum::ExitWater, "ExitWater","..." },
EndImplementEnumType; EndImplementEnumType;
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -469,18 +469,16 @@ bool PlayerData::preload(bool server, String &errorStr)
if(!Parent::preload(server, errorStr)) if(!Parent::preload(server, errorStr))
return false; return false;
// Resolve objects transmitted from server for (U32 i = 0; i < MaxSounds; ++i)
if( !server )
{ {
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)) 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<Sounds>(i));
Con::printf("preload: %s = %s", enumString, mPlayerSoundAssetId[i]);
} }
} }
@ -1051,7 +1049,7 @@ void PlayerData::initPersistFields()
addGroup( "Interaction: Sounds" ); 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" ); endGroup( "Interaction: Sounds" );
@ -1277,7 +1275,7 @@ void PlayerData::packData(BitStream* stream)
stream->write(minLateralImpactSpeed); stream->write(minLateralImpactSpeed);
for (U32 i = 0; i < MaxSounds; i++) 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, boxSize);
mathWrite(*stream, crouchBoxSize); mathWrite(*stream, crouchBoxSize);
@ -1458,7 +1456,7 @@ void PlayerData::unpackData(BitStream* stream)
stream->read(&minLateralImpactSpeed); stream->read(&minLateralImpactSpeed);
for (U32 i = 0; i < MaxSounds; i++) 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, &boxSize);
mathRead(*stream, &crouchBoxSize); mathRead(*stream, &crouchBoxSize);
@ -7059,7 +7057,7 @@ void Player::playFootstepSound( bool triggeredLeft, Material* contactMaterial, S
// Play default sound. // Play default sound.
S32 sound = -1; S32 sound = -1;
if (contactMaterial && (contactMaterial->mFootstepSoundId>-1 && contactMaterial->mFootstepSoundId<PlayerData::MaxSoundOffsets)) if (contactMaterial && (contactMaterial->mFootstepSoundId > -1 && contactMaterial->mFootstepSoundId < PlayerData::WaterStart))
sound = contactMaterial->mFootstepSoundId; sound = contactMaterial->mFootstepSoundId;
else if( contactObject && contactObject->getTypeMask() & VehicleObjectType ) else if( contactObject && contactObject->getTypeMask() & VehicleObjectType )
sound = 2; sound = 2;
@ -7090,13 +7088,13 @@ void Player:: playImpactSound()
else else
{ {
S32 sound = -1; S32 sound = -1;
if (material && (material->mImpactSoundId>-1 && material->mImpactSoundId<PlayerData::MaxSoundOffsets)) if (material && (material->mImpactSoundId > -1 && material->mImpactSoundId < PlayerData::WaterStart))
sound = material->mImpactSoundId; sound = material->mImpactSoundId;
else if( rInfo.object->getTypeMask() & VehicleObjectType ) else if( rInfo.object->getTypeMask() & VehicleObjectType )
sound = 2; // Play metal; sound = 2; // Play metal;
if (sound >= 0) if (sound >= 0)
SFX->playOnce(mDataBlock->getPlayerSoundProfile(PlayerData::ImpactStart + sound), &getTransform()); SFX->playOnce(mDataBlock->getPlayerSoundProfile(PlayerData::ImpactSoft + sound), &getTransform());
} }
} }
} }

View file

@ -201,8 +201,8 @@ struct PlayerData: public ShapeBaseData {
FootHard, FootHard,
FootMetal, FootMetal,
FootSnow, FootSnow,
MaxSoundOffsets, WaterStart,
FootShallowSplash, FootShallowSplash = WaterStart,
FootWading, FootWading,
FootUnderWater, FootUnderWater,
FootBubbles, FootBubbles,