Browse Source

-SoundAsset added init for enum types.
-Vehicles updated to use enum initpersistfield.

marauder2k7 3 years ago
parent
commit
6bec47d3fa

+ 10 - 0
Engine/source/T3D/assets/SoundAsset.h

@@ -371,6 +371,16 @@ DefineEngineMethod(className, set##name, bool, (const char*  shape), , assetText
 
 #pragma endregion
 
+#define assetEnumNameConcat(x,suff,ForT)(new std::string(std::string(#x) + suff + std::string(#ForT)))->c_str()
+
+#define INITPERSISTFIELD_SOUNDASSET_ENUMED(name, enumType, maxValue, consoleClass, docs) \
+   for (U32 i = 0; i <= maxValue; i++)\
+   {\
+      const char* enumString = castConsoleTypeToString(static_cast<enumType>(i));\
+      addProtectedField(assetEnumNameConcat(name,enumString, File), TypeSoundFilename, Offset(m##name##Name[i], consoleClass), _set##name##Data, & defaultProtectedGetFn, assetText(name, docs), AbstractClassRep::FIELD_HideInInspectors); \
+      addProtectedField(assetEnumNameConcat(name,enumString, Asset), TypeSoundAssetId, Offset(m##name##AssetId[i], consoleClass), _set##name##Data, & defaultProtectedGetFn, assetText(name, asset reference.));\
+   }\
+
 #pragma region Arrayed Asset Macros
 
 #define DECLARE_SOUNDASSET_ARRAY(className,name,max) public: \

+ 12 - 2
Engine/source/T3D/vehicles/hoverVehicle.cpp

@@ -68,6 +68,16 @@ ConsoleDocClass( HoverVehicle,
    "@ingroup Vehicles\n"
 );
 
+typedef HoverVehicleData::Sounds hoverSoundsEnum;
+DefineEnumType(hoverSoundsEnum);
+
+ImplementEnumType(hoverSoundsEnum, "enum types.\n"
+   "@ingroup HoverVehicleData\n\n")
+   { HoverVehicleData::JetSound,       "JetSound", "..." },
+   { HoverVehicleData::EngineSound,    "EngineSound", "..." },
+   { HoverVehicleData::FloatSound,     "FloatSound", "..." },
+EndImplementEnumType;
+
 namespace {
 
 const U32 sCollisionMoveMask = (TerrainObjectType     | PlayerObjectType  | 
@@ -232,7 +242,7 @@ void HoverVehicleData::initPersistFields()
    addField( "pitchForce", TypeF32, Offset(pitchForce, HoverVehicleData),
       "Pitch (rotation about the X-axis) force applied when steering in the y-axis direction." );
 
-   INITPERSISTFIELD_SOUNDASSET_ARRAY(HoverSounds, Sounds::MaxSounds, HoverVehicleData, "Sounds for hover vehicle.");
+   INITPERSISTFIELD_SOUNDASSET_ENUMED(HoverSounds, hoverSoundsEnum, Sounds::MaxSounds, HoverVehicleData, "Sounds for hover vehicle.");
    
    addField( "dustTrailEmitter", TYPEID< ParticleEmitterData >(), Offset(dustTrailEmitter, HoverVehicleData),
       "Emitter to generate particles for the vehicle's dust trail.\nThe trail "
@@ -307,7 +317,7 @@ bool HoverVehicleData::preload(bool server, String &errorStr)
    if (!server) {
 
       for (S32 i = 0; i < MaxSounds; i++)
-         if (mHoverSounds[i])
+         if (getHoverSounds(i) != StringTable->EmptyString())
          {
             _setHoverSounds(getHoverSounds(i), i);
          }

+ 26 - 4
Engine/source/T3D/vehicles/vehicle.cpp

@@ -80,6 +80,28 @@ static U32 sTriggerMask = ItemObjectType     |
 
 IMPLEMENT_CONOBJECT(VehicleData);
 
+typedef VehicleData::Body::Sounds bodySounds;
+DefineEnumType(bodySounds);
+
+ImplementEnumType(bodySounds, "enum types.\n"
+   "@ingroup VehicleData\n\n")
+   { VehicleData::Body::SoftImpactSound,  "SoftImpactSound", "..." },
+   { VehicleData::Body::HardImpactSound,  "HardImpactSound", "..." },
+EndImplementEnumType;
+
+
+typedef VehicleData::Sounds vehSoundsEnum;
+DefineEnumType(vehSoundsEnum);
+
+ImplementEnumType(vehSoundsEnum, "enum types.\n"
+   "@ingroup VehicleData\n\n")
+   { VehicleData::ExitWater,     "ExitWater", "..." },
+   { VehicleData::ImpactSoft,    "ImpactSoft", "..." },
+   { VehicleData::ImpactMedium,  "ImpactMedium", "..." },
+   { VehicleData::ImpactHard,    "ImpactHard", "..." },
+   { VehicleData::Wake,          "Wake", "..." },
+EndImplementEnumType;
+
 ConsoleDocClass( VehicleData,
    "@brief Base properties shared by all Vehicles (FlyingVehicle, HoverVehicle, "
    "WheeledVehicle).\n\n"
@@ -219,7 +241,7 @@ bool VehicleData::preload(bool server, String &errorStr)
    if (!server) {
       for (S32 i = 0; i < Body::MaxSounds; i++)
       {
-         if (mVehicleBodySounds[i])
+         if (getVehicleBodySounds(i) != StringTable->EmptyString() )
          {
             _setVehicleBodySounds(getVehicleBodySounds(i), i);
          }
@@ -227,7 +249,7 @@ bool VehicleData::preload(bool server, String &errorStr)
 
       for (S32 j = 0; j < Sounds::MaxSounds; j++)
       {
-         if (mVehicleWaterSounds[j])
+         if (getVehicleWaterSounds(j) != StringTable->EmptyString()) 
          {
             _setVehicleWaterSounds(getVehicleWaterSounds(j), j);
          }
@@ -503,7 +525,7 @@ void VehicleData::initPersistFields()
       "Collision friction coefficient.\nHow well this object will slide against "
       "objects it collides with." );
 
-   INITPERSISTFIELD_SOUNDASSET_ARRAY(VehicleBodySounds, Body::Sounds::MaxSounds, VehicleData, "Sounds for vehicle body impacts.");
+   INITPERSISTFIELD_SOUNDASSET_ENUMED(VehicleBodySounds, bodySounds, Body::Sounds::MaxSounds, VehicleData, "Sounds for vehicle body impacts.");
 
    addField( "minImpactSpeed", TypeF32, Offset(minImpactSpeed, VehicleData),
       "Minimum collision speed for the onImpact callback to be invoked." );
@@ -601,7 +623,7 @@ void VehicleData::initPersistFields()
       "Minimum velocity when entering the water for the imapactWaterHard sound "
       "to play.\n\n@see impactWaterHard" );
 
-   INITPERSISTFIELD_SOUNDASSET_ARRAY(WaterSounds, Sounds::MaxSounds, VehicleData, "Sounds for interacting with water.");
+   INITPERSISTFIELD_SOUNDASSET_ENUMED(WaterSounds, vehSoundsEnum, VehicleData::Sounds::MaxSounds, VehicleData, "Sounds for interacting with water.");
 
    addField( "collDamageThresholdVel", TypeF32, Offset(collDamageThresholdVel, VehicleData),
       "Minimum collision velocity to cause damage to this vehicle.\nCurrently unused." );

+ 13 - 2
Engine/source/T3D/vehicles/wheeledVehicle.cpp

@@ -289,6 +289,17 @@ ConsoleDocClass( WheeledVehicleData,
    "@ingroup Vehicles\n"
 );
 
+typedef WheeledVehicleData::Sounds wheelSoundsEnum;
+DefineEnumType(wheelSoundsEnum);
+
+ImplementEnumType(wheelSoundsEnum, "enum types.\n"
+   "@ingroup WheeledVehicleData\n\n")
+   {WheeledVehicleData::JetSound,          "JetSound", "..." },
+   {WheeledVehicleData::EngineSound,       "EngineSound", "..." },
+   {WheeledVehicleData::SquealSound,       "SquealSound", "..." },
+   {WheeledVehicleData::WheelImpactSound,  "WheelImpactSound", "..." },
+EndImplementEnumType;
+
 WheeledVehicleData::WheeledVehicleData()
 {
    tireEmitter = 0;
@@ -335,7 +346,7 @@ bool WheeledVehicleData::preload(bool server, String &errorStr)
    if (!server) {
       for (S32 i = 0; i < MaxSounds; i++)
       {
-         if (mWheeledVehicleSounds[i])
+         if (getWheeledVehicleSounds(i) != StringTable->EmptyString())
          {
             _setWheeledVehicleSounds(getWheeledVehicleSounds(i), i);
          }
@@ -437,7 +448,7 @@ bool WheeledVehicleData::mirrorWheel(Wheel* we)
 
 void WheeledVehicleData::initPersistFields()
 {
-   INITPERSISTFIELD_SOUNDASSET_ARRAY(WheeledVehicleSounds, Sounds::MaxSounds, WheeledVehicleData, "Sounds related to wheeled vehicle.");
+   INITPERSISTFIELD_SOUNDASSET_ENUMED(WheeledVehicleSounds, wheelSoundsEnum, MaxSounds, WheeledVehicleData, "Sounds related to wheeled vehicle.");
 
    addField("tireEmitter",TYPEID< ParticleEmitterData >(), Offset(tireEmitter, WheeledVehicleData),
       "ParticleEmitterData datablock used to generate particles from each wheel "

+ 1 - 0
Engine/source/T3D/vehicles/wheeledVehicle.h

@@ -118,6 +118,7 @@ struct WheeledVehicleData: public VehicleData
       WheelImpactSound,
       MaxSounds,
    };
+
    DECLARE_SOUNDASSET_ARRAY(WheeledVehicleData, WheeledVehicleSounds, Sounds::MaxSounds);
    DECLARE_SOUNDASSET_ARRAY_SETGET(WheeledVehicleData, WheeledVehicleSounds);