Browse Source

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

AzaezelX 3 years ago
parent
commit
19eb3c42f0
3 changed files with 77 additions and 38 deletions
  1. 44 3
      Engine/source/T3D/assets/SoundAsset.h
  2. 31 33
      Engine/source/T3D/player.cpp
  3. 2 2
      Engine/source/T3D/player.h

+ 44 - 3
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<enumType>(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<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
 
 #endif // _ASSET_BASE_H_

+ 31 - 33
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<Sounds>(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->mFootstepSoundId<PlayerData::MaxSoundOffsets))
+      if (contactMaterial && (contactMaterial->mFootstepSoundId > -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->mImpactSoundId<PlayerData::MaxSoundOffsets))
+            if (material && (material->mImpactSoundId > -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());
          }
       }
    }

+ 2 - 2
Engine/source/T3D/player.h

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