diff --git a/Engine/source/T3D/accumulationVolume.cpp b/Engine/source/T3D/accumulationVolume.cpp index 37e9f4ae9..139a843b9 100644 --- a/Engine/source/T3D/accumulationVolume.cpp +++ b/Engine/source/T3D/accumulationVolume.cpp @@ -85,7 +85,7 @@ AccumulationVolume::AccumulationVolume() mWorldToObj.identity(); // Accumulation Texture. - INIT_IMAGEASSET(Texture); + INIT_ASSET(Texture); resetWorldBox(); } @@ -236,7 +236,7 @@ U32 AccumulationVolume::packUpdate( NetConnection *connection, U32 mask, BitStre if (stream->writeFlag(mask & InitialUpdateMask)) { - PACK_IMAGEASSET(connection, Texture); + PACK_ASSET(connection, Texture); } return retMask; @@ -248,7 +248,7 @@ void AccumulationVolume::unpackUpdate( NetConnection *connection, BitStream *str if (stream->readFlag()) { - UNPACK_IMAGEASSET(connection, Texture); + UNPACK_ASSET(connection, Texture); //setTexture(mTextureName); } } diff --git a/Engine/source/T3D/accumulationVolume.h b/Engine/source/T3D/accumulationVolume.h index 2b05fa81b..4c4049b6c 100644 --- a/Engine/source/T3D/accumulationVolume.h +++ b/Engine/source/T3D/accumulationVolume.h @@ -62,7 +62,7 @@ class AccumulationVolume : public ScenePolyhedralSpace virtual void _renderObject( ObjectRenderInst* ri, SceneRenderState* state, BaseMatInstance* overrideMat ); DECLARE_IMAGEASSET(AccumulationVolume, Texture, onTextureChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_NET_SETGET(AccumulationVolume, Texture, -1); + DECLARE_ASSET_NET_SETGET(AccumulationVolume, Texture, -1); void onTextureChanged() {} diff --git a/Engine/source/T3D/assets/ImageAsset.h b/Engine/source/T3D/assets/ImageAsset.h index ff50ef655..d4de538f7 100644 --- a/Engine/source/T3D/assets/ImageAsset.h +++ b/Engine/source/T3D/assets/ImageAsset.h @@ -47,7 +47,7 @@ #include "sim/netConnection.h" #include - +#include "assetMacroHelpers.h" //----------------------------------------------------------------------------- class ImageAsset : public AssetBase { @@ -270,46 +270,8 @@ public: \ GFXTexHandle get##name##Resource() \ {\ return m##name;\ - } - -#define DECLARE_IMAGEASSET_SETGET(className, name)\ - static bool _set##name##Data(void* obj, const char* index, const char* data)\ - {\ - bool ret = false;\ - className* object = static_cast(obj);\ - ret = object->_set##name(StringTable->insert(data));\ - return ret;\ - } - -#define DECLARE_IMAGEASSET_NET_SETGET(className, name, bitmask)\ - static bool _set##name##Data(void* obj, const char* index, const char* data)\ - {\ - bool ret = false;\ - className* object = static_cast(obj);\ - ret = object->_set##name(StringTable->insert(data));\ - if(ret)\ - object->setMaskBits(bitmask);\ - return ret;\ - } - -#define DEF_IMAGEASSET_BINDS(className,name)\ -DefineEngineMethod(className, get##name, const char*, (), , "get name")\ -{\ - return object->get##name(); \ -}\ -DefineEngineMethod(className, get##name##Asset, const char*, (), , assetText(name, asset reference))\ -{\ - return object->m##name##AssetId; \ -}\ -DefineEngineMethod(className, set##name, bool, (const char* map), , assetText(name,assignment. first tries asset then flat file.))\ -{\ - return object->_set##name(StringTable->insert(map));\ -} - -#define INIT_IMAGEASSET(name) \ - m##name##Name = StringTable->EmptyString(); \ - m##name##AssetId = StringTable->EmptyString(); \ - m##name##Asset = NULL; + }\ + bool name##Valid() {return (get##name() != StringTable->EmptyString() && m##name##Asset->getStatus() == AssetBase::Ok); } #ifdef TORQUE_SHOW_LEGACY_FILE_FIELDS @@ -325,11 +287,6 @@ DefineEngineMethod(className, set##name, bool, (const char* map), , assetText(na #endif // SHOW_LEGACY_FILE_FIELDS -#define CLONE_IMAGEASSET(name) \ - m##name##Name = other.m##name##Name;\ - m##name##AssetId = other.m##name##AssetId;\ - m##name##Asset = other.m##name##Asset; - #define LOAD_IMAGEASSET(name)\ if (m##name##AssetId != StringTable->EmptyString())\ {\ @@ -341,40 +298,6 @@ if (m##name##AssetId != StringTable->EmptyString())\ else Con::warnf("Warning: %s::LOAD_IMAGEASSET(%s)-%s", mClassName, m##name##AssetId, ImageAsset::getAssetErrstrn(assetState).c_str());\ } -#define PACKDATA_IMAGEASSET(name)\ - if (stream->writeFlag(m##name##Asset.notNull()))\ - {\ - stream->writeString(m##name##Asset.getAssetId());\ - _set##name(m##name##AssetId);\ - }\ - else\ - stream->writeString(m##name##Name); - -#define UNPACKDATA_IMAGEASSET(name)\ - if (stream->readFlag())\ - {\ - m##name##AssetId = stream->readSTString();\ - }\ - else\ - m##name##Name = stream->readSTString(); - -#define PACK_IMAGEASSET(netconn, name)\ - if (stream->writeFlag(m##name##Asset.notNull()))\ - {\ - NetStringHandle assetIdStr = m##name##Asset.getAssetId();\ - netconn->packNetStringHandleU(stream, assetIdStr);\ - }\ - else\ - stream->writeString(m##name##Name); - -#define UNPACK_IMAGEASSET(netconn, name)\ - if (stream->readFlag())\ - {\ - m##name##AssetId = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\ - _set##name(m##name##AssetId);\ - }\ - else\ - m##name##Name = stream->readSTString(); #pragma endregion @@ -491,7 +414,8 @@ public: \ if(index >= sm##name##Count || index < 0)\ return nullptr;\ return m##name[index];\ - } + }\ + bool name##Valid(const U32& id) {return (get##name(id) != StringTable->EmptyString() && m##name##Asset[id]->getStatus() == AssetBase::Ok); } #define DECLARE_IMAGEASSET_ARRAY_SETGET(className, name)\ static bool _set##name##Data(void* obj, const char* index, const char* data)\ @@ -537,13 +461,6 @@ DefineEngineMethod(className, set##name, bool, (const char* map, S32 index), , a return object->_set##name(StringTable->insert(map), index);\ } -#define INIT_IMAGEASSET_ARRAY(name, index) \ -{\ - m##name##Name[index] = StringTable->EmptyString(); \ - m##name##AssetId[index] = StringTable->EmptyString(); \ - m##name##Asset[index] = NULL;\ -} - #ifdef TORQUE_SHOW_LEGACY_FILE_FIELDS #define INITPERSISTFIELD_IMAGEASSET_ARRAY(name, arraySize, consoleClass, docs) \ @@ -558,13 +475,6 @@ DefineEngineMethod(className, set##name, bool, (const char* map, S32 index), , a #endif -#define CLONE_IMAGEASSET_ARRAY(name, index) \ -{\ - 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];\ -} - #define LOAD_IMAGEASSET_ARRAY(name, index)\ if (m##name##AssetId[index] != StringTable->EmptyString())\ {\ @@ -576,41 +486,6 @@ if (m##name##AssetId[index] != StringTable->EmptyString())\ else Con::warnf("Warning: %s::LOAD_IMAGEASSET(%s)-%s", mClassName, m##name##AssetId[index], ImageAsset::getAssetErrstrn(assetState).c_str());\ } -#define PACKDATA_IMAGEASSET_ARRAY(name, index)\ - if (stream->writeFlag(m##name##Asset[index].notNull()))\ - {\ - stream->writeString(m##name##Asset[index].getAssetId());\ - }\ - else\ - stream->writeString(m##name##Name[index]); - -#define UNPACKDATA_IMAGEASSET_ARRAY(name, index)\ - if (stream->readFlag())\ - {\ - m##name##AssetId[index] = stream->readSTString();\ - _set##name(m##name##AssetId[index], index);\ - }\ - else\ - m##name##Name[index] = stream->readSTString(); - -#define PACK_IMAGEASSET_ARRAY(netconn, name, index)\ - if (stream->writeFlag(m##name##Asset[index].notNull()))\ - {\ - NetStringHandle assetIdStr = m##name##Asset[index].getAssetId();\ - netconn->packNetStringHandleU(stream, assetIdStr);\ - }\ - else\ - stream->writeString(m##name##Name[index]); - -#define UNPACK_IMAGEASSET_ARRAY(netconn, name, index)\ - if (stream->readFlag())\ - {\ - m##name##AssetId[index] = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\ - _set##name(m##name##AssetId[index], index);\ - }\ - else\ - m##name##Name[index] = stream->readSTString(); - #pragma endregion diff --git a/Engine/source/T3D/assets/MaterialAsset.h b/Engine/source/T3D/assets/MaterialAsset.h index 75b1f6b96..a6dff23c8 100644 --- a/Engine/source/T3D/assets/MaterialAsset.h +++ b/Engine/source/T3D/assets/MaterialAsset.h @@ -54,6 +54,7 @@ #include "materials/materialDefinition.h" #include "materials/customMaterialDefinition.h" #include "materials/materialManager.h" +#include "assetMacroHelpers.h" //----------------------------------------------------------------------------- class MaterialAsset : public AssetBase @@ -260,47 +261,8 @@ public: \ SimObjectPtr get##name##Resource() \ {\ return m##name;\ - } - -#define DECLARE_MATERIALASSET_SETGET(className, name)\ - static bool _set##name##Data(void* obj, const char* index, const char* data)\ - {\ - bool ret = false;\ - className* object = static_cast(obj);\ - ret = object->_set##name(StringTable->insert(data));\ - return ret;\ - } - -#define DECLARE_MATERIALASSET_NET_SETGET(className, name, bitmask)\ - static bool _set##name##Data(void* obj, const char* index, const char* data)\ - {\ - bool ret = false;\ - className* object = static_cast(obj);\ - ret = object->_set##name(StringTable->insert(data));\ - if(ret)\ - object->setMaskBits(bitmask);\ - return ret;\ - } - -#define DEF_MATERIALASSET_BINDS(className,name)\ -DefineEngineMethod(className, get##name, const char*, (), , "get name")\ -{\ - return object->get##name(); \ -}\ -DefineEngineMethod(className, get##name##Asset, const char*, (), , assetText(name, asset reference))\ -{\ - return object->m##name##AssetId; \ -}\ -DefineEngineMethod(className, set##name, bool, (const char* mat), , assetText(name,assignment. first tries asset then material name.))\ -{\ - return object->_set##name(StringTable->insert(mat));\ -} - -#define INIT_MATERIALASSET(name) \ - m##name##Name = StringTable->EmptyString(); \ - m##name##AssetId = StringTable->EmptyString(); \ - m##name##Asset = NULL;\ - m##name = NULL; + }\ + bool is##name##Valid() {return (get##name() != StringTable->EmptyString() && m##name##Asset->getStatus() == AssetBase::Ok); } #ifdef TORQUE_SHOW_LEGACY_FILE_FIELDS @@ -316,11 +278,6 @@ DefineEngineMethod(className, set##name, bool, (const char* mat), , assetText(na #endif // SHOW_LEGACY_FILE_FIELDS -#define CLONE_MATERIALASSET(name) \ - m##name##Name = other.m##name##Name;\ - m##name##AssetId = other.m##name##AssetId;\ - m##name##Asset = other.m##name##Asset; - #define LOAD_MATERIALASSET(name)\ if (m##name##AssetId != StringTable->EmptyString())\ {\ @@ -331,42 +288,6 @@ if (m##name##AssetId != StringTable->EmptyString())\ }\ else Con::warnf("Warning: %s::LOAD_MATERIALASSET(%s)-%s", mClassName, m##name##AssetId, MaterialAsset::getAssetErrstrn(assetState).c_str());\ } - -#define PACKDATA_MATERIALASSET(name)\ - if (stream->writeFlag(m##name##Asset.notNull()))\ - {\ - stream->writeString(m##name##Asset.getAssetId());\ - }\ - else\ - stream->writeString(m##name##Name); - -#define UNPACKDATA_MATERIALASSET(name)\ - if (stream->readFlag())\ - {\ - m##name##AssetId = stream->readSTString();\ - _set##name(m##name##AssetId);\ - }\ - else\ - m##name##Name = stream->readSTString(); - -#define PACK_MATERIALASSET(netconn, name)\ - if (stream->writeFlag(m##name##Asset.notNull()))\ - {\ - NetStringHandle assetIdStr = m##name##Asset.getAssetId();\ - netconn->packNetStringHandleU(stream, assetIdStr);\ - }\ - else\ - stream->writeString(m##name##Name); - -#define UNPACK_MATERIALASSET(netconn, name)\ - if (stream->readFlag())\ - {\ - m##name##AssetId = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\ - _set##name(m##name##AssetId);\ - }\ - else\ - m##name##Name = stream->readSTString(); - #pragma endregion #endif // _ASSET_BASE_H_ diff --git a/Engine/source/T3D/assets/ShapeAsset.h b/Engine/source/T3D/assets/ShapeAsset.h index d5c899564..36a0a68c1 100644 --- a/Engine/source/T3D/assets/ShapeAsset.h +++ b/Engine/source/T3D/assets/ShapeAsset.h @@ -60,6 +60,7 @@ #ifndef _BITSTREAM_H_ #include "core/stream/bitStream.h" #endif +#include "assetMacroHelpers.h" //----------------------------------------------------------------------------- class ShapeAsset : public AssetBase { @@ -321,47 +322,8 @@ public: \ Resource get##name##Resource() \ {\ return m##name;\ - } - -#define DECLARE_SHAPEASSET_SETGET(className, name)\ - static bool _set##name##Data(void* obj, const char* index, const char* data)\ - {\ - bool ret = false;\ - className* object = static_cast(obj);\ - ret = object->_set##name(StringTable->insert(data));\ - return ret;\ - } - -#define DECLARE_SHAPEASSET_NET_SETGET(className, name, bitmask)\ - static bool _set##name##Data(void* obj, const char* index, const char* data)\ - {\ - bool ret = false;\ - className* object = static_cast(obj);\ - ret = object->_set##name(StringTable->insert(data));\ - if(ret)\ - object->setMaskBits(bitmask);\ - return ret;\ - } - -#define DEF_SHAPEASSET_BINDS(className,name)\ -DefineEngineMethod(className, get##name, String, (), , "get name")\ -{\ - return object->get##name(); \ -}\ -DefineEngineMethod(className, get##name##Asset, String, (), , assetText(name, asset reference))\ -{\ - return object->m##name##AssetId; \ -}\ -DefineEngineMethod(className, set##name, bool, (const char* shape), , assetText(name,assignment. first tries asset then flat file.))\ -{\ - return object->_set##name(StringTable->insert(shape));\ -} - -#define INIT_SHAPEASSET(name) \ - m##name##Name = StringTable->EmptyString(); \ - m##name##AssetId = StringTable->EmptyString(); \ - m##name##Asset = NULL; \ - m##name = NULL; + }\ + bool is##name##Valid() {return (get##name() != StringTable->EmptyString() && m##name##Asset->getStatus() == AssetBase::Ok); } #ifdef TORQUE_SHOW_LEGACY_FILE_FIELDS @@ -377,46 +339,6 @@ DefineEngineMethod(className, set##name, bool, (const char* shape), , assetText #endif // SHOW_LEGACY_FILE_FIELDS -#define CLONE_SHAPEASSET(name) \ - m##name##Name = other.m##name##Name;\ - m##name##AssetId = other.m##name##AssetId;\ - m##name##Asset = other.m##name##Asset;\ - -#define PACKDATA_SHAPEASSET(name)\ - if (stream->writeFlag(m##name##Asset.notNull()))\ - {\ - stream->writeString(m##name##Asset.getAssetId());\ - }\ - else\ - stream->writeString(m##name##Name); - -#define UNPACKDATA_SHAPEASSET(name)\ - if (stream->readFlag())\ - {\ - m##name##AssetId = stream->readSTString();\ - _set##name(m##name##AssetId);\ - }\ - else\ - m##name##Name = stream->readSTString(); - -#define PACK_SHAPEASSET(netconn, name)\ - if (stream->writeFlag(m##name##Asset.notNull()))\ - {\ - NetStringHandle assetIdStr = m##name##Asset.getAssetId();\ - netconn->packNetStringHandleU(stream, assetIdStr);\ - }\ - else\ - stream->writeString(m##name##Name); - -#define UNPACK_SHAPEASSET(netconn, name)\ - if (stream->readFlag())\ - {\ - m##name##AssetId = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\ - _set##name(m##name##AssetId);\ - }\ - else\ - m##name##Name = stream->readSTString(); - #pragma endregion #pragma region Arrayed Asset Macros @@ -519,59 +441,8 @@ public: \ if(index >= sm##name##Count || index < 0)\ return ResourceManager::get().load( "" );\ return m##name[index];\ - } - -#define DECLARE_SHAPEASSET_ARRAY_SETGET(className, name)\ - static bool _set##name##Data(void* obj, const char* index, const char* data)\ - {\ - if (!index) return false;\ - U32 idx = dAtoi(index);\ - if (idx >= sm##name##Count)\ - return false;\ - bool ret = false;\ - className* object = static_cast(obj);\ - ret = object->_set##name(StringTable->insert(data), idx);\ - return ret;\ - } - -#define DECLARE_SHAPEASSET_ARRAY_NET_SETGET(className, name, bitmask)\ - static bool _set##name##Data(void* obj, const char* index, const char* data)\ - {\ - if (!index) return false;\ - U32 idx = dAtoi(index);\ - if (idx >= sm##name##Count)\ - return false;\ - bool ret = false;\ - className* object = static_cast(obj);\ - ret = object->_set##name(StringTable->insert(data), idx);\ - if(ret)\ - object->setMaskBits(bitmask);\ - return ret;\ - } - -#define DEF_SHAPEASSET_ARRAY_BINDS(className,name)\ -DefineEngineMethod(className, get##name, String, (S32 index), , "get name")\ -{\ - return object->get##name(index); \ -}\ -DefineEngineMethod(className, get##name##Asset, String, (S32 index), , assetText(name, asset reference))\ -{\ - if(index >= className::sm##name##Count || index < 0)\ - return "";\ - return object->m##name##AssetId[index]; \ -}\ -DefineEngineMethod(className, set##name, bool, (const char* shape, S32 index), , assetText(name,assignment. first tries asset then flat file.))\ -{\ - return object->_set##name(StringTable->insert(shape), index);\ -} - -#define INIT_SHAPEASSET_ARRAY(name, index) \ -{\ - m##name##Name[index] = StringTable->EmptyString(); \ - m##name##AssetId[index] = StringTable->EmptyString(); \ - m##name##Asset[index] = NULL; \ - m##name[index] = NULL;\ -} + }\ + bool is##name##Valid(const U32& id) {return (get##name(id) != StringTable->EmptyString() && m##name##Asset[id]->getStatus() == AssetBase::Ok); } #ifdef TORQUE_SHOW_LEGACY_FILE_FIELDS @@ -587,48 +458,6 @@ DefineEngineMethod(className, set##name, bool, (const char* shape, S32 index), #endif // SHOW_LEGACY_FILE_FIELDS -#define CLONE_SHAPEASSET_ARRAY(name, index) \ -{\ - 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];\ -} - -#define PACKDATA_SHAPEASSET_ARRAY(name, index)\ - if (stream->writeFlag(m##name##Asset[index].notNull()))\ - {\ - stream->writeString(m##name##Asset[index].getAssetId());\ - }\ - else\ - stream->writeString(m##name##Name[index]); - -#define UNPACKDATA_SHAPEASSET_ARRAY(name, index)\ - if (stream->readFlag())\ - {\ - m##name##AssetId[index] = stream->readSTString();\ - _set##name(m##name##AssetId[index], index);\ - }\ - else\ - m##name##Name[index] = stream->readSTString(); - -#define PACK_SHAPEASSET_ARRAY(netconn, name, index)\ - if (stream->writeFlag(m##name##Asset[index].notNull()))\ - {\ - NetStringHandle assetIdStr = m##name##Asset[index].getAssetId();\ - netconn->packNetStringHandleU(stream, assetIdStr);\ - }\ - else\ - stream->writeString(m##name##Name[index]); - -#define UNPACK_SHAPEASSET_ARRAY(netconn, name, index)\ - if (stream->readFlag())\ - {\ - m##name##AssetId[index] = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\ - _set##name(m##name##AssetId[index], index);\ - }\ - else\ - m##name##Name[index] = stream->readSTString(); - #pragma endregion #endif diff --git a/Engine/source/T3D/assets/SoundAsset.cpp b/Engine/source/T3D/assets/SoundAsset.cpp index d00c0dbe2..45f78bc48 100644 --- a/Engine/source/T3D/assets/SoundAsset.cpp +++ b/Engine/source/T3D/assets/SoundAsset.cpp @@ -107,6 +107,7 @@ ConsoleSetType(TypeSoundAssetId) //----------------------------------------------------------------------------- SoundAsset::SoundAsset() + : AssetBase() { mSoundFile = StringTable->EmptyString(); mSoundPath = StringTable->EmptyString(); @@ -278,18 +279,18 @@ StringTableEntry SoundAsset::getAssetIdByFileName(StringTableEntry fileName) return materialAssetId; } -U32 SoundAsset::getAssetById(StringTableEntry assetId, AssetPtr* materialAsset) +U32 SoundAsset::getAssetById(StringTableEntry assetId, AssetPtr* soundAsset) { - (*materialAsset) = assetId; + (*soundAsset) = assetId; - if (materialAsset->notNull()) + if (soundAsset->notNull()) { - return (*materialAsset)->mLoadedState; + return (*soundAsset)->mLoadedState; } else { //Well that's bad, loading the fallback failed. - Con::warnf("MaterialAsset::getAssetById - Finding of asset with id %s failed with no fallback asset", assetId); + Con::warnf("SoundAsset::getAssetById - Finding of asset with id %s failed with no fallback asset", assetId); return AssetErrCode::Failed; } } diff --git a/Engine/source/T3D/assets/SoundAsset.h b/Engine/source/T3D/assets/SoundAsset.h index 710652830..d320986b9 100644 --- a/Engine/source/T3D/assets/SoundAsset.h +++ b/Engine/source/T3D/assets/SoundAsset.h @@ -57,6 +57,7 @@ #include "sfx/sfxProfile.h" #endif // !_SFXPROFILE_H_ +#include "assetMacroHelpers.h" class SFXResource; //----------------------------------------------------------------------------- @@ -234,7 +235,11 @@ public: \ {\ m##name = NULL;\ }\ + if(get##name() == StringTable->EmptyString())\ + return true;\ \ + if(get##name() == StringTable->EmptyString())\ + return true;\ if (m##name##Asset.notNull() && m##name##Asset->getStatus() != SoundAsset::Ok)\ {\ Con::errorf("%s(%s)::_set%s() - sound asset failure\"%s\" due to [%s]", macroText(className), getName(), macroText(name), _in, SoundAsset::getAssetErrstrn(m##name##Asset->getStatus()).c_str());\ @@ -262,47 +267,14 @@ public: \ Resource get##name##Resource() \ {\ return m##name;\ - } - -#define DECLARE_SOUNDASSET_SETGET(className, name)\ - static bool _set##name##Data(void* obj, const char* index, const char* data)\ + }\ + SFXProfile* get##name##Profile()\ {\ - bool ret = false;\ - className* object = static_cast(obj);\ - ret = object->_set##name(StringTable->insert(data));\ - return ret;\ - } - -#define DECLARE_SOUNDASSET_NET_SETGET(className, name, bitmask)\ - static bool _set##name##Data(void* obj, const char* index, const char* data)\ - {\ - bool ret = false;\ - className* object = static_cast(obj);\ - ret = object->_set##name(StringTable->insert(data));\ - if(ret)\ - object->setMaskBits(bitmask);\ - return ret;\ - } - -#define DEF_SOUNDASSET_BINDS(className,name)\ -DefineEngineMethod(className, get##name, String, (), , "get name")\ -{\ - return object->get##name(); \ -}\ -DefineEngineMethod(className, get##name##Asset, String, (), , assetText(name, asset reference))\ -{\ - return object->m##name##AssetId; \ -}\ -DefineEngineMethod(className, set##name, bool, (const char* shape), , assetText(name,assignment. first tries asset then flat file.))\ -{\ - return object->_set##name(StringTable->insert(shape));\ -} - -#define INIT_SOUNDASSET(name) \ - m##name##Name = StringTable->EmptyString(); \ - m##name##AssetId = StringTable->EmptyString(); \ - m##name##Asset = NULL; \ - m##name = NULL;\ + if (get##name() != StringTable->EmptyString() && m##name##Asset.notNull())\ + return m##name##Asset->getSfxProfile();\ + return NULL;\ + }\ + bool is##name##Valid() { return (get##name() != StringTable->EmptyString() && m##name##Asset->getStatus() == AssetBase::Ok); } #ifdef TORQUE_SHOW_LEGACY_FILE_FIELDS @@ -318,46 +290,164 @@ DefineEngineMethod(className, set##name, bool, (const char* shape), , assetText #endif // TORQUE_SHOW_LEGACY_FILE_FIELDS -#define CLONE_SOUNDASSET(name) \ - m##name##Name = other.m##name##Name;\ - m##name##AssetId = other.m##name##AssetId;\ - m##name##Asset = other.m##name##Asset;\ +#pragma endregion -#define PACKDATA_SOUNDASSET(name)\ - if (stream->writeFlag(m##name##Asset.notNull()))\ +#pragma region Arrayed Asset Macros + +#define DECLARE_SOUNDASSET_ARRAY(className,name,max) public: \ + static const U32 sm##name##Count = max;\ + Resource m##name[max];\ + StringTableEntry m##name##Name[max]; \ + StringTableEntry m##name##AssetId[max];\ + AssetPtr m##name##Asset[max];\ + SFXProfile* m##name##Profile[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());}\ + const AssetPtr & get##name##Asset(const U32& index) const { return m##name##Asset[index]; }\ + void set##name##Asset(const AssetPtr &_in, const U32& index) { m##name##Asset[index] = _in;}\ + \ + bool _set##name(StringTableEntry _in, const U32& index)\ {\ - stream->writeString(m##name##Asset.getAssetId());\ + if(m##name##AssetId[index] != _in || m##name##Name[index] != _in)\ + {\ + if(index >= sm##name##Count || index < 0) \ + return false;\ + if (_in == NULL || _in == StringTable->EmptyString())\ + {\ + m##name##Name[index] = StringTable->EmptyString();\ + m##name##AssetId[index] = StringTable->EmptyString();\ + m##name##Asset[index] = NULL;\ + m##name[index] = NULL;\ + return true;\ + }\ + else if(_in[0] == '$' || _in[0] == '#')\ + {\ + m##name##Name[index] = _in;\ + m##name##AssetId[index] = StringTable->EmptyString();\ + m##name##Asset[index] = NULL;\ + m##name[index] = NULL;\ + return true;\ + }\ + \ + if (AssetDatabase.isDeclaredAsset(_in))\ + {\ + m##name##AssetId[index] = _in;\ + \ + U32 assetState = SoundAsset::getAssetById(m##name##AssetId[index], &m##name##Asset[index]);\ + \ + if (SoundAsset::Ok == assetState)\ + {\ + m##name##Name[index] = StringTable->EmptyString();\ + }\ + }\ + else\ + {\ + StringTableEntry assetId = SoundAsset::getAssetIdByFileName(_in);\ + if (assetId != StringTable->EmptyString())\ + {\ + m##name##AssetId[index] = assetId;\ + if(SoundAsset::getAssetById(m##name##AssetId[index], &m##name##Asset[index]) == SoundAsset::Ok)\ + {\ + m##name##Name[index] = StringTable->EmptyString();\ + }\ + }\ + else\ + {\ + m##name##Name[index] = _in;\ + m##name##AssetId[index] = StringTable->EmptyString();\ + m##name##Asset[index] = NULL;\ + }\ + }\ + }\ + if (get##name(index) != StringTable->EmptyString() && m##name##Asset[index].notNull())\ + {\ + m##name[index] = m##name##Asset[index]->getSoundResource();\ + }\ + else\ + {\ + m##name[index] = NULL;\ + }\ + if(get##name(index) == StringTable->EmptyString())\ + return true;\ + \ + if (m##name##Asset[index].notNull() && m##name##Asset[index]->getStatus() != SoundAsset::Ok)\ + {\ + Con::errorf("%s(%s)::_set%s(%i) - sound asset failure\"%s\" due to [%s]", macroText(className), getName(), macroText(name),index, _in, SoundAsset::getAssetErrstrn(m##name##Asset[index]->getStatus()).c_str());\ + return false; \ + }\ + else if (!m##name[index])\ + {\ + Con::errorf("%s(%s)::_set%s(%i) - Couldn't load sound \"%s\"", macroText(className), getName(), macroText(name),index, _in);\ + return false;\ + }\ + return true;\ }\ - else\ - stream->writeString(m##name##Name); - -#define UNPACKDATA_SOUNDASSET(name)\ - if (stream->readFlag())\ + \ + const StringTableEntry get##name(const U32& index) const\ {\ - m##name##AssetId = stream->readSTString();\ - _set##name(m##name##AssetId);\ + if (m##name##Asset[index] && (m##name##Asset[index]->getSoundPath() != StringTable->EmptyString()))\ + return m##name##Asset[index]->getSoundPath();\ + else if (m##name##AssetId[index] != StringTable->EmptyString())\ + return m##name##AssetId[index];\ + else if (m##name##Name[index] != StringTable->EmptyString())\ + return StringTable->insert(m##name##Name[index]);\ + else\ + return StringTable->EmptyString();\ }\ - else\ - m##name##Name = stream->readSTString(); - -#define PACK_SOUNDASSET(netconn, name)\ - if (stream->writeFlag(m##name##Asset.notNull()))\ + Resource get##name##Resource(const U32& id) \ {\ - NetStringHandle assetIdStr = m##name##Asset.getAssetId();\ - netconn->packNetStringHandleU(stream, assetIdStr);\ + if(id >= sm##name##Count || id < 0)\ + return ResourceManager::get().load( "" );\ + return m##name[id];\ }\ - else\ - stream->writeString(m##name##Name); - -#define UNPACK_SOUNDASSET(netconn, name)\ - if (stream->readFlag())\ + SFXProfile* get##name##Profile(const U32& id)\ {\ - m##name##AssetId = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\ - _set##name(m##name##AssetId);\ + if (get##name(id) != StringTable->EmptyString() && m##name##Asset[id].notNull())\ + return m##name##Asset[id]->getSfxProfile();\ + return NULL;\ }\ - else\ - m##name##Name = stream->readSTString(); + bool is##name##Valid(const U32& id) {return (get##name(id) != StringTable->EmptyString() && m##name##Asset[id]->getStatus() == AssetBase::Ok); } + +#ifdef TORQUE_SHOW_LEGACY_FILE_FIELDS + +#define INITPERSISTFIELD_IMAGEASSET_ARRAY(name, arraySize, consoleClass, docs) \ + addProtectedField(#name, TypeSoundFilename, Offset(m##name##Name, consoleClass), _set##name##Data, &defaultProtectedGetFn, arraySize, assetDoc(name, docs)); \ + addProtectedField(assetText(name, Asset), TypeImageAssetId, Offset(m##name##AssetId, consoleClass), _set##name##Data, &defaultProtectedGetFn, arraySize, assetDoc(name, asset docs.)); + +#else + +#define INITPERSISTFIELD_SOUNDASSET_ARRAY(name, arraySize, consoleClass, docs) \ + addProtectedField(#name, TypeSoundFilename, Offset(m##name##Name, consoleClass), _set##name##Data, &defaultProtectedGetFn, arraySize, assetDoc(name, docs), AbstractClassRep::FIELD_HideInInspectors); \ + addProtectedField(assetText(name, Asset), TypeSoundAssetId, Offset(m##name##AssetId, consoleClass), _set##name##Data, &defaultProtectedGetFn, arraySize, assetDoc(name, asset docs.)); + +#endif + +#define LOAD_SOUNDASSET_ARRAY(name, index)\ +if (m##name##AssetId[index] != StringTable->EmptyString())\ +{\ + S32 assetState = SoundAsset::getAssetById(m##name##AssetId[index], &m##name##Asset[index]);\ + if (assetState == SoundAsset::Ok )\ + {\ + m##name##Name[index] = StringTable->EmptyString();\ + }\ + else Con::warnf("Warning: %s::LOAD_SOUNDASSET_ARRAY(%s[%i])-%s", mClassName, m##name##AssetId[index], index, ImageAsset::getAssetErrstrn(assetState).c_str());\ +} + +#define assetEnumNameConcat(x,suff)(new std::string( x + std::string(#suff)))->c_str() + +#define INITPERSISTFIELD_SOUNDASSET_ENUMED(name, enumType, maxValue, consoleClass, docs) \ + for (U32 i = 0; i < maxValue; i++)\ + {\ + const enumType itter = static_cast(i);\ + const char* enumString = castConsoleTypeToString(static_cast(itter));\ + if (enumString && enumString[0])\ + {\ + addField(assetEnumNameConcat(enumString, File), TypeSoundFilename, Offset(m##name##Name[0], consoleClass) + sizeof(m##name##Name[0])*i, assetText(name, docs), AbstractClassRep::FIELD_HideInInspectors); \ + addField(assetEnumNameConcat(enumString, Asset), TypeSoundAssetId, Offset(m##name##AssetId[0], consoleClass) + sizeof(m##name##AssetId[0])*i, assetText(name, asset reference.));\ + }\ + } #pragma endregion #endif // _ASSET_BASE_H_ diff --git a/Engine/source/T3D/assets/assetMacroHelpers.h b/Engine/source/T3D/assets/assetMacroHelpers.h new file mode 100644 index 000000000..ef37cd7d5 --- /dev/null +++ b/Engine/source/T3D/assets/assetMacroHelpers.h @@ -0,0 +1,298 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- +#pragma once + +//general class-injection hooks for asset support. not all cases are needed for every class/usage. + +//----------------------------------------------------------------------------- +/// INDIVIDUALIZED CLASS ENTRIES +//----------------------------------------------------------------------------- + +//iniitalization +#define INIT_ASSET(name) \ + m##name##Name = StringTable->EmptyString(); \ + m##name##AssetId = StringTable->EmptyString(); \ + m##name##Asset = NULL;\ + m##name = NULL; + +//load asset into memory by looking up the ID, spew a warning if anything goes wrong +#define LOAD_ASSET(name, assetClass)\ +if (m##name##AssetId != StringTable->EmptyString())\ +{\ + S32 assetState = assetClass::getAssetById(m##name##AssetId, &m##name##Asset);\ + if (assetState == assetClass::Ok )\ + {\ + m##name##Name = StringTable->EmptyString();\ + }\ + else Con::warnf("Warning: %s::LOAD_ASSET(%s)-%s", mClassName, m##name##AssetId, assetClass::getAssetErrstrn(assetState).c_str());\ +} + +// copy constructor +#define CLONE_ASSET(name) \ + m##name##Name = other.m##name##Name;\ + m##name##AssetId = other.m##name##AssetId;\ + m##name##Asset = other.m##name##Asset;\ + m##name = other.m##name + +// addProtectedField acessors +#define DECLARE_ASSET_SETGET(className, name)\ + static bool _set##name##Data(void* obj, const char* index, const char* data)\ + {\ + bool ret = false;\ + className* object = static_cast(obj);\ + ret = object->_set##name(StringTable->insert(data));\ + return ret;\ + } + +// addProtectedField acessors for networked objects (sets a flag) +#define DECLARE_ASSET_NET_SETGET(className, name, bitmask)\ + static bool _set##name##Data(void* obj, const char* index, const char* data)\ + {\ + bool ret = false;\ + className* object = static_cast(obj);\ + ret = object->_set##name(StringTable->insert(data));\ + if(ret)\ + object->setMaskBits(bitmask);\ + return ret;\ + } + +//network send - datablock +#define PACKDATA_ASSET(name)\ + if (stream->writeFlag(m##name##Asset.notNull()))\ + {\ + stream->writeString(m##name##Asset.getAssetId());\ + }\ + else\ + stream->writeString(m##name##Name); + +//network recieve - datablock +#define UNPACKDATA_ASSET(name)\ + if (stream->readFlag())\ + {\ + m##name##AssetId = stream->readSTString();\ + _set##name(m##name##AssetId);\ + }\ + else\ + {\ + m##name##Name = stream->readSTString();\ + _set##name(m##name##Name);\ + } + +//network send - object-instance +#define PACK_ASSET(netconn, name)\ + if (stream->writeFlag(m##name##Asset.notNull()))\ + {\ + NetStringHandle assetIdStr = m##name##Asset.getAssetId();\ + netconn->packNetStringHandleU(stream, assetIdStr);\ + }\ + else\ + stream->writeString(m##name##Name); + +//network recieve - object-instance +#define UNPACK_ASSET(netconn, name)\ + if (stream->readFlag())\ + {\ + m##name##AssetId = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\ + _set##name(m##name##AssetId);\ + }\ + else\ + m##name##Name = stream->readSTString(); + +//script methods for class.asset acces +//declare general get, getAsset and set methods +#define DEF_ASSET_BINDS(className,name)\ +DefineEngineMethod(className, get##name, String, (), , "get name")\ +{\ + return object->get##name(); \ +}\ +DefineEngineMethod(className, get##name##Asset, String, (), , assetText(name, asset reference))\ +{\ + return object->m##name##AssetId; \ +}\ +DefineEngineMethod(className, set##name, bool, (const char* assetName), , assetText(name,assignment. first tries asset then flat file.))\ +{\ + return object->_set##name(StringTable->insert(assetName));\ +} + +//----------------------------------------------------------------------------- +/// ARRAY CLASS ENTRIES +//----------------------------------------------------------------------------- + +//iniitalization +#define INIT_ASSET_ARRAY(name, index) \ +{\ + m##name##Name[index] = StringTable->EmptyString(); \ + m##name##AssetId[index] = StringTable->EmptyString(); \ + m##name##Asset[index] = NULL;\ + m##name[index] = NULL;\ +} + +//load asset into memory by looking up the ID, spew a warning if anything goes wrong +#define LOAD_ASSET_ARRAY(name, index, assetClass)\ +if (m##name##AssetId[index] != StringTable->EmptyString())\ +{\ + S32 assetState = assetClass::getAssetById(m##name##AssetId[index], &m##name##Asset[index]);\ + if (assetState == assetClass::Ok )\ + {\ + m##name##Name[index] = StringTable->EmptyString();\ + }\ + else Con::warnf("Warning: %s::LOAD_ASSET(%s[%d])-%s", mClassName, m##name##AssetId[index],index, assetClass::getAssetErrstrn(assetState).c_str());\ +} + +// copy constructor +#define CLONE_ASSET_ARRAY(name, index) \ +{\ + 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];\ +} +// addProtectedField acessors +#define DECLARE_ASSET_ARRAY_SETGET(className, name)\ + static bool _set##name##Data(void* obj, const char* index, const char* data)\ + {\ + if(!index) return false;\ + U32 idx = dAtoi(index);\ + if (idx >= sm##name##Count)\ + return false;\ + bool ret = false;\ + className* object = static_cast(obj);\ + ret = object->_set##name(StringTable->insert(data), idx);\ + return ret;\ + } +// addProtectedField acessors for networked objects (sets a flag) +#define DECLARE_ASSET_ARRAY_NET_SETGET(className, name, bitmask)\ + static bool _set##name##Data(void* obj, const char* index, const char* data)\ + {\ + if (!index) return false;\ + U32 idx = dAtoi(index);\ + if (idx >= sm##name##Count)\ + return false;\ + bool ret = false;\ + className* object = static_cast(obj);\ + ret = object->_set##name(StringTable->insert(data), idx);\ + if(ret)\ + object->setMaskBits(bitmask);\ + return ret;\ + } +//network send - datablock +#define PACKDATA_ASSET_ARRAY(name, index)\ + if (stream->writeFlag(m##name##Asset[index].notNull()))\ + {\ + stream->writeString(m##name##Asset[index].getAssetId());\ + }\ + else\ + stream->writeString(m##name##Name[index]); + +//network recieve - datablock +#define UNPACKDATA_ASSET_ARRAY(name, index)\ + if (stream->readFlag())\ + {\ + m##name##AssetId[index] = stream->readSTString();\ + _set##name(m##name##AssetId[index], index);\ + }\ + else\ + {\ + m##name##Name[index] = stream->readSTString();\ + _set##name(m##name##Name[index], index);\ + } + +//network send - object-instance +#define PACK_ASSET_ARRAY(netconn, name, index)\ + if (stream->writeFlag(m##name##Asset[index].notNull()))\ + {\ + NetStringHandle assetIdStr = m##name##Asset[index].getAssetId();\ + netconn->packNetStringHandleU(stream, assetIdStr);\ + }\ + else\ + stream->writeString(m##name##Name[index]); + +//network recieve - object-instance +#define UNPACK_ASSET_ARRAY(netconn, name, index)\ + if (stream->readFlag())\ + {\ + m##name##AssetId[index] = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\ + _set##name(m##name##AssetId[index], index);\ + }\ + else\ + {\ + m##name##Name[index] = stream->readSTString();\ + _set##name(m##name##Name[index], index);\ + } + +//script methods for class.asset acces +//declare general get, getAsset and set methods +//signatures are: +//using DiffuseMap as an example +//material.getDiffuseMap(%layer); //returns the raw file referenced +//material.getDiffuseMapAsset(%layer); //returns the asset id +//material.setDiffuseMap(%texture, %layer); //tries to set the asset and failing that attempts a flat file reference +#define DEF_ASSET_ARRAY_BINDS(className,name)\ +DefineEngineMethod(className, get##name, const char*, (S32 index), , "get name")\ +{\ + return object->get##name(index); \ +}\ +DefineEngineMethod(className, get##name##Asset, const char*, (S32 index), , assetText(name, asset reference))\ +{\ + if(index >= className::sm##name##Count || index < 0)\ + return "";\ + return object->m##name##AssetId[index]; \ +}\ +DefineEngineMethod(className, set##name, bool, (const char* assetName, S32 index), , assetText(name,assignment. first tries asset then flat file.))\ +{\ + return object->_set##name(StringTable->insert(assetName), index);\ +} + +//----------------------------------------------------------------------------- +/// ARRAYS REFERENCED VIA ENUM CLASS ENTRIES +//----------------------------------------------------------------------------- +// +// substite these in to see the enum strings and assigned values +//network send - object-instance +#define PACKDATA_ASSET_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]);\ +} +//network recieve - object-instance +#define UNPACKDATA_ASSET_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);\ + }\ +} + diff --git a/Engine/source/T3D/convexShape.cpp b/Engine/source/T3D/convexShape.cpp index 729548ce7..8cb8ae39f 100644 --- a/Engine/source/T3D/convexShape.cpp +++ b/Engine/source/T3D/convexShape.cpp @@ -289,7 +289,7 @@ ConvexShape::ConvexShape() mSurfaceUVs.clear(); mSurfaceTextures.clear(); - INIT_MATERIALASSET(Material); + INIT_ASSET(Material); } ConvexShape::~ConvexShape() @@ -527,7 +527,7 @@ U32 ConvexShape::packUpdate( NetConnection *conn, U32 mask, BitStream *stream ) if ( stream->writeFlag( mask & UpdateMask ) ) { - PACK_MATERIALASSET(conn, Material); + PACK_ASSET(conn, Material); U32 surfCount = mSurfaces.size(); stream->writeInt( surfCount, 32 ); @@ -583,7 +583,7 @@ void ConvexShape::unpackUpdate( NetConnection *conn, BitStream *stream ) if ( stream->readFlag() ) // UpdateMask { - UNPACK_MATERIALASSET(conn, Material); + UNPACK_ASSET(conn, Material); mSurfaces.clear(); mSurfaceUVs.clear(); @@ -2154,4 +2154,4 @@ void ConvexShape::Geometry::generate(const Vector< PlaneF > &planes, const Vecto } } -DEF_MATERIALASSET_BINDS(ConvexShape, Material); +DEF_ASSET_BINDS(ConvexShape, Material); diff --git a/Engine/source/T3D/convexShape.h b/Engine/source/T3D/convexShape.h index 22dc4553b..c6d74fe17 100644 --- a/Engine/source/T3D/convexShape.h +++ b/Engine/source/T3D/convexShape.h @@ -138,14 +138,14 @@ public: // The name of the Material we will use for rendering DECLARE_MATERIALASSET(surfaceMaterial, Material); - DECLARE_MATERIALASSET_SETGET(surfaceMaterial, Material); + DECLARE_ASSET_SETGET(surfaceMaterial, Material); // The actual Material instance BaseMatInstance* materialInst; surfaceMaterial() { - INIT_MATERIALASSET(Material); + INIT_ASSET(Material); materialInst = NULL; } @@ -264,7 +264,7 @@ protected: protected: DECLARE_MATERIALASSET(ConvexShape, Material); - DECLARE_MATERIALASSET_SETGET(ConvexShape, Material); + DECLARE_ASSET_SETGET(ConvexShape, Material); // The actual Material instance BaseMatInstance* mMaterialInst; diff --git a/Engine/source/T3D/debris.cpp b/Engine/source/T3D/debris.cpp index 2362fd089..ba94b0892 100644 --- a/Engine/source/T3D/debris.cpp +++ b/Engine/source/T3D/debris.cpp @@ -116,7 +116,7 @@ DebrisData::DebrisData() terminalVelocity = 0.0f; ignoreWater = true; - INIT_SHAPEASSET(Shape); + INIT_ASSET(Shape); } //#define TRACK_DEBRIS_DATA_CLONES @@ -152,7 +152,7 @@ DebrisData::DebrisData(const DebrisData& other, bool temp_clone) : GameBaseData( terminalVelocity = other.terminalVelocity; ignoreWater = other.ignoreWater; - CLONE_SHAPEASSET(Shape); + CLONE_ASSET(Shape); textureName = other.textureName; explosionId = other.explosionId; // -- for pack/unpack of explosion ptr @@ -382,7 +382,7 @@ void DebrisData::packData(BitStream* stream) stream->writeString( textureName ); - PACKDATA_SHAPEASSET(Shape); + PACKDATA_ASSET(Shape); for( S32 i=0; ireadSTString(); - UNPACKDATA_SHAPEASSET(Shape); + UNPACKDATA_ASSET(Shape); for( S32 i=0; iwrite( lookupName ); stream->write( size ); - PACKDATA_MATERIALASSET(Material); + PACKDATA_ASSET(Material); stream->write( lifeSpan ); stream->write( fadeTime ); @@ -287,7 +287,7 @@ void DecalData::unpackData( BitStream *stream ) assignName(lookupName); stream->read( &size ); - UNPACKDATA_MATERIALASSET(Material); + UNPACKDATA_ASSET(Material); _updateMaterial(); stream->read( &lifeSpan ); diff --git a/Engine/source/T3D/decal/decalData.h b/Engine/source/T3D/decal/decalData.h index 5c32c4427..4a053f303 100644 --- a/Engine/source/T3D/decal/decalData.h +++ b/Engine/source/T3D/decal/decalData.h @@ -78,7 +78,7 @@ class DecalData : public SimDataBlock F32 fadeEndPixelSize; DECLARE_MATERIALASSET(DecalData, Material); - DECLARE_MATERIALASSET_SETGET(DecalData, Material); + DECLARE_ASSET_SETGET(DecalData, Material); /// Material instance for decal. BaseMatInstance *matInst; @@ -139,4 +139,4 @@ inline SimSet* DecalData::getSet() return set; } -#endif // _DECALDATA_H_ \ No newline at end of file +#endif // _DECALDATA_H_ diff --git a/Engine/source/T3D/examples/renderMeshExample.cpp b/Engine/source/T3D/examples/renderMeshExample.cpp index 772c7bae6..fe1d099eb 100644 --- a/Engine/source/T3D/examples/renderMeshExample.cpp +++ b/Engine/source/T3D/examples/renderMeshExample.cpp @@ -59,7 +59,7 @@ RenderMeshExample::RenderMeshExample() // Set it as a "static" object that casts shadows mTypeMask |= StaticObjectType | StaticShapeObjectType; - INIT_MATERIALASSET(Material); + INIT_ASSET(Material); } RenderMeshExample::~RenderMeshExample() @@ -143,7 +143,7 @@ U32 RenderMeshExample::packUpdate( NetConnection *conn, U32 mask, BitStream *str // Write out any of the updated editable properties if (stream->writeFlag(mask & UpdateMask)) { - PACK_MATERIALASSET(conn, Material); + PACK_ASSET(conn, Material); } return retMask; @@ -164,7 +164,7 @@ void RenderMeshExample::unpackUpdate(NetConnection *conn, BitStream *stream) if ( stream->readFlag() ) // UpdateMask { - UNPACK_MATERIALASSET(conn, Material); + UNPACK_ASSET(conn, Material); if ( isProperlyAdded() ) updateMaterial(); diff --git a/Engine/source/T3D/examples/renderMeshExample.h b/Engine/source/T3D/examples/renderMeshExample.h index 1c20e4bfe..45686b4a6 100644 --- a/Engine/source/T3D/examples/renderMeshExample.h +++ b/Engine/source/T3D/examples/renderMeshExample.h @@ -74,7 +74,7 @@ class RenderMeshExample : public SceneObject BaseMatInstance* mMaterialInst; DECLARE_MATERIALASSET(RenderMeshExample, Material); - DECLARE_MATERIALASSET_NET_SETGET(RenderMeshExample, Material, UpdateMask); + DECLARE_ASSET_NET_SETGET(RenderMeshExample, Material, UpdateMask); // The GFX vertex and primitive buffers GFXVertexBufferHandle< VertexType > mVertexBuffer; diff --git a/Engine/source/T3D/examples/renderShapeExample.cpp b/Engine/source/T3D/examples/renderShapeExample.cpp index faf2f9b3f..b8aad1ebf 100644 --- a/Engine/source/T3D/examples/renderShapeExample.cpp +++ b/Engine/source/T3D/examples/renderShapeExample.cpp @@ -145,7 +145,7 @@ U32 RenderShapeExample::packUpdate( NetConnection *conn, U32 mask, BitStream *st // Write out any of the updated editable properties if ( stream->writeFlag( mask & UpdateMask ) ) { - PACK_SHAPEASSET(conn, Shape); + PACK_ASSET(conn, Shape); // Allow the server object a chance to handle a new shape createShape(); @@ -169,7 +169,7 @@ void RenderShapeExample::unpackUpdate(NetConnection *conn, BitStream *stream) if ( stream->readFlag() ) // UpdateMask { - UNPACK_SHAPEASSET(conn, Shape); + UNPACK_ASSET(conn, Shape); if ( isProperlyAdded() ) createShape(); @@ -258,4 +258,4 @@ void RenderShapeExample::prepRenderImage( SceneRenderState *state ) // Allow the shape to submit the RenderInst(s) for itself mShapeInstance->render( rdata ); -} \ No newline at end of file +} diff --git a/Engine/source/T3D/examples/renderShapeExample.h b/Engine/source/T3D/examples/renderShapeExample.h index 9c03cbc72..2b3ccf86e 100644 --- a/Engine/source/T3D/examples/renderShapeExample.h +++ b/Engine/source/T3D/examples/renderShapeExample.h @@ -62,7 +62,7 @@ class RenderShapeExample : public SceneObject // Rendering variables //-------------------------------------------------------------------------- DECLARE_SHAPEASSET(RenderShapeExample, Shape, onShapeChanged); - DECLARE_SHAPEASSET_SETGET(RenderShapeExample, Shape); + DECLARE_ASSET_SETGET(RenderShapeExample, Shape); // The actual shape instance TSShapeInstance* mShapeInstance; diff --git a/Engine/source/T3D/fx/explosion.cpp b/Engine/source/T3D/fx/explosion.cpp index aa86e27a9..88a5a9432 100644 --- a/Engine/source/T3D/fx/explosion.cpp +++ b/Engine/source/T3D/fx/explosion.cpp @@ -230,14 +230,16 @@ ExplosionData::ExplosionData() faceViewer = false; - soundProfile = NULL; + INIT_ASSET(Sound); + + //soundProfile = NULL; particleEmitter = NULL; particleEmitterId = 0; explosionScale.set(1.0f, 1.0f, 1.0f); playSpeed = 1.0f; - INIT_SHAPEASSET(ExplosionShape); + INIT_ASSET(ExplosionShape); explosionAnimation = -1; @@ -308,12 +310,12 @@ ExplosionData::ExplosionData(const ExplosionData& other, bool temp_clone) : Game faceViewer = other.faceViewer; particleDensity = other.particleDensity; particleRadius = other.particleRadius; - soundProfile = other.soundProfile; + CLONE_ASSET(Sound); particleEmitter = other.particleEmitter; particleEmitterId = other.particleEmitterId; // -- for pack/unpack of particleEmitter ptr explosionScale = other.explosionScale; playSpeed = other.playSpeed; - CLONE_SHAPEASSET(ExplosionShape); + CLONE_ASSET(ExplosionShape); explosionAnimation = other.explosionAnimation; // -- from explosionShape sequence "ambient" dMemcpy( emitterList, other.emitterList, sizeof( emitterList ) ); dMemcpy( emitterIDList, other.emitterIDList, sizeof( emitterIDList ) ); // -- for pack/unpack of emitterList ptrs @@ -358,12 +360,6 @@ ExplosionData::~ExplosionData() if (!isTempClone()) return; - if (soundProfile && soundProfile->isTempClone()) - { - delete soundProfile; - soundProfile = 0; - } - // particleEmitter, emitterList[*], debrisList[*], explosionList[*] will delete themselves #ifdef TRACK_EXPLOSION_DATA_CLONES @@ -399,8 +395,9 @@ void ExplosionData::initPersistFields() "of the explosion." ); addField( "playSpeed", TypeF32, Offset(playSpeed, ExplosionData), "Time scale at which to play the explosionShape ambient sequence." ); - addField( "soundProfile", TYPEID< SFXTrack >(), Offset(soundProfile, ExplosionData), - "Non-looping sound effect that will be played at the start of the explosion." ); + + INITPERSISTFIELD_SOUNDASSET(Sound, ExplosionData, "Sound to play when this explosion explodes."); + addField( "faceViewer", TypeBool, Offset(faceViewer, ExplosionData), "Controls whether the visual effects of the explosion always face the camera." ); @@ -523,7 +520,6 @@ void ExplosionData::initPersistFields() onlyKeepClearSubstitutions("debris"); // subs resolving to "~~", or "~0" are OK onlyKeepClearSubstitutions("emitter"); onlyKeepClearSubstitutions("particleEmitter"); - onlyKeepClearSubstitutions("soundProfile"); onlyKeepClearSubstitutions("subExplosion"); Parent::initPersistFields(); } @@ -654,9 +650,10 @@ void ExplosionData::packData(BitStream* stream) { Parent::packData(stream); - PACKDATA_SHAPEASSET(ExplosionShape); + PACKDATA_ASSET(ExplosionShape); + + PACKDATA_ASSET(Sound); - sfxWrite( stream, soundProfile ); if (stream->writeFlag(particleEmitter)) stream->writeRangedU32(particleEmitter->getId(),DataBlockObjectIdFirst,DataBlockObjectIdLast); @@ -757,9 +754,9 @@ void ExplosionData::unpackData(BitStream* stream) { Parent::unpackData(stream); - UNPACKDATA_SHAPEASSET(ExplosionShape); + UNPACKDATA_ASSET(ExplosionShape); - sfxRead( stream, &soundProfile ); + UNPACKDATA_ASSET(Sound); if (stream->readFlag()) particleEmitterId = stream->readRangedU32(DataBlockObjectIdFirst, DataBlockObjectIdLast); @@ -861,12 +858,21 @@ bool ExplosionData::preload(bool server, String &errorStr) { if (Parent::preload(server, errorStr) == false) return false; - + + if (!server && !getSoundProfile()) + return false; + if( !server ) { - String sfxErrorStr; - if( !sfxResolve( &soundProfile, sfxErrorStr ) ) - Con::errorf(ConsoleLogEntry::General, "Error, unable to load sound profile for explosion datablock: %s", sfxErrorStr.c_str()); + + if (getSound() != StringTable->EmptyString()) + { + _setSound(getSound()); + + if (!getSoundProfile()) + Con::errorf(ConsoleLogEntry::General, "SplashData::preload: Cant get an sfxProfile for splash."); + } + if (!particleEmitter && particleEmitterId != 0) if (Sim::findObject(particleEmitterId, particleEmitter) == false) Con::errorf(ConsoleLogEntry::General, "Error, unable to load particle emitter for explosion datablock"); @@ -1384,7 +1390,7 @@ bool Explosion::explode() resetWorldBox(); } - SFXProfile* sound_prof = dynamic_cast(mDataBlock->soundProfile); + SFXProfile* sound_prof = mDataBlock->getSoundProfile(); if (sound_prof) { soundProfile_clone = sound_prof->cloneAndPerformSubstitutions(ss_object, ss_index); diff --git a/Engine/source/T3D/fx/explosion.h b/Engine/source/T3D/fx/explosion.h index a82d28644..eac392e11 100644 --- a/Engine/source/T3D/fx/explosion.h +++ b/Engine/source/T3D/fx/explosion.h @@ -42,6 +42,7 @@ #endif #include "T3D/assets/ShapeAsset.h" +#include "T3D/assets/SoundAsset.h" class ParticleEmitter; class ParticleEmitterData; @@ -69,7 +70,9 @@ class ExplosionData : public GameBaseData { S32 particleDensity; F32 particleRadius; - SFXTrack* soundProfile; + DECLARE_SOUNDASSET(ExplosionData, Sound); + DECLARE_ASSET_SETGET(ExplosionData, Sound); + ParticleEmitterData* particleEmitter; S32 particleEmitterId; @@ -77,7 +80,7 @@ class ExplosionData : public GameBaseData { F32 playSpeed; DECLARE_SHAPEASSET(ExplosionData, ExplosionShape, onShapeChanged); - DECLARE_SHAPEASSET_SETGET(ExplosionData, ExplosionShape); + DECLARE_ASSET_SETGET(ExplosionData, ExplosionShape); S32 explosionAnimation; diff --git a/Engine/source/T3D/fx/groundCover.cpp b/Engine/source/T3D/fx/groundCover.cpp index 41f8a8c1a..a9c975eec 100644 --- a/Engine/source/T3D/fx/groundCover.cpp +++ b/Engine/source/T3D/fx/groundCover.cpp @@ -459,7 +459,7 @@ GroundCover::GroundCover() mRandomSeed = 1; - INIT_MATERIALASSET(Material); + INIT_ASSET(Material); mMaterialInst = NULL; mMatParams = NULL; @@ -520,7 +520,7 @@ GroundCover::GroundCover() mBillboardRects[i].point.set( 0.0f, 0.0f ); mBillboardRects[i].extent.set( 1.0f, 1.0f ); - INIT_SHAPEASSET_ARRAY(Shape, i); + INIT_ASSET_ARRAY(Shape, i); mShapeInstances[i] = NULL; @@ -713,7 +713,7 @@ U32 GroundCover::packUpdate( NetConnection *connection, U32 mask, BitStream *str // TODO: We could probably optimize a few of these // based on reasonable units at some point. - PACK_MATERIALASSET(connection, Material); + PACK_ASSET(connection, Material); stream->write( mRadius ); stream->write( mZOffset ); @@ -766,7 +766,7 @@ U32 GroundCover::packUpdate( NetConnection *connection, U32 mask, BitStream *str stream->write( mBillboardRects[i].extent.x ); stream->write( mBillboardRects[i].extent.y ); - PACK_SHAPEASSET_ARRAY(connection, Shape, i); + PACK_ASSET_ARRAY(connection, Shape, i); } stream->writeFlag( mDebugRenderCells ); @@ -784,7 +784,7 @@ void GroundCover::unpackUpdate( NetConnection *connection, BitStream *stream ) if (stream->readFlag()) { - UNPACK_MATERIALASSET(connection, Material); + UNPACK_ASSET(connection, Material); stream->read( &mRadius ); stream->read( &mZOffset ); @@ -837,7 +837,7 @@ void GroundCover::unpackUpdate( NetConnection *connection, BitStream *stream ) stream->read( &mBillboardRects[i].extent.x ); stream->read( &mBillboardRects[i].extent.y ); - UNPACK_SHAPEASSET_ARRAY(connection, Shape, i); + UNPACK_ASSET_ARRAY(connection, Shape, i); } mDebugRenderCells = stream->readFlag(); diff --git a/Engine/source/T3D/fx/groundCover.h b/Engine/source/T3D/fx/groundCover.h index fbf6bf263..aba467810 100644 --- a/Engine/source/T3D/fx/groundCover.h +++ b/Engine/source/T3D/fx/groundCover.h @@ -269,7 +269,7 @@ protected: BaseMatInstance* mMaterialInst; DECLARE_MATERIALASSET(GroundCover, Material); - DECLARE_MATERIALASSET_NET_SETGET(GroundCover, Material, InitialUpdateMask); + DECLARE_ASSET_NET_SETGET(GroundCover, Material, InitialUpdateMask); GroundCoverShaderConstData mShaderConstData; @@ -341,7 +341,7 @@ protected: /// The cover shape filenames. DECLARE_SHAPEASSET_ARRAY(GroundCover, Shape, MAX_COVERTYPES); - DECLARE_SHAPEASSET_ARRAY_NET_SETGET(GroundCover, Shape, -1); + DECLARE_ASSET_ARRAY_NET_SETGET(GroundCover, Shape, -1); /// The cover shape instances. TSShapeInstance* mShapeInstances[MAX_COVERTYPES]; diff --git a/Engine/source/T3D/fx/lightning.cpp b/Engine/source/T3D/fx/lightning.cpp index e808fb406..8d9e20183 100644 --- a/Engine/source/T3D/fx/lightning.cpp +++ b/Engine/source/T3D/fx/lightning.cpp @@ -238,10 +238,12 @@ void LightningStrikeEvent::process(NetConnection*) // LightningData::LightningData() { - strikeSound = NULL; + INIT_ASSET(StrikeSound); for (S32 i = 0; i < MaxThunders; i++) - thunderSounds[i] = NULL; + { + INIT_ASSET_ARRAY(ThunderSound, i); + } for (S32 i = 0; i < MaxTextures; i++) { @@ -260,12 +262,11 @@ LightningData::~LightningData() //-------------------------------------------------------------------------- void LightningData::initPersistFields() { - addField( "strikeSound", TYPEID< SFXTrack >(), Offset(strikeSound, LightningData), - "Sound profile to play when a lightning strike occurs." ); - addField( "thunderSounds", TYPEID< SFXTrack >(), Offset(thunderSounds, LightningData), MaxThunders, - "@brief List of thunder sound effects to play.\n\n" - "A random one of these sounds will be played shortly after each strike " - "occurs." ); + + INITPERSISTFIELD_SOUNDASSET(StrikeSound, LightningData, "Sound to play when lightning STRIKES!"); + + INITPERSISTFIELD_SOUNDASSET_ARRAY(ThunderSound, MaxThunders, LightningData, "Sounds for thunder."); + addField( "strikeTextures", TypeString, Offset(strikeTextureNames, LightningData), MaxTextures, "List of textures to use to render lightning strikes." ); @@ -290,27 +291,32 @@ bool LightningData::preload(bool server, String &errorStr) //dQsort(thunderSounds, MaxThunders, sizeof(SFXTrack*), cmpSounds); - for (S32 i = 0; i < MaxThunders; i++) { - if (thunderSounds[i]!= NULL) numThunders++; - } - + if (server == false) { - String sfxErrorStr; - for (U32 i = 0; i < MaxThunders; i++) { - if( !sfxResolve( &thunderSounds[ i ], sfxErrorStr ) ) - Con::errorf(ConsoleLogEntry::General, "LightningData::preload: Invalid packet: %s", sfxErrorStr.c_str()); + for (S32 i = 0; i < MaxThunders; i++) + { + _setThunderSound(getThunderSound(i), i); + if (isThunderSoundValid(i) && !getThunderSoundProfile(i)) + { + Con::errorf(ConsoleLogEntry::General, "LightningData::preload: Cant get an sfxProfile for thunder."); + + } + } - if( !sfxResolve( &strikeSound, sfxErrorStr ) ) - Con::errorf(ConsoleLogEntry::General, "LightningData::preload: Invalid packet: %s", sfxErrorStr.c_str()); + _setStrikeSound(getStrikeSound()); + if (isStrikeSoundValid() && !getStrikeSoundProfile()) + { + Con::errorf(ConsoleLogEntry::General, "LightningData::preload: can't get sfxProfile from strike sound."); + } mNumStrikeTextures = 0; - for (U32 i = 0; i < MaxTextures; i++) + for (U32 k = 0; k < MaxTextures; k++) { - if (strikeTextureNames[i][0]) + if (strikeTextureNames[k][0]) { - strikeTextures[i] = GFXTexHandle(strikeTextureNames[i], &GFXStaticTextureProfile, avar("%s() - strikeTextures[%d] (line %d)", __FUNCTION__, i, __LINE__)); + strikeTextures[k] = GFXTexHandle(strikeTextureNames[k], &GFXStaticTextureProfile, avar("%s() - strikeTextures[%d] (line %d)", __FUNCTION__, k, __LINE__)); mNumStrikeTextures++; } } @@ -329,8 +335,7 @@ void LightningData::packData(BitStream* stream) U32 i; for (i = 0; i < MaxThunders; i++) { - if (stream->writeFlag(thunderSounds[i])) - sfxWrite(stream, thunderSounds[i]); + PACKDATA_ASSET_ARRAY(ThunderSound, i); } stream->writeInt(mNumStrikeTextures, 4); @@ -338,7 +343,7 @@ void LightningData::packData(BitStream* stream) for (i = 0; i < MaxTextures; i++) stream->writeString(strikeTextureNames[i]); - sfxWrite( stream, strikeSound ); + PACKDATA_ASSET(StrikeSound); } void LightningData::unpackData(BitStream* stream) @@ -348,10 +353,7 @@ void LightningData::unpackData(BitStream* stream) U32 i; for (i = 0; i < MaxThunders; i++) { - if (stream->readFlag()) - sfxRead(stream, &thunderSounds[i]); - else - thunderSounds[i] = NULL; + UNPACKDATA_ASSET_ARRAY(ThunderSound, i); } mNumStrikeTextures = stream->readInt(4); @@ -359,7 +361,7 @@ void LightningData::unpackData(BitStream* stream) for (i = 0; i < MaxTextures; i++) strikeTextureNames[i] = stream->readSTString(); - sfxRead( stream, &strikeSound ); + UNPACKDATA_ASSET(StrikeSound); } @@ -584,7 +586,7 @@ void Lightning::scheduleThunder(Strike* newStrike) if (t <= 0.03f) { // If it's really close, just play it... U32 thunder = sgLightningRand.randI(0, mDataBlock->numThunders - 1); - SFX->playOnce(mDataBlock->thunderSounds[thunder]); + SFX->playOnce(mDataBlock->getThunderSoundProfile(thunder)); } else { Thunder* pThunder = new Thunder; pThunder->tRemaining = t; @@ -651,7 +653,7 @@ void Lightning::advanceTime(F32 dt) // Play the sound... U32 thunder = sgLightningRand.randI(0, mDataBlock->numThunders - 1); - SFX->playOnce(mDataBlock->thunderSounds[thunder]); + SFX->playOnce(mDataBlock->getThunderSoundProfile(thunder)); } else { pThunderWalker = &((*pThunderWalker)->next); } @@ -735,9 +737,9 @@ void Lightning::processEvent(LightningStrikeEvent* pEvent) MatrixF trans(true); trans.setPosition( strikePoint ); - if (mDataBlock->strikeSound) + if (mDataBlock->getStrikeSoundProfile()) { - SFX->playOnce(mDataBlock->strikeSound, &trans ); + SFX->playOnce(mDataBlock->getStrikeSoundProfile(), &trans ); } } @@ -1337,4 +1339,4 @@ void LightningBolt::update( F32 dt ) isFading = false; elapsedTime = 0.0f; } -} \ No newline at end of file +} diff --git a/Engine/source/T3D/fx/lightning.h b/Engine/source/T3D/fx/lightning.h index 93a54ffc7..be3b65319 100644 --- a/Engine/source/T3D/fx/lightning.h +++ b/Engine/source/T3D/fx/lightning.h @@ -41,7 +41,8 @@ #include "gfx/gfxTextureHandle.h" - +#include "T3D/assets/ImageAsset.h" +#include "T3D/assets/SoundAsset.h" class ShapeBase; class LightningStrikeEvent; @@ -62,8 +63,13 @@ class LightningData : public GameBaseData //-------------------------------------- Console set variables public: - SFXTrack* thunderSounds[MaxThunders]; - SFXTrack* strikeSound; + + DECLARE_SOUNDASSET_ARRAY(LightningData, ThunderSound, MaxThunders); + DECLARE_ASSET_ARRAY_SETGET(LightningData, ThunderSound); + + DECLARE_SOUNDASSET(LightningData, StrikeSound); + DECLARE_ASSET_SETGET(LightningData, StrikeSound); + StringTableEntry strikeTextureNames[MaxTextures]; //-------------------------------------- load set variables diff --git a/Engine/source/T3D/fx/particle.cpp b/Engine/source/T3D/fx/particle.cpp index 7cfa7e182..090a2f119 100644 --- a/Engine/source/T3D/fx/particle.cpp +++ b/Engine/source/T3D/fx/particle.cpp @@ -122,8 +122,8 @@ ParticleData::ParticleData() animTexFramesString = NULL; // string of animation frame indices animTexUVs = NULL; // array of tile vertex UVs - INIT_IMAGEASSET(Texture); - INIT_IMAGEASSET(TextureExt); + INIT_ASSET(Texture); + INIT_ASSET(TextureExt); constrain_pos = false; start_angle = 0.0f; @@ -293,7 +293,7 @@ void ParticleData::packData(BitStream* stream) stream->writeFloat( times[i], 8); } - //PACKDATA_IMAGEASSET(Texture); + //PACKDATA_ASSET(Texture); for (i = 0; i < 4; i++) mathWrite(*stream, texCoords[i]); @@ -307,7 +307,7 @@ void ParticleData::packData(BitStream* stream) stream->writeInt(framesPerSec, 8); } - //PACKDATA_IMAGEASSET(TextureExt); + //PACKDATA_ASSET(TextureExt); stream->writeFlag(constrain_pos); stream->writeFloat(start_angle/360.0f, 11); @@ -378,7 +378,7 @@ void ParticleData::unpackData(BitStream* stream) times[i] = stream->readFloat(8); } - //UNPACKDATA_IMAGEASSET(Texture); + //UNPACKDATA_ASSET(Texture); for (i = 0; i < 4; i++) mathRead(*stream, &texCoords[i]); @@ -391,7 +391,7 @@ void ParticleData::unpackData(BitStream* stream) framesPerSec = stream->readInt(8); } - //UNPACKDATA_IMAGEASSET(Texture); + //UNPACKDATA_ASSET(Texture); constrain_pos = stream->readFlag(); start_angle = 360.0f*stream->readFloat(11); @@ -763,12 +763,12 @@ ParticleData::ParticleData(const ParticleData& other, bool temp_clone) : SimData animTexFramesString = other.animTexFramesString; animTexFrames = other.animTexFrames; // -- parsed from animTexFramesString - CLONE_IMAGEASSET(Texture); + CLONE_ASSET(Texture); spinBias = other.spinBias; randomizeSpinDir = other.randomizeSpinDir; - CLONE_IMAGEASSET(TextureExt); + CLONE_ASSET(TextureExt); constrain_pos = other.constrain_pos; start_angle = other.start_angle; @@ -804,4 +804,4 @@ void ParticleData::onPerformSubstitutions() reload(errorBuffer); } -DEF_IMAGEASSET_BINDS(ParticleData, Texture); +DEF_ASSET_BINDS(ParticleData, Texture); diff --git a/Engine/source/T3D/fx/particle.h b/Engine/source/T3D/fx/particle.h index 1d6d88c12..e05b67b88 100644 --- a/Engine/source/T3D/fx/particle.h +++ b/Engine/source/T3D/fx/particle.h @@ -87,7 +87,7 @@ class ParticleData : public SimDataBlock Vector animTexFrames; DECLARE_IMAGEASSET(ParticleData, Texture, onImageChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_SETGET(ParticleData, Texture); + DECLARE_ASSET_SETGET(ParticleData, Texture); static bool protectedSetSizes(void* object, const char* index, const char* data); static bool protectedSetTimes(void* object, const char* index, const char* data); @@ -118,7 +118,7 @@ public: bool randomizeSpinDir; public: DECLARE_IMAGEASSET(ParticleData, TextureExt, onImageChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_SETGET(ParticleData, TextureExt); + DECLARE_ASSET_SETGET(ParticleData, TextureExt); bool constrain_pos; F32 start_angle; diff --git a/Engine/source/T3D/fx/precipitation.cpp b/Engine/source/T3D/fx/precipitation.cpp index 5740edae6..11b9f4b67 100644 --- a/Engine/source/T3D/fx/precipitation.cpp +++ b/Engine/source/T3D/fx/precipitation.cpp @@ -127,13 +127,13 @@ ConsoleDocClass( PrecipitationData, //---------------------------------------------------------- PrecipitationData::PrecipitationData() { - INIT_SOUNDASSET(Sound); + INIT_ASSET(Sound); - INIT_IMAGEASSET(Drop); + INIT_ASSET(Drop); mDropShaderName = StringTable->EmptyString(); - INIT_IMAGEASSET(Splash); + INIT_ASSET(Splash); mSplashShaderName = StringTable->EmptyString(); @@ -188,9 +188,16 @@ bool PrecipitationData::preload( bool server, String &errorStr ) { if( Parent::preload( server, errorStr) == false) return false; + if (!server) + { + if (getSound() != StringTable->EmptyString()) + { + _setSound(getSound()); - if (!server && !getSFXProfile()) - return false; + if (!getSoundProfile()) + Con::errorf(ConsoleLogEntry::General, "SplashData::preload: Cant get an sfxProfile for splash."); + } + } return true; } @@ -199,13 +206,13 @@ void PrecipitationData::packData(BitStream* stream) { Parent::packData(stream); - PACKDATA_SOUNDASSET(Sound); + PACKDATA_ASSET(Sound); - PACKDATA_IMAGEASSET(Drop); + PACKDATA_ASSET(Drop); stream->writeString(mDropShaderName); - PACKDATA_IMAGEASSET(Splash); + PACKDATA_ASSET(Splash); stream->writeString(mSplashShaderName); stream->write(mDropsPerSide); @@ -216,13 +223,13 @@ void PrecipitationData::unpackData(BitStream* stream) { Parent::unpackData(stream); - UNPACKDATA_SOUNDASSET(Sound); + UNPACKDATA_ASSET(Sound); - UNPACKDATA_IMAGEASSET(Drop); + UNPACKDATA_ASSET(Drop); mDropShaderName = stream->readSTString(); - UNPACKDATA_IMAGEASSET(Splash); + UNPACKDATA_ASSET(Splash); mSplashShaderName = stream->readSTString(); stream->read(&mDropsPerSide); @@ -597,9 +604,9 @@ bool Precipitation::onNewDataBlock( GameBaseData *dptr, bool reload ) { SFX_DELETE( mAmbientSound ); - if ( mDataBlock->getSFXProfile()) + if ( mDataBlock->getSoundProfile()) { - mAmbientSound = SFX->createSource(mDataBlock->getSFXProfile(), &getTransform() ); + mAmbientSound = SFX->createSource(mDataBlock->getSoundProfile(), &getTransform() ); if ( mAmbientSound ) mAmbientSound->play(); } diff --git a/Engine/source/T3D/fx/precipitation.h b/Engine/source/T3D/fx/precipitation.h index cdef0c2a8..eb3a540e0 100644 --- a/Engine/source/T3D/fx/precipitation.h +++ b/Engine/source/T3D/fx/precipitation.h @@ -46,17 +46,16 @@ class PrecipitationData : public GameBaseData typedef GameBaseData Parent; public: - //SFXTrack* soundProfile; DECLARE_SOUNDASSET(PrecipitationData, Sound); - DECLARE_SOUNDASSET_SETGET(PrecipitationData, Sound); + DECLARE_ASSET_SETGET(PrecipitationData, Sound); DECLARE_IMAGEASSET(PrecipitationData, Drop, onDropChanged, GFXStaticTextureSRGBProfile); ///< Texture for drop particles - DECLARE_IMAGEASSET_SETGET(PrecipitationData, Drop); + DECLARE_ASSET_SETGET(PrecipitationData, Drop); StringTableEntry mDropShaderName; ///< The name of the shader used for raindrops DECLARE_IMAGEASSET(PrecipitationData, Splash, onSplashChanged, GFXStaticTextureSRGBProfile); ///< Texture for splash particles - DECLARE_IMAGEASSET_SETGET(PrecipitationData, Splash); + DECLARE_ASSET_SETGET(PrecipitationData, Splash); StringTableEntry mSplashShaderName; ///< The name of the shader used for raindrops @@ -72,13 +71,6 @@ class PrecipitationData : public GameBaseData void onDropChanged() {} void onSplashChanged() {} - - SFXProfile* getSFXProfile() { - if (mSoundAsset.notNull()) - return mSoundAsset->getSfxProfile(); - else - return NULL; - } }; struct Raindrop diff --git a/Engine/source/T3D/fx/splash.cpp b/Engine/source/T3D/fx/splash.cpp index c6ac5582b..3ae7e54b4 100644 --- a/Engine/source/T3D/fx/splash.cpp +++ b/Engine/source/T3D/fx/splash.cpp @@ -67,8 +67,10 @@ ConsoleDocClass( Splash, //-------------------------------------------------------------------------- SplashData::SplashData() { - soundProfile = NULL; - soundProfileId = 0; + //soundProfile = NULL; + //soundProfileId = 0; + + INIT_ASSET(Sound); scale.set(1, 1, 1); @@ -95,7 +97,9 @@ SplashData::SplashData() U32 i; for (i = 0; i < NUM_TEX; i++) - INIT_IMAGEASSET_ARRAY(Texture, i); + { + INIT_ASSET_ARRAY(Texture, i); + } for( i=0; i(), Offset(soundProfile, SplashData), "SFXProfile effect to play.\n"); + INITPERSISTFIELD_SOUNDASSET(Sound, SplashData, "Sound to play when splash, splashes."); + addField("scale", TypePoint3F, Offset(scale, SplashData), "The scale of this splashing effect, defined as the F32 points X, Y, Z.\n"); addField("emitter", TYPEID< ParticleEmitterData >(), Offset(emitterList, SplashData), NUM_EMITTERS, "List of particle emitters to create at the point of this Splash effect.\n"); addField("delayMS", TypeS32, Offset(delayMS, SplashData), "Time to delay, in milliseconds, before actually starting this effect.\n"); @@ -158,6 +163,8 @@ void SplashData::packData(BitStream* stream) { Parent::packData(stream); + PACKDATA_ASSET(Sound); + mathWrite(*stream, scale); stream->write(delayMS); stream->write(delayVariance); @@ -201,7 +208,7 @@ void SplashData::packData(BitStream* stream) for( i=0; iread(&delayMS); stream->read(&delayVariance); @@ -255,7 +264,7 @@ void SplashData::unpackData(BitStream* stream) for( i=0; iEmptyString()) + { + _setSound(getSound()); + + if(!getSoundProfile()) + Con::errorf(ConsoleLogEntry::General, "SplashData::preload: Cant get an sfxProfile for splash."); + } + S32 i; for( i=0; iexplosion ) return; + /// could just play the explosion one, but explosion could be weapon specific, + /// splash sound could be liquid specific. food for thought. + SFXProfile* sound_prof = mDataBlock->getSoundProfile(); + if (sound_prof) + { + SFX->playOnce(sound_prof, &getTransform()); + } + Explosion* pExplosion = new Explosion; pExplosion->onNewDataBlock(mDataBlock->explosion, false); diff --git a/Engine/source/T3D/fx/splash.h b/Engine/source/T3D/fx/splash.h index f90a72d3c..b81c074f5 100644 --- a/Engine/source/T3D/fx/splash.h +++ b/Engine/source/T3D/fx/splash.h @@ -34,6 +34,7 @@ #include "gfx/gfxTextureHandle.h" #include "T3D/assets/ImageAsset.h" +#include "T3D/assets/SoundAsset.h" class ParticleEmitter; class ParticleEmitterData; @@ -91,8 +92,11 @@ class SplashData : public GameBaseData }; public: - AudioProfile* soundProfile; - S32 soundProfileId; + //AudioProfile* soundProfile; + //S32 soundProfileId; + + DECLARE_SOUNDASSET(SplashData, Sound); + DECLARE_ASSET_SETGET(SplashData, Sound); ParticleEmitterData* emitterList[NUM_EMITTERS]; S32 emitterIDList[NUM_EMITTERS]; diff --git a/Engine/source/T3D/groundPlane.cpp b/Engine/source/T3D/groundPlane.cpp index 5c3033cbc..3062ff813 100644 --- a/Engine/source/T3D/groundPlane.cpp +++ b/Engine/source/T3D/groundPlane.cpp @@ -87,7 +87,7 @@ GroundPlane::GroundPlane() mConvexList = new Convex; mTypeMask |= TerrainLikeObjectType; - INIT_MATERIALASSET(Material); + INIT_ASSET(Material); } GroundPlane::~GroundPlane() @@ -199,7 +199,7 @@ U32 GroundPlane::packUpdate( NetConnection* connection, U32 mask, BitStream* str stream->write( mScaleU ); stream->write( mScaleV ); - PACK_MATERIALASSET(connection, Material); + PACK_ASSET(connection, Material); return retMask; } @@ -212,7 +212,7 @@ void GroundPlane::unpackUpdate( NetConnection* connection, BitStream* stream ) stream->read( &mScaleU ); stream->read( &mScaleV ); - UNPACK_MATERIALASSET(connection, Material); + UNPACK_ASSET(connection, Material); // If we're added then something possibly changed in // the editor... do an update of the material and the diff --git a/Engine/source/T3D/groundPlane.h b/Engine/source/T3D/groundPlane.h index 752c78668..9e57c325c 100644 --- a/Engine/source/T3D/groundPlane.h +++ b/Engine/source/T3D/groundPlane.h @@ -108,7 +108,7 @@ private: BaseMatInstance* mMaterialInst; DECLARE_MATERIALASSET(GroundPlane, Material); - DECLARE_MATERIALASSET_NET_SETGET(GroundPlane, Material, -1); + DECLARE_ASSET_NET_SETGET(GroundPlane, Material, -1); PhysicsBody *mPhysicsRep; diff --git a/Engine/source/T3D/levelInfo.cpp b/Engine/source/T3D/levelInfo.cpp index 7d6905841..d10077cea 100644 --- a/Engine/source/T3D/levelInfo.cpp +++ b/Engine/source/T3D/levelInfo.cpp @@ -99,7 +99,7 @@ LevelInfo::LevelInfo() mAdvancedLightmapSupport = true; - INIT_IMAGEASSET(AccuTexture); + INIT_ASSET(AccuTexture); // Register with the light manager activation signal, and we need to do it first // so the advanced light bin manager can be instructed about MRT lightmaps @@ -215,7 +215,7 @@ U32 LevelInfo::packUpdate(NetConnection *conn, U32 mask, BitStream *stream) sfxWrite( stream, mSoundAmbience ); stream->writeInt( mSoundDistanceModel, 1 ); - PACK_IMAGEASSET(conn, AccuTexture); + PACK_ASSET(conn, AccuTexture); return retMask; } @@ -262,7 +262,7 @@ void LevelInfo::unpackUpdate(NetConnection *conn, BitStream *stream) SFX->setDistanceModel( mSoundDistanceModel ); } - UNPACK_IMAGEASSET(conn, AccuTexture); + UNPACK_ASSET(conn, AccuTexture); setLevelAccuTexture(getAccuTexture()); } diff --git a/Engine/source/T3D/levelInfo.h b/Engine/source/T3D/levelInfo.h index 5b998dada..122d7ad8d 100644 --- a/Engine/source/T3D/levelInfo.h +++ b/Engine/source/T3D/levelInfo.h @@ -105,7 +105,7 @@ class LevelInfo : public NetObject protected: DECLARE_IMAGEASSET(LevelInfo, AccuTexture, onAccuTextureChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_SETGET(LevelInfo, AccuTexture); + DECLARE_ASSET_SETGET(LevelInfo, AccuTexture); void onAccuTextureChanged() {} diff --git a/Engine/source/T3D/lightFlareData.cpp b/Engine/source/T3D/lightFlareData.cpp index 98f406a1b..fb8fbaa55 100644 --- a/Engine/source/T3D/lightFlareData.cpp +++ b/Engine/source/T3D/lightFlareData.cpp @@ -133,7 +133,7 @@ LightFlareData::LightFlareData() for ( U32 i = 0; i < MAX_ELEMENTS; i++ ) mElementDist[i] = -1.0f; - INIT_IMAGEASSET(FlareTexture); + INIT_ASSET(FlareTexture); } LightFlareData::~LightFlareData() @@ -219,7 +219,7 @@ void LightFlareData::packData( BitStream *stream ) stream->writeFlag( mFlareEnabled ); - PACKDATA_IMAGEASSET(FlareTexture); + PACKDATA_ASSET(FlareTexture); stream->write( mScale ); stream->write( mOcclusionRadius ); @@ -244,7 +244,7 @@ void LightFlareData::unpackData( BitStream *stream ) mFlareEnabled = stream->readFlag(); - UNPACKDATA_IMAGEASSET(FlareTexture); + UNPACKDATA_ASSET(FlareTexture); stream->read( &mScale ); stream->read( &mOcclusionRadius ); diff --git a/Engine/source/T3D/lightFlareData.h b/Engine/source/T3D/lightFlareData.h index 6d79aac7b..b2a87520c 100644 --- a/Engine/source/T3D/lightFlareData.h +++ b/Engine/source/T3D/lightFlareData.h @@ -121,7 +121,7 @@ protected: bool mFlareEnabled; DECLARE_IMAGEASSET(LightFlareData, FlareTexture, onImageChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_SETGET(LightFlareData, FlareTexture); + DECLARE_ASSET_SETGET(LightFlareData, FlareTexture); F32 mOcclusionRadius; bool mRenderReflectPass; diff --git a/Engine/source/T3D/physics/physicsDebris.cpp b/Engine/source/T3D/physics/physicsDebris.cpp index 835871bb5..077fcf7d8 100644 --- a/Engine/source/T3D/physics/physicsDebris.cpp +++ b/Engine/source/T3D/physics/physicsDebris.cpp @@ -74,7 +74,7 @@ PhysicsDebrisData::PhysicsDebrisData() lifetime = 5.0f; lifetimeVariance = 0.0f; - INIT_SHAPEASSET(Shape); + INIT_ASSET(Shape); } bool PhysicsDebrisData::onAdd() @@ -215,7 +215,7 @@ void PhysicsDebrisData::packData(BitStream* stream) stream->write( waterDampingScale ); stream->write( buoyancyDensity ); - PACKDATA_SHAPEASSET(Shape); + PACKDATA_ASSET(Shape); } void PhysicsDebrisData::unpackData(BitStream* stream) @@ -236,7 +236,7 @@ void PhysicsDebrisData::unpackData(BitStream* stream) stream->read( &waterDampingScale ); stream->read( &buoyancyDensity ); - UNPACKDATA_SHAPEASSET(Shape); + UNPACKDATA_ASSET(Shape); } DefineEngineMethod( PhysicsDebrisData, preload, void, (), , diff --git a/Engine/source/T3D/physics/physicsDebris.h b/Engine/source/T3D/physics/physicsDebris.h index c58d66626..2a4a3d0fc 100644 --- a/Engine/source/T3D/physics/physicsDebris.h +++ b/Engine/source/T3D/physics/physicsDebris.h @@ -87,7 +87,7 @@ public: bool castShadows; DECLARE_SHAPEASSET(PhysicsDebrisData, Shape, onShapeChanged); - DECLARE_SHAPEASSET_SETGET(PhysicsDebrisData, Shape); + DECLARE_ASSET_SETGET(PhysicsDebrisData, Shape); PhysicsDebrisData(); diff --git a/Engine/source/T3D/physics/physicsShape.cpp b/Engine/source/T3D/physics/physicsShape.cpp index 6808866ca..6e6b4e937 100644 --- a/Engine/source/T3D/physics/physicsShape.cpp +++ b/Engine/source/T3D/physics/physicsShape.cpp @@ -78,7 +78,7 @@ PhysicsShapeData::PhysicsShapeData() buoyancyDensity( 0.0f ), simType( SimType_ClientServer ) { - INIT_SHAPEASSET(Shape); + INIT_ASSET(Shape); } PhysicsShapeData::~PhysicsShapeData() @@ -180,7 +180,7 @@ void PhysicsShapeData::packData( BitStream *stream ) { Parent::packData( stream ); - PACKDATA_SHAPEASSET(Shape); + PACKDATA_ASSET(Shape); stream->write( mass ); stream->write( dynamicFriction ); @@ -204,7 +204,7 @@ void PhysicsShapeData::unpackData( BitStream *stream ) { Parent::unpackData(stream); - UNPACKDATA_SHAPEASSET(Shape); + UNPACKDATA_ASSET(Shape); stream->read( &mass ); stream->read( &dynamicFriction ); diff --git a/Engine/source/T3D/physics/physicsShape.h b/Engine/source/T3D/physics/physicsShape.h index a80d85afc..ebbad92d2 100644 --- a/Engine/source/T3D/physics/physicsShape.h +++ b/Engine/source/T3D/physics/physicsShape.h @@ -75,7 +75,7 @@ public: public: DECLARE_SHAPEASSET(PhysicsShapeData, Shape, onShapeChanged); - DECLARE_SHAPEASSET_SETGET(PhysicsShapeData, Shape); + DECLARE_ASSET_SETGET(PhysicsShapeData, Shape); /// The shared unscaled collision shape. PhysicsCollisionRef colShape; diff --git a/Engine/source/T3D/player.cpp b/Engine/source/T3D/player.cpp index 5bfc44746..7aabe0384 100644 --- a/Engine/source/T3D/player.cpp +++ b/Engine/source/T3D/player.cpp @@ -187,6 +187,32 @@ PlayerData::ActionAnimationDef PlayerData::ActionAnimationList[NumTableActionAni //---------------------------------------------------------------------------- + +typedef PlayerData::Sounds playerSoundsEnum; +DefineEnumType(playerSoundsEnum); + +ImplementEnumType(playerSoundsEnum, "enum types.\n" + "@ingroup PlayerData\n\n") + { 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; + //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- @@ -272,7 +298,7 @@ PlayerData::PlayerData() imageAnimPrefixFP = StringTable->EmptyString(); for (U32 i=0; iEmptyString()) { - String sfxErrorStr; - if( !sfxResolve( &sound[ i ], sfxErrorStr ) ) - Con::errorf( "PlayerData::preload: %s", sfxErrorStr.c_str() ); + if (!getPlayerSoundProfile(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]); } } @@ -1021,65 +1049,7 @@ void PlayerData::initPersistFields() endGroup( "Interaction: Footsteps" ); addGroup( "Interaction: Sounds" ); - - addField( "FootSoftSound", TypeSFXTrackName, Offset(sound[FootSoft], PlayerData), - "@brief Sound to play when walking on a surface with Material footstepSoundId 0.\n\n" ); - addField( "FootHardSound", TypeSFXTrackName, Offset(sound[FootHard], PlayerData), - "@brief Sound to play when walking on a surface with Material footstepSoundId 1.\n\n" ); - addField( "FootMetalSound", TypeSFXTrackName, Offset(sound[FootMetal], PlayerData), - "@brief Sound to play when walking on a surface with Material footstepSoundId 2.\n\n" ); - addField( "FootSnowSound", TypeSFXTrackName, Offset(sound[FootSnow], PlayerData), - "@brief Sound to play when walking on a surface with Material footstepSoundId 3.\n\n" ); - - addField( "FootShallowSound", TypeSFXTrackName, Offset(sound[FootShallowSplash], PlayerData), - "@brief Sound to play when walking in water and coverage is less than " - "footSplashHeight.\n\n" - "@see footSplashHeight\n" ); - addField( "FootWadingSound", TypeSFXTrackName, Offset(sound[FootWading], PlayerData), - "@brief Sound to play when walking in water and coverage is less than 1, " - "but > footSplashHeight.\n\n" - "@see footSplashHeight\n" ); - addField( "FootUnderwaterSound", TypeSFXTrackName, Offset(sound[FootUnderWater], PlayerData), - "@brief Sound to play when walking in water and coverage equals 1.0 " - "(fully underwater).\n\n" ); - addField( "FootBubblesSound", TypeSFXTrackName, Offset(sound[FootBubbles], PlayerData), - "@brief Sound to play when walking in water and coverage equals 1.0 " - "(fully underwater).\n\n" ); - addField( "movingBubblesSound", TypeSFXTrackName, Offset(sound[MoveBubbles], PlayerData), - "@brief Sound to play when in water and coverage equals 1.0 (fully underwater).\n\n" - "Note that unlike FootUnderwaterSound, this sound plays even if the " - "player is not moving around in the water.\n" ); - addField( "waterBreathSound", TypeSFXTrackName, Offset(sound[WaterBreath], PlayerData), - "@brief Sound to play when in water and coverage equals 1.0 (fully underwater).\n\n" - "Note that unlike FootUnderwaterSound, this sound plays even if the " - "player is not moving around in the water.\n" ); - - addField( "impactSoftSound", TypeSFXTrackName, Offset(sound[ImpactSoft], PlayerData), - "@brief Sound to play after falling on a surface with Material footstepSoundId 0.\n\n" ); - addField( "impactHardSound", TypeSFXTrackName, Offset(sound[ImpactHard], PlayerData), - "@brief Sound to play after falling on a surface with Material footstepSoundId 1.\n\n" ); - addField( "impactMetalSound", TypeSFXTrackName, Offset(sound[ImpactMetal], PlayerData), - "@brief Sound to play after falling on a surface with Material footstepSoundId 2.\n\n" ); - addField( "impactSnowSound", TypeSFXTrackName, Offset(sound[ImpactSnow], PlayerData), - "@brief Sound to play after falling on a surface with Material footstepSoundId 3.\n\n" ); - - addField( "impactWaterEasy", TypeSFXTrackName, Offset(sound[ImpactWaterEasy], PlayerData), - "@brief Sound to play when entering the water with velocity < " - "mediumSplashSoundVelocity.\n\n" - "@see mediumSplashSoundVelocity\n"); - addField( "impactWaterMedium", TypeSFXTrackName, Offset(sound[ImpactWaterMedium], PlayerData), - "@brief Sound to play when entering the water with velocity >= " - "mediumSplashSoundVelocity and < hardSplashSoundVelocity.\n\n" - "@see mediumSplashSoundVelocity\n" - "@see hardSplashSoundVelocity\n"); - addField( "impactWaterHard", TypeSFXTrackName, Offset(sound[ImpactWaterHard], PlayerData), - "@brief Sound to play when entering the water with velocity >= " - "hardSplashSoundVelocity.\n\n" - "@see hardSplashSoundVelocity\n"); - addField( "exitingWater", TypeSFXTrackName, Offset(sound[ExitWater], PlayerData), - "@brief Sound to play when exiting the water with velocity >= exitSplashSoundVelocity.\n\n" - "@see exitSplashSoundVelocity\n"); - + INITPERSISTFIELD_SOUNDASSET_ENUMED(PlayerSound, playerSoundsEnum, PlayerData::Sounds::MaxSounds, PlayerData, "Sounds related to player interaction."); endGroup( "Interaction: Sounds" ); addGroup( "Interaction: Splashes" ); @@ -1303,8 +1273,8 @@ void PlayerData::packData(BitStream* stream) stream->write(minImpactSpeed); stream->write(minLateralImpactSpeed); - for( U32 i = 0; i < MaxSounds; i++) - sfxWrite( stream, sound[ i ] ); + for (U32 i = 0; i < MaxSounds; i++) + PACKDATA_ASSET_ARRAY(PlayerSound, i); mathWrite(*stream, boxSize); mathWrite(*stream, crouchBoxSize); @@ -1372,7 +1342,7 @@ void PlayerData::packData(BitStream* stream) stream->writeString(imageAnimPrefixFP); for (U32 i=0; iread(&minImpactSpeed); stream->read(&minLateralImpactSpeed); - for( U32 i = 0; i < MaxSounds; i++) - sfxRead( stream, &sound[ i ] ); + for (U32 i = 0; i < MaxSounds; i++) + UNPACKDATA_ASSET_ARRAY(PlayerSound, i); mathRead(*stream, &boxSize); mathRead(*stream, &crouchBoxSize); @@ -1552,7 +1522,7 @@ void PlayerData::unpackData(BitStream* stream) imageAnimPrefixFP = stream->readSTString(); for (U32 i=0; isound[PlayerData::MoveBubbles] ) - mMoveBubbleSound = SFX->createSource( mDataBlock->sound[PlayerData::MoveBubbles] ); + if ( mDataBlock->getPlayerSound(PlayerData::MoveBubbles) ) + mMoveBubbleSound = SFX->createSource( mDataBlock->getPlayerSoundProfile(PlayerData::MoveBubbles) ); - if ( mDataBlock->sound[PlayerData::WaterBreath] ) - mWaterBreathSound = SFX->createSource( mDataBlock->sound[PlayerData::WaterBreath] ); + if ( mDataBlock->getPlayerSound(PlayerData::WaterBreath) ) + mWaterBreathSound = SFX->createSource( mDataBlock->getPlayerSoundProfile(PlayerData::WaterBreath) ); } mObjBox.maxExtents.x = mDataBlock->boxSize.x * 0.5f; @@ -3300,7 +3270,7 @@ void Player::updateMove(const Move* move) { // exit-water splash sound happens for client only if ( getSpeed() >= mDataBlock->exitSplashSoundVel && !isMounted() ) - SFX->playOnce( mDataBlock->sound[PlayerData::ExitWater], &getTransform() ); + SFX->playOnce( mDataBlock->getPlayerSoundProfile(PlayerData::ExitWater), &getTransform() ); } } @@ -7060,17 +7030,17 @@ void Player::playFootstepSound( bool triggeredLeft, Material* contactMaterial, S // Treading water. if ( mWaterCoverage < mDataBlock->footSplashHeight ) - SFX->playOnce( mDataBlock->sound[ PlayerData::FootShallowSplash ], &footMat ); + SFX->playOnce( mDataBlock->getPlayerSoundProfile( PlayerData::FootShallowSplash ), &footMat ); else { if ( mWaterCoverage < 1.0 ) - SFX->playOnce( mDataBlock->sound[ PlayerData::FootWading ], &footMat ); + SFX->playOnce( mDataBlock->getPlayerSoundProfile( PlayerData::FootWading ), &footMat ); else { if ( triggeredLeft ) { - SFX->playOnce( mDataBlock->sound[ PlayerData::FootUnderWater ], &footMat ); - SFX->playOnce( mDataBlock->sound[ PlayerData::FootBubbles ], &footMat ); + SFX->playOnce( mDataBlock->getPlayerSoundProfile( PlayerData::FootUnderWater ), &footMat ); + SFX->playOnce( mDataBlock->getPlayerSoundProfile( PlayerData::FootBubbles ), &footMat ); } } } @@ -7086,13 +7056,13 @@ 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; if (sound>=0) - SFX->playOnce(mDataBlock->sound[sound], &footMat); + SFX->playOnce(mDataBlock->getPlayerSoundProfile(sound), &footMat); } } @@ -7117,13 +7087,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->sound[PlayerData::ImpactStart + sound], &getTransform()); + SFX->playOnce(mDataBlock->getPlayerSoundProfile(PlayerData::ImpactSoft + sound), &getTransform()); } } } @@ -7277,11 +7247,11 @@ bool Player::collidingWithWater( Point3F &waterHeight ) void Player::createSplash( Point3F &pos, F32 speed ) { if ( speed >= mDataBlock->hardSplashSoundVel ) - SFX->playOnce( mDataBlock->sound[PlayerData::ImpactWaterHard], &getTransform() ); + SFX->playOnce( mDataBlock->getPlayerSoundProfile(PlayerData::ImpactWaterHard), &getTransform() ); else if ( speed >= mDataBlock->medSplashSoundVel ) - SFX->playOnce( mDataBlock->sound[PlayerData::ImpactWaterMedium], &getTransform() ); + SFX->playOnce( mDataBlock->getPlayerSoundProfile(PlayerData::ImpactWaterMedium), &getTransform() ); else - SFX->playOnce( mDataBlock->sound[PlayerData::ImpactWaterEasy], &getTransform() ); + SFX->playOnce( mDataBlock->getPlayerSoundProfile(PlayerData::ImpactWaterEasy), &getTransform() ); if( mDataBlock->splash ) { diff --git a/Engine/source/T3D/player.h b/Engine/source/T3D/player.h index 042f45b37..cd216fa53 100644 --- a/Engine/source/T3D/player.h +++ b/Engine/source/T3D/player.h @@ -35,6 +35,7 @@ #include "collision/boxConvex.h" #endif +#include "T3D/assets/SoundAsset.h" #include "T3D/gameBase/gameProcess.h" class Material; @@ -76,7 +77,7 @@ struct PlayerData: public ShapeBaseData { /// need to. DECLARE_SHAPEASSET_ARRAY(PlayerData, ShapeFP, ShapeBase::MaxMountedImages); ///< Used to render with mounted images in first person [optional] - DECLARE_SHAPEASSET_ARRAY_SETGET(PlayerData, ShapeFP); + DECLARE_ASSET_ARRAY_SETGET(PlayerData, ShapeFP); StringTableEntry imageAnimPrefixFP; ///< Passed along to mounted images to modify /// animation sequences played in first person. [optional] @@ -200,7 +201,7 @@ struct PlayerData: public ShapeBaseData { FootHard, FootMetal, FootSnow, - MaxSoundOffsets, + WaterStart, FootShallowSplash, FootWading, FootUnderWater, @@ -208,7 +209,7 @@ struct PlayerData: public ShapeBaseData { MoveBubbles, WaterBreath, ImpactStart, - ImpactSoft = ImpactStart, + ImpactSoft, ImpactHard, ImpactMetal, ImpactSnow, @@ -218,7 +219,8 @@ struct PlayerData: public ShapeBaseData { ExitWater, MaxSounds }; - SFXTrack* sound[MaxSounds]; + + DECLARE_SOUNDASSET_ARRAY(PlayerData, PlayerSound, Sounds::MaxSounds); Point3F boxSize; ///< Width, depth, height Point3F crouchBoxSize; @@ -877,5 +879,4 @@ public: typedef Player::Pose PlayerPose; DefineEnumType( PlayerPose ); - #endif diff --git a/Engine/source/T3D/projectile.cpp b/Engine/source/T3D/projectile.cpp index b21fe9542..4150f1506 100644 --- a/Engine/source/T3D/projectile.cpp +++ b/Engine/source/T3D/projectile.cpp @@ -144,9 +144,9 @@ U32 Projectile::smProjectileWarpTicks = 5; // ProjectileData::ProjectileData() { - INIT_SHAPEASSET(ProjectileShape); + INIT_ASSET(ProjectileShape); - sound = NULL; + INIT_ASSET(ProjectileSound); explosion = NULL; explosionId = 0; @@ -217,10 +217,10 @@ ProjectileData::ProjectileData(const ProjectileData& other, bool temp_clone) : G splashId = other.splashId; // -- for pack/unpack of splash ptr decal = other.decal; decalId = other.decalId; // -- for pack/unpack of decal ptr - sound = other.sound; + CLONE_ASSET(ProjectileSound); lightDesc = other.lightDesc; lightDescId = other.lightDescId; // -- for pack/unpack of lightDesc ptr - CLONE_SHAPEASSET(ProjectileShape);// -- TSShape loads using mProjectileShapeName + CLONE_ASSET(ProjectileShape);// -- TSShape loads using mProjectileShapeName activateSeq = other.activateSeq; // -- from projectileShape sequence "activate" maintainSeq = other.maintainSeq; // -- from projectileShape sequence "maintain" particleEmitter = other.particleEmitter; @@ -252,8 +252,7 @@ void ProjectileData::initPersistFields() "@brief Scale to apply to the projectile's size.\n\n" "@note This is applied after SceneObject::scale\n"); - addField("sound", TypeSFXTrackName, Offset(sound, ProjectileData), - "@brief SFXTrack datablock used to play sounds while in flight.\n\n"); + INITPERSISTFIELD_SOUNDASSET(ProjectileSound, ProjectileData, "The sound for the projectile."); addField("explosion", TYPEID< ExplosionData >(), Offset(explosion, ProjectileData), "@brief Explosion datablock used when the projectile explodes outside of water.\n\n"); @@ -368,9 +367,13 @@ bool ProjectileData::preload(bool server, String &errorStr) if (Sim::findObject(decalId, decal) == false) Con::errorf(ConsoleLogEntry::General, "ProjectileData::preload: Invalid packet, bad datablockId(decal): %d", decalId); - String sfxErrorStr; - if( !sfxResolve( &sound, sfxErrorStr ) ) - Con::errorf(ConsoleLogEntry::General, "ProjectileData::preload: Invalid packet: %s", sfxErrorStr.c_str()); + if (getProjectileSound() != StringTable->EmptyString()) + { + _setProjectileSound(getProjectileSound()); + + if (!getProjectileSoundProfile()) + Con::errorf(ConsoleLogEntry::General, "SplashData::preload: Cant get an sfxProfile for splash."); + } if (!lightDesc && lightDescId != 0) if (Sim::findObject(lightDescId, lightDesc) == false) @@ -403,7 +406,7 @@ void ProjectileData::packData(BitStream* stream) { Parent::packData(stream); - PACKDATA_SHAPEASSET(ProjectileShape); + PACKDATA_ASSET(ProjectileShape); stream->writeFlag(faceViewer); if(stream->writeFlag(scale.x != 1 || scale.y != 1 || scale.z != 1)) @@ -436,8 +439,7 @@ void ProjectileData::packData(BitStream* stream) if (stream->writeFlag(decal != NULL)) stream->writeRangedU32(decal->getId(), DataBlockObjectIdFirst, DataBlockObjectIdLast); - - sfxWrite( stream, sound ); + PACKDATA_ASSET(ProjectileSound); if ( stream->writeFlag(lightDesc != NULL)) stream->writeRangedU32(lightDesc->getId(), DataBlockObjectIdFirst, @@ -468,7 +470,7 @@ void ProjectileData::unpackData(BitStream* stream) { Parent::unpackData(stream); - UNPACKDATA_SHAPEASSET(ProjectileShape); + UNPACKDATA_ASSET(ProjectileShape); faceViewer = stream->readFlag(); if(stream->readFlag()) @@ -497,8 +499,8 @@ void ProjectileData::unpackData(BitStream* stream) if (stream->readFlag()) decalId = stream->readRangedU32(DataBlockObjectIdFirst, DataBlockObjectIdLast); - - sfxRead( stream, &sound ); + + UNPACKDATA_ASSET(ProjectileSound); if (stream->readFlag()) lightDescId = stream->readRangedU32(DataBlockObjectIdFirst, DataBlockObjectIdLast); @@ -884,8 +886,8 @@ bool Projectile::onNewDataBlock( GameBaseData *dptr, bool reload ) SFX_DELETE( mSound ); - if ( mDataBlock->sound ) - mSound = SFX->createSource( mDataBlock->sound ); + if ( mDataBlock->getProjectileSound() ) + mSound = SFX->createSource( mDataBlock->getProjectileSoundProfile() ); } return true; @@ -1099,7 +1101,7 @@ void Projectile::explode( const Point3F &p, const Point3F &n, const U32 collideT void Projectile::updateSound() { - if (!mDataBlock->sound) + if (!mDataBlock->getProjectileSound()) return; if ( mSound ) diff --git a/Engine/source/T3D/projectile.h b/Engine/source/T3D/projectile.h index 6209ba531..9aa0690d0 100644 --- a/Engine/source/T3D/projectile.h +++ b/Engine/source/T3D/projectile.h @@ -44,6 +44,7 @@ #include "lighting/lightInfo.h" #endif +#include "T3D/assets/SoundAsset.h" #include "T3D/assets/ShapeAsset.h" class ExplosionData; @@ -71,7 +72,7 @@ protected: public: DECLARE_SHAPEASSET(ProjectileData, ProjectileShape, onShapeChanged); - DECLARE_SHAPEASSET_SETGET(ProjectileData, ProjectileShape); + DECLARE_ASSET_SETGET(ProjectileData, ProjectileShape); /// Set to true if it is a billboard and want it to always face the viewer, false otherwise bool faceViewer; @@ -115,7 +116,8 @@ public: DecalData *decal; // (impact) Decal Datablock S32 decalId; // (impact) Decal ID - SFXTrack* sound; // Projectile Sound + DECLARE_SOUNDASSET(ProjectileData, ProjectileSound); + DECLARE_ASSET_SETGET(ProjectileData, ProjectileSound); LightDescription *lightDesc; S32 lightDescId; diff --git a/Engine/source/T3D/proximityMine.cpp b/Engine/source/T3D/proximityMine.cpp index 2102ef7e1..683021255 100644 --- a/Engine/source/T3D/proximityMine.cpp +++ b/Engine/source/T3D/proximityMine.cpp @@ -74,16 +74,16 @@ IMPLEMENT_CALLBACK( ProximityMineData, onExplode, void, ( ProximityMine* obj, Po ProximityMineData::ProximityMineData() : armingDelay( 0 ), armingSequence( -1 ), - armingSound( NULL ), triggerRadius( 5.0f ), triggerSpeed( 1.0f ), autoTriggerDelay( 0 ), triggerOnOwner( false ), triggerDelay( 0 ), triggerSequence( -1 ), - triggerSound( NULL ), explosionOffset( 0.05f ) { + INIT_ASSET(ArmSound); + INIT_ASSET(TriggerSound); } void ProximityMineData::initPersistFields() @@ -91,9 +91,9 @@ void ProximityMineData::initPersistFields() addGroup( "Arming" ); addField( "armingDelay", TypeF32, Offset(armingDelay, ProximityMineData), "Delay (in seconds) from when the mine is placed to when it becomes active." ); - addField( "armingSound", TypeSFXTrackName, Offset(armingSound, ProximityMineData), - "Sound to play when the mine is armed (starts at the same time as " - "the armed sequence if defined)." ); + + INITPERSISTFIELD_SOUNDASSET(ArmSound, ProximityMineData, "Arming sound for this proximity mine."); + endGroup( "Arming" ); addGroup( "Triggering" ); @@ -111,9 +111,9 @@ void ProximityMineData::initPersistFields() "Speed above which moving objects within the trigger radius will trigger the mine" ); addField( "triggerDelay", TypeF32, Offset(triggerDelay, ProximityMineData), "Delay (in seconds) from when the mine is triggered until it explodes." ); - addField( "triggerSound", TypeSFXTrackName, Offset(triggerSound, ProximityMineData), - "Sound to play when the mine is triggered (starts at the same time as " - "the triggered sequence if defined)." ); + + INITPERSISTFIELD_SOUNDASSET(TriggerSound, ProximityMineData, "Arming sound for this proximity mine."); + endGroup( "Triggering" ); addGroup( "Explosion" ); @@ -135,12 +135,10 @@ bool ProximityMineData::preload( bool server, String& errorStr ) if ( !server ) { - // Resolve sounds - String sfxErrorStr; - if( !sfxResolve( &armingSound, sfxErrorStr ) ) - Con::errorf( ConsoleLogEntry::General, "ProximityMineData::preload: Invalid packet: %s", sfxErrorStr.c_str() ); - if( !sfxResolve( &triggerSound, sfxErrorStr ) ) - Con::errorf( ConsoleLogEntry::General, "ProximityMineData::preload: Invalid packet: %s", sfxErrorStr.c_str() ); + if( !getArmSound() ) + Con::errorf( ConsoleLogEntry::General, "ProximityMineData::preload: Invalid arming sound." ); + if( !getTriggerSound() ) + Con::errorf( ConsoleLogEntry::General, "ProximityMineData::preload: Invalid trigger sound." ); } if ( mShape ) @@ -158,14 +156,14 @@ void ProximityMineData::packData( BitStream* stream ) Parent::packData( stream ); stream->write( armingDelay ); - sfxWrite( stream, armingSound ); + PACKDATA_ASSET(ArmSound); stream->write( autoTriggerDelay ); stream->writeFlag( triggerOnOwner ); stream->write( triggerRadius ); stream->write( triggerSpeed ); stream->write( triggerDelay ); - sfxWrite( stream, triggerSound ); + PACKDATA_ASSET(TriggerSound); } void ProximityMineData::unpackData( BitStream* stream ) @@ -173,14 +171,14 @@ void ProximityMineData::unpackData( BitStream* stream ) Parent::unpackData(stream); stream->read( &armingDelay ); - sfxRead( stream, &armingSound ); + UNPACKDATA_ASSET(ArmSound); stream->read( &autoTriggerDelay ); triggerOnOwner = stream->readFlag(); stream->read( &triggerRadius ); stream->read( &triggerSpeed ); stream->read( &triggerDelay ); - sfxRead( stream, &triggerSound ); + UNPACKDATA_ASSET(TriggerSound); } //---------------------------------------------------------------------------- @@ -428,8 +426,8 @@ void ProximityMine::processTick( const Move* move ) mAnimThread = mShapeInstance->addThread(); mShapeInstance->setSequence( mAnimThread, mDataBlock->armingSequence, 0.0f ); } - if ( mDataBlock->armingSound ) - SFX->playOnce( mDataBlock->armingSound, &getRenderTransform() ); + if ( mDataBlock->getArmSound() ) + SFX->playOnce( mDataBlock->getArmSoundAsset()->getSfxProfile(), &getRenderTransform() ); } break; @@ -469,8 +467,8 @@ void ProximityMine::processTick( const Move* move ) mAnimThread = mShapeInstance->addThread(); mShapeInstance->setSequence( mAnimThread, mDataBlock->triggerSequence, 0.0f ); } - if ( mDataBlock->triggerSound ) - SFX->playOnce( mDataBlock->triggerSound, &getRenderTransform() ); + if ( mDataBlock->getTriggerSound() ) + SFX->playOnce( mDataBlock->getTriggerSoundAsset()->getSfxProfile(), &getRenderTransform() ); if ( isServerObject() ) mDataBlock->onTriggered_callback( this, sql.mList[0] ); diff --git a/Engine/source/T3D/proximityMine.h b/Engine/source/T3D/proximityMine.h index 7b448e628..2c748317c 100644 --- a/Engine/source/T3D/proximityMine.h +++ b/Engine/source/T3D/proximityMine.h @@ -27,6 +27,8 @@ #include "T3D/item.h" #endif +#include "T3D/assets/SoundAsset.h" + class ExplosionData; class SFXTrack; class ProximityMine; @@ -43,7 +45,8 @@ struct ProximityMineData: public ItemData public: F32 armingDelay; S32 armingSequence; - SFXTrack* armingSound; + DECLARE_SOUNDASSET(ProximityMineData, ArmSound); + DECLARE_ASSET_SETGET(ProximityMineData, ArmSound); F32 autoTriggerDelay; bool triggerOnOwner; @@ -51,7 +54,8 @@ public: F32 triggerSpeed; F32 triggerDelay; S32 triggerSequence; - SFXTrack* triggerSound; + DECLARE_SOUNDASSET(ProximityMineData, TriggerSound); + DECLARE_ASSET_SETGET(ProximityMineData, TriggerSound); F32 explosionOffset; diff --git a/Engine/source/T3D/rigidShape.cpp b/Engine/source/T3D/rigidShape.cpp index cf26f8ea9..01b830db0 100644 --- a/Engine/source/T3D/rigidShape.cpp +++ b/Engine/source/T3D/rigidShape.cpp @@ -238,7 +238,7 @@ RigidShapeData::RigidShapeData() density = 4; for (S32 i = 0; i < Body::MaxSounds; i++) - body.sound[i] = 0; + INIT_ASSET_ARRAY(BodySounds, i); dustEmitter = NULL; dustID = 0; @@ -256,7 +256,8 @@ RigidShapeData::RigidShapeData() hardSplashSoundVel = 3.0; enablePhysicsRep = true; - dMemset(waterSound, 0, sizeof(waterSound)); + for (S32 i = 0; i < Sounds::MaxSounds; i++) + INIT_ASSET_ARRAY(WaterSounds, i); dragForce = 0; vertFactor = 0.25; @@ -299,7 +300,21 @@ bool RigidShapeData::preload(bool server, String &errorStr) // Resolve objects transmitted from server if (!server) { for (S32 i = 0; i < Body::MaxSounds; i++) - sfxResolve( &body.sound[ i ], errorStr ); + { + if (mBodySounds[i]) + { + _setBodySounds(getBodySounds(i), i); + } + } + + for (S32 j = 0; j < Sounds::MaxSounds; j++) + { + if (mWaterSounds[j]) + { + _setWaterSounds(getWaterSounds(j), j); + } + } + } if( !dustEmitter && dustID != 0 ) @@ -354,8 +369,10 @@ void RigidShapeData::packData(BitStream* stream) stream->write(body.restitution); stream->write(body.friction); - for( U32 i = 0; i < Body::MaxSounds; ++ i ) - sfxWrite( stream, body.sound[ i ] ); + for (U32 i = 0; i < Body::MaxSounds; ++i) + { + PACKDATA_ASSET_ARRAY(BodySounds, i); + } stream->write(minImpactSpeed); stream->write(softImpactSpeed); @@ -384,8 +401,10 @@ void RigidShapeData::packData(BitStream* stream) stream->write(enablePhysicsRep); // write the water sound profiles - for( U32 i = 0; i < MaxSounds; ++ i ) - sfxWrite( stream, waterSound[ i ] ); + for (U32 i = 0; i < Sounds::MaxSounds; ++i) + { + PACKDATA_ASSET_ARRAY(WaterSounds, i); + } if (stream->writeFlag( dustEmitter )) stream->writeRangedU32( dustEmitter->getId(), DataBlockObjectIdFirst, DataBlockObjectIdLast ); @@ -413,8 +432,10 @@ void RigidShapeData::unpackData(BitStream* stream) stream->read(&body.restitution); stream->read(&body.friction); - for( U32 i = 0; i < Body::MaxSounds; i++) - sfxRead( stream, &body.sound[ i ] ); + for (U32 i = 0; i < Body::Sounds::MaxSounds; i++) + { + UNPACKDATA_ASSET_ARRAY(BodySounds, i); + } stream->read(&minImpactSpeed); stream->read(&softImpactSpeed); @@ -443,8 +464,10 @@ void RigidShapeData::unpackData(BitStream* stream) stream->read(&enablePhysicsRep); // write the water sound profiles - for( U32 i = 0; i < MaxSounds; ++ i ) - sfxRead( stream, &waterSound[ i ] ); + for (U32 i = 0; i < Sounds::MaxSounds; ++i) + { + UNPACKDATA_ASSET_ARRAY(WaterSounds, i); + } if( stream->readFlag() ) dustID = (S32) stream->readRangedU32(DataBlockObjectIdFirst, DataBlockObjectIdLast); @@ -516,21 +539,15 @@ void RigidShapeData::initPersistFields() addGroup( "Sounds" ); - addField("softImpactSound", TypeSFXTrackName, Offset(body.sound[Body::SoftImpactSound], RigidShapeData), - "Sound to play when body impacts with at least softImageSpeed but less than hardImpactSpeed." ); - addField("hardImpactSound", TypeSFXTrackName, Offset(body.sound[Body::HardImpactSound], RigidShapeData), - "Sound to play when body impacts with at least hardImpactSpeed." ); + INITPERSISTFIELD_SOUNDASSET_ARRAY(BodySounds, Body::Sounds::MaxSounds, RigidShapeData, "Sounds for body."); addField("exitSplashSoundVelocity", TypeF32, Offset(exitSplashSoundVel, RigidShapeData), "The minimum velocity at which the exit splash sound will be played when emerging from water.\n"); addField("softSplashSoundVelocity", TypeF32, Offset(softSplashSoundVel, RigidShapeData),"The minimum velocity at which the soft splash sound will be played when impacting water.\n"); addField("mediumSplashSoundVelocity", TypeF32, Offset(medSplashSoundVel, RigidShapeData), "The minimum velocity at which the medium splash sound will be played when impacting water.\n"); addField("hardSplashSoundVelocity", TypeF32, Offset(hardSplashSoundVel, RigidShapeData), "The minimum velocity at which the hard splash sound will be played when impacting water.\n"); - addField("exitingWater", TypeSFXTrackName, Offset(waterSound[ExitWater], RigidShapeData), "The AudioProfile will be used to produce sounds when emerging from water.\n"); - addField("impactWaterEasy", TypeSFXTrackName, Offset(waterSound[ImpactSoft], RigidShapeData), "The AudioProfile will be used to produce sounds when a soft impact with water occurs.\n"); - addField("impactWaterMedium", TypeSFXTrackName, Offset(waterSound[ImpactMedium], RigidShapeData), "The AudioProfile will be used to produce sounds when a medium impact with water occurs.\n"); - addField("impactWaterHard", TypeSFXTrackName, Offset(waterSound[ImpactHard], RigidShapeData), "The AudioProfile will be used to produce sounds when a hard impact with water occurs.\n"); - addField("waterWakeSound", TypeSFXTrackName, Offset(waterSound[Wake], RigidShapeData), "The AudioProfile will be used to produce sounds when a water wake is displayed.\n"); + INITPERSISTFIELD_SOUNDASSET_ARRAY(WaterSounds, Sounds::MaxSounds, RigidShapeData, "Sounds for interacting with water."); + endGroup( "Sounds" ); addGroup( "Camera" ); @@ -1155,27 +1172,27 @@ void RigidShape::updatePos(F32 dt) if (collSpeed >= mDataBlock->softImpactSpeed) impactSound = RigidShapeData::Body::SoftImpactSound; - if (impactSound != -1 && mDataBlock->body.sound[impactSound] != NULL) - SFX->playOnce(mDataBlock->body.sound[impactSound], &getTransform()); + if (impactSound != -1 && mDataBlock->getBodySounds(impactSound) != NULL) + SFX->playOnce(mDataBlock->getBodySoundProfile(impactSound), &getTransform()); } // Water volume sounds F32 vSpeed = getVelocity().len(); if (!inLiquid && mWaterCoverage >= 0.8f) { if (vSpeed >= mDataBlock->hardSplashSoundVel) - SFX->playOnce(mDataBlock->waterSound[RigidShapeData::ImpactHard], &getTransform()); + SFX->playOnce(mDataBlock->getWaterSoundProfile(RigidShapeData::ImpactHard), &getTransform()); else if (vSpeed >= mDataBlock->medSplashSoundVel) - SFX->playOnce(mDataBlock->waterSound[RigidShapeData::ImpactMedium], &getTransform()); + SFX->playOnce(mDataBlock->getWaterSoundProfile(RigidShapeData::ImpactMedium), &getTransform()); else if (vSpeed >= mDataBlock->softSplashSoundVel) - SFX->playOnce(mDataBlock->waterSound[RigidShapeData::ImpactSoft], &getTransform()); + SFX->playOnce(mDataBlock->getWaterSoundProfile(RigidShapeData::ImpactSoft), &getTransform()); inLiquid = true; } else if (inLiquid && mWaterCoverage < 0.8f) { if (vSpeed >= mDataBlock->exitSplashSoundVel) - SFX->playOnce(mDataBlock->waterSound[RigidShapeData::ExitWater], &getTransform()); + SFX->playOnce(mDataBlock->getWaterSoundProfile(RigidShapeData::ExitWater), &getTransform()); inLiquid = false; } } diff --git a/Engine/source/T3D/rigidShape.h b/Engine/source/T3D/rigidShape.h index 0389f2a72..ef3ead6e5 100644 --- a/Engine/source/T3D/rigidShape.h +++ b/Engine/source/T3D/rigidShape.h @@ -35,6 +35,8 @@ #include "T3D/physics/physicsBody.h" #endif +#include "T3D/assets/SoundAsset.h" + class ParticleEmitter; class ParticleEmitterData; class ClippedPolyList; @@ -57,11 +59,21 @@ class RigidShapeData : public ShapeBaseData HardImpactSound, MaxSounds, }; - SFXTrack* sound[MaxSounds]; F32 restitution; F32 friction; } body; + DECLARE_SOUNDASSET_ARRAY(RigidShapeData, BodySounds, Body::Sounds::MaxSounds) + DECLARE_ASSET_ARRAY_SETGET(RigidShapeData, BodySounds); + + SFXProfile* getBodySoundProfile(U32 id) + { + if (mBodySoundsAsset[id] != NULL) + return mBodySoundsAsset[id]->getSfxProfile(); + + return NULL; + } + enum RigidShapeConsts { VC_NUM_DUST_EMITTERS = 1, @@ -79,7 +91,16 @@ class RigidShapeData : public ShapeBaseData Wake, MaxSounds }; - SFXTrack* waterSound[MaxSounds]; + DECLARE_SOUNDASSET_ARRAY(RigidShapeData, WaterSounds, Sounds::MaxSounds) + DECLARE_ASSET_ARRAY_SETGET(RigidShapeData, WaterSounds); + + SFXProfile* getWaterSoundProfile(U32 id) + { + if (mWaterSoundsAsset[id] != NULL) + return mWaterSoundsAsset[id]->getSfxProfile(); + + return NULL; + } F32 exitSplashSoundVel; F32 softSplashSoundVel; diff --git a/Engine/source/T3D/sfx/sfxEmitter.cpp b/Engine/source/T3D/sfx/sfxEmitter.cpp index 655e0071a..8ac0de6ad 100644 --- a/Engine/source/T3D/sfx/sfxEmitter.cpp +++ b/Engine/source/T3D/sfx/sfxEmitter.cpp @@ -109,7 +109,7 @@ SFXEmitter::SFXEmitter() mLocalProfile.mFilename = StringTable->EmptyString(); mLocalProfile._registerSignals(); - INIT_SOUNDASSET(Sound); + INIT_ASSET(Sound); mObjBox.minExtents.set( -1.f, -1.f, -1.f ); mObjBox.maxExtents.set( 1.f, 1.f, 1.f ); @@ -290,7 +290,7 @@ U32 SFXEmitter::packUpdate( NetConnection *con, U32 mask, BitStream *stream ) stream->writeAffineTransform( mObjToWorld ); // track - PACK_SOUNDASSET(con, Sound); + PACK_ASSET(con, Sound); //if (stream->writeFlag(mDirty.test(Track))) // sfxWrite( stream, mTrack ); @@ -401,7 +401,7 @@ void SFXEmitter::unpackUpdate( NetConnection *conn, BitStream *stream ) } // track - UNPACK_SOUNDASSET(conn, Sound); + UNPACK_ASSET(conn, Sound); /*if (_readDirtyFlag(stream, Track)) { String errorStr; diff --git a/Engine/source/T3D/sfx/sfxEmitter.h b/Engine/source/T3D/sfx/sfxEmitter.h index aeecd13bf..cdb93a8bf 100644 --- a/Engine/source/T3D/sfx/sfxEmitter.h +++ b/Engine/source/T3D/sfx/sfxEmitter.h @@ -105,7 +105,7 @@ class SFXEmitter : public SceneObject BitSet32 mDirty; DECLARE_SOUNDASSET(SFXEmitter, Sound); - DECLARE_SOUNDASSET_NET_SETGET(SFXEmitter, Sound, DirtyUpdateMask); + DECLARE_ASSET_NET_SETGET(SFXEmitter, Sound, DirtyUpdateMask); /// The sound source for the emitter. SFXSource *mSource; diff --git a/Engine/source/T3D/shapeBase.cpp b/Engine/source/T3D/shapeBase.cpp index c1a814f07..4730ee6b7 100644 --- a/Engine/source/T3D/shapeBase.cpp +++ b/Engine/source/T3D/shapeBase.cpp @@ -197,8 +197,8 @@ ShapeBaseData::ShapeBaseData() renderWhenDestroyed( true ), inheritEnergyFromMount( false ) { - INIT_SHAPEASSET(Shape); - INIT_SHAPEASSET(DebrisShape); + INIT_ASSET(Shape); + INIT_ASSET(DebrisShape); dMemset( mountPointNode, -1, sizeof( S32 ) * SceneObject::NumMountPoints ); remap_txr_tags = NULL; @@ -214,13 +214,13 @@ ShapeBaseData::ShapeBaseData(const ShapeBaseData& other, bool temp_clone) : Game shadowProjectionDistance = other.shadowProjectionDistance; shadowSphereAdjust = other.shadowSphereAdjust; cloakTexName = other.cloakTexName; - CLONE_SHAPEASSET(Shape); + CLONE_ASSET(Shape); cubeDescName = other.cubeDescName; cubeDescId = other.cubeDescId; reflectorDesc = other.reflectorDesc; debris = other.debris; debrisID = other.debrisID; // -- for pack/unpack of debris ptr - CLONE_SHAPEASSET(DebrisShape); + CLONE_ASSET(DebrisShape); explosion = other.explosion; explosionID = other.explosionID; // -- for pack/unpack of explosion ptr underwaterExplosion = other.underwaterExplosion; @@ -757,8 +757,8 @@ void ShapeBaseData::packData(BitStream* stream) stream->write(shadowProjectionDistance); stream->write(shadowSphereAdjust); - PACKDATA_SHAPEASSET(Shape); - PACKDATA_SHAPEASSET(DebrisShape); + PACKDATA_ASSET(Shape); + PACKDATA_ASSET(DebrisShape); stream->writeString(cloakTexName); if(stream->writeFlag(mass != gShapeBaseDataProto.mass)) @@ -835,8 +835,8 @@ void ShapeBaseData::unpackData(BitStream* stream) stream->read(&shadowProjectionDistance); stream->read(&shadowSphereAdjust); - UNPACKDATA_SHAPEASSET(Shape); - UNPACKDATA_SHAPEASSET(DebrisShape); + UNPACKDATA_ASSET(Shape); + UNPACKDATA_ASSET(DebrisShape); cloakTexName = stream->readSTString(); if(stream->readFlag()) diff --git a/Engine/source/T3D/shapeBase.h b/Engine/source/T3D/shapeBase.h index 2deb7996c..920289385 100644 --- a/Engine/source/T3D/shapeBase.h +++ b/Engine/source/T3D/shapeBase.h @@ -73,6 +73,7 @@ // Need full definition visible for SimObjectPtr #include "T3D/fx/particleEmitter.h" +#include "T3D/assets/SoundAsset.h" class GFXCubemap; class TSShapeInstance; @@ -259,11 +260,12 @@ struct ShapeBaseImageData: public GameBaseData { /// the imageSlot. ParticleEmitterData* emitter; ///< A particle emitter; this emitter will emit as long as the gun is in this /// this state. - SFXTrack* sound; + + //SFXTrack* sound; F32 emitterTime; ///< S32 emitterNode[MaxShapes]; ///< Node ID on the shape to emit from + SoundAsset* sound; }; - /// @name State Data /// Individual state data used to initialize struct array /// @{ @@ -321,7 +323,10 @@ struct ShapeBaseImageData: public GameBaseData { bool stateIgnoreLoadedForReady [MaxStates]; - SFXTrack* stateSound [MaxStates]; + DECLARE_SOUNDASSET_ARRAY(ShapeBaseImageData, stateSound, MaxStates); + DECLARE_ASSET_ARRAY_SETGET(ShapeBaseImageData, stateSound); + + //SFXTrack* stateSound [MaxStates]; const char* stateScript [MaxStates]; ParticleEmitterData* stateEmitter [MaxStates]; @@ -374,10 +379,10 @@ struct ShapeBaseImageData: public GameBaseData { ///< when the script prefix has changed. DECLARE_SHAPEASSET_ARRAY(ShapeBaseImageData, Shape, MaxShapes); ///< Name of shape to render. - DECLARE_SHAPEASSET_ARRAY_SETGET(ShapeBaseImageData, Shape); + DECLARE_ASSET_ARRAY_SETGET(ShapeBaseImageData, Shape); //DECLARE_SHAPEASSET(ShapeBaseImageData, ShapeFP); ///< Name of shape to render in first person (optional). - //DECLARE_SHAPEASSET_SETGET(ShapeBaseImageData, ShapeFP); + //DECLARE_ASSET_SETGET(ShapeBaseImageData, ShapeFP); StringTableEntry imageAnimPrefix; ///< Passed along to the mounting shape to modify /// animation sequences played in 3rd person. [optional] @@ -541,7 +546,7 @@ public: F32 shadowSphereAdjust; DECLARE_SHAPEASSET(ShapeBaseData, Shape, onShapeChanged); - DECLARE_SHAPEASSET_SETGET(ShapeBaseData, Shape); + DECLARE_ASSET_SETGET(ShapeBaseData, Shape); StringTableEntry cloakTexName; @@ -557,7 +562,7 @@ public: S32 debrisID; DECLARE_SHAPEASSET(ShapeBaseData, DebrisShape, onDebrisChanged); - DECLARE_SHAPEASSET_SETGET(ShapeBaseData, DebrisShape); + DECLARE_ASSET_SETGET(ShapeBaseData, DebrisShape); ExplosionData* explosion; S32 explosionID; @@ -662,7 +667,7 @@ public: DECLARE_CALLBACK( void, onCollision, ( ShapeBase* obj, SceneObject* collObj, VectorF vec, F32 len ) ); DECLARE_CALLBACK( void, onDamage, ( ShapeBase* obj, F32 delta ) ); DECLARE_CALLBACK( void, onTrigger, ( ShapeBase* obj, S32 index, bool state ) ); - DECLARE_CALLBACK(void, onEndSequence, (ShapeBase* obj, S32 slot, const char* name)); + DECLARE_CALLBACK( void, onEndSequence, (ShapeBase* obj, S32 slot, const char* name)); DECLARE_CALLBACK( void, onForceUncloak, ( ShapeBase* obj, const char* reason ) ); /// @} struct TextureTagRemapping diff --git a/Engine/source/T3D/shapeImage.cpp b/Engine/source/T3D/shapeImage.cpp index b8ea08a75..ee5d62476 100644 --- a/Engine/source/T3D/shapeImage.cpp +++ b/Engine/source/T3D/shapeImage.cpp @@ -132,7 +132,7 @@ ShapeBaseImageData::StateData::StateData() loaded = IgnoreLoaded; spin = IgnoreSpin; recoil = NoRecoil; - sound = 0; + sound = NULL; emitter = NULL; shapeSequence = NULL; shapeSequenceScale = true; @@ -156,6 +156,7 @@ ShapeBaseImageData::StateData::StateData() flashSequence[i] = false; emitterNode[i] = -1; } + } static ShapeBaseImageData::StateData gDefaultStateData; @@ -256,7 +257,7 @@ ShapeBaseImageData::ShapeBaseImageData() stateShapeSequence[i] = 0; stateScaleShapeSequence[i] = false; - stateSound[i] = 0; + INIT_ASSET_ARRAY(stateSound, i); stateScript[i] = 0; stateEmitter[i] = 0; stateEmitterTime[i] = 0; @@ -294,7 +295,7 @@ ShapeBaseImageData::ShapeBaseImageData() hasFlash[i] = false; shapeIsValid[i] = false; - INIT_SHAPEASSET_ARRAY(Shape, i); + INIT_ASSET_ARRAY(Shape, i); } shakeCamera = false; @@ -303,6 +304,7 @@ ShapeBaseImageData::ShapeBaseImageData() camShakeDuration = 1.5f; camShakeRadius = 3.0f; camShakeFalloff = 10.0f; + } ShapeBaseImageData::~ShapeBaseImageData() @@ -368,7 +370,8 @@ bool ShapeBaseImageData::onAdd() s.shapeSequence = stateShapeSequence[i]; s.shapeSequenceScale = stateScaleShapeSequence[i]; - s.sound = stateSound[i]; + //_setstateSound(getstateSound(i),i); + s.sound = getstateSoundAsset(i); s.script = stateScript[i]; s.emitter = stateEmitter[i]; s.emitterTime = stateEmitterTime[i]; @@ -418,10 +421,14 @@ bool ShapeBaseImageData::preload(bool server, String &errorStr) if (state[i].emitter) if (!Sim::findObject(SimObjectId((uintptr_t)state[i].emitter), state[i].emitter)) Con::errorf(ConsoleLogEntry::General, "Error, unable to load emitter for image datablock"); - - String str; - if( !sfxResolve( &state[ i ].sound, str ) ) - Con::errorf( ConsoleLogEntry::General, str.c_str() ); + + if (getstateSound(i) != StringTable->EmptyString()) + { + _setstateSound(getstateSound(i), i); + if (!getstateSoundProfile(i)) + Con::errorf("ShapeBaseImageData::preload() - Could not find profile for asset %s on state %d", getstateSound(i), i); + } + } } @@ -921,8 +928,8 @@ void ShapeBaseImageData::initPersistFields() addField( "stateScaleShapeSequence", TypeBool, Offset(stateScaleShapeSequence, ShapeBaseImageData), MaxStates, "Indicates if the sequence to be played on the mounting shape should be scaled to the length of the state." ); - addField( "stateSound", TypeSFXTrackName, Offset(stateSound, ShapeBaseImageData), MaxStates, - "Sound to play on entry to this state." ); + INITPERSISTFIELD_SOUNDASSET_ARRAY(stateSound, MaxStates, ShapeBaseImageData, "State sound."); + addField( "stateScript", TypeCaseString, Offset(stateScript, ShapeBaseImageData), MaxStates, "@brief Method to execute on entering this state.\n\n" "Scoped to this image class name, then ShapeBaseImageData. The script " @@ -975,7 +982,7 @@ void ShapeBaseImageData::packData(BitStream* stream) for (U32 j = 0; j < MaxShapes; ++j) { - PACKDATA_SHAPEASSET_ARRAY(Shape, j); // shape 0 for normal use, shape 1 for first person use (optional) + PACKDATA_ASSET_ARRAY(Shape, j); // shape 0 for normal use, shape 1 for first person use (optional) } stream->writeString(imageAnimPrefix); @@ -1139,7 +1146,7 @@ void ShapeBaseImageData::packData(BitStream* stream) } } - sfxWrite( stream, s.sound ); + PACKDATA_ASSET_ARRAY(stateSound, i); } stream->write(maxConcurrentSounds); stream->writeFlag(useRemainderDT); @@ -1159,7 +1166,7 @@ void ShapeBaseImageData::unpackData(BitStream* stream) for (U32 j = 0; j < MaxShapes; ++j) { - UNPACKDATA_SHAPEASSET_ARRAY(Shape, j); // shape 0 for normal use, shape 1 for first person use (optional) + UNPACKDATA_ASSET_ARRAY(Shape, j); // shape 0 for normal use, shape 1 for first person use (optional) } imageAnimPrefix = stream->readSTString(); @@ -1344,7 +1351,7 @@ void ShapeBaseImageData::unpackData(BitStream* stream) else s.emitter = 0; - sfxRead( stream, &s.sound ); + UNPACKDATA_ASSET_ARRAY(stateSound, i); } } @@ -2752,9 +2759,10 @@ void ShapeBase::setImageState(U32 imageSlot, U32 newState,bool force) { onImageStateAnimation(imageSlot, stateData.shapeSequence, stateData.direction, stateData.shapeSequenceScale, stateData.timeoutValue); } - // Delete any loooping sounds that were in the previous state. - if (lastState->sound && lastState->sound->getDescription()->mIsLooping) + // this is the crazy bit =/ needs to know prev state in order to stop sounds. + // lastState does not return an id for the prev state so we keep track of it. + if (lastState->sound && lastState->sound->getSfxProfile()->getDescription()->mIsLooping) { for(Vector::iterator i = image.mSoundSources.begin(); i != image.mSoundSources.end(); i++) SFX_DELETE((*i)); @@ -2766,7 +2774,7 @@ void ShapeBase::setImageState(U32 imageSlot, U32 newState,bool force) if( stateData.sound && isGhost() ) { const Point3F& velocity = getVelocity(); - image.addSoundSource(SFX->createSource( stateData.sound, &getRenderTransform(), &velocity )); + image.addSoundSource(SFX->createSource(stateData.sound->getSfxProfile(), &getRenderTransform(), &velocity )); } // Play animation diff --git a/Engine/source/T3D/tsStatic.cpp b/Engine/source/T3D/tsStatic.cpp index 9028653b8..169e6d806 100644 --- a/Engine/source/T3D/tsStatic.cpp +++ b/Engine/source/T3D/tsStatic.cpp @@ -149,7 +149,7 @@ TSStatic::TSStatic() mAnimOffset = 0.0f; mAnimSpeed = 1.0f; - INIT_SHAPEASSET(Shape); + INIT_ASSET(Shape); } TSStatic::~TSStatic() @@ -958,7 +958,7 @@ U32 TSStatic::packUpdate(NetConnection* con, U32 mask, BitStream* stream) if (stream->writeFlag(mask & AdvancedStaticOptionsMask)) { - PACK_SHAPEASSET(con, Shape); + PACK_ASSET(con, Shape); stream->write((U32)mDecalType); @@ -1073,7 +1073,7 @@ void TSStatic::unpackUpdate(NetConnection* con, BitStream* stream) if (stream->readFlag()) // AdvancedStaticOptionsMask { - UNPACK_SHAPEASSET(con, Shape); + UNPACK_ASSET(con, Shape); stream->read((U32*)&mDecalType); diff --git a/Engine/source/T3D/tsStatic.h b/Engine/source/T3D/tsStatic.h index 1c82671cb..03c74c651 100644 --- a/Engine/source/T3D/tsStatic.h +++ b/Engine/source/T3D/tsStatic.h @@ -192,7 +192,7 @@ protected: Convex* mConvexList; DECLARE_SHAPEASSET(TSStatic, Shape, onShapeChanged); - DECLARE_SHAPEASSET_NET_SETGET(TSStatic, Shape, AdvancedStaticOptionsMask); + DECLARE_ASSET_NET_SETGET(TSStatic, Shape, AdvancedStaticOptionsMask); U32 mShapeHash; Vector mCollisionDetails; diff --git a/Engine/source/T3D/vehicles/flyingVehicle.cpp b/Engine/source/T3D/vehicles/flyingVehicle.cpp index e092668d8..8426da2c3 100644 --- a/Engine/source/T3D/vehicles/flyingVehicle.cpp +++ b/Engine/source/T3D/vehicles/flyingVehicle.cpp @@ -116,7 +116,7 @@ FlyingVehicleData::FlyingVehicleData() jetEmitter[j] = 0; for (S32 i = 0; i < MaxSounds; i++) - sound[i] = 0; + INIT_ASSET_ARRAY(FlyingSounds, i); vertThrustMultiple = 1.0; } @@ -131,9 +131,12 @@ bool FlyingVehicleData::preload(bool server, String &errorStr) // Resolve objects transmitted from server if (!server) { for (S32 i = 0; i < MaxSounds; i++) - if (sound[i]) - Sim::findObject(SimObjectId((uintptr_t)sound[i]),sound[i]); - + { + if (mFlyingSounds[i]) + { + _setFlyingSounds(getFlyingSounds(i), i); + } + } for (S32 j = 0; j < MaxJetEmitters; j++) if (jetEmitter[j]) Sim::findObject(SimObjectId((uintptr_t)jetEmitter[j]),jetEmitter[j]); @@ -163,10 +166,8 @@ bool FlyingVehicleData::preload(bool server, String &errorStr) void FlyingVehicleData::initPersistFields() { - addField( "jetSound", TYPEID< SFXProfile >(), Offset(sound[JetSound], FlyingVehicleData), - "Looping sound to play while the vehicle is jetting." ); - addField( "engineSound", TYPEID< SFXProfile >(), Offset(sound[EngineSound], FlyingVehicleData), - "Looping engine sound." ); + + INITPERSISTFIELD_SOUNDASSET_ARRAY(FlyingSounds, Sounds::MaxSounds, FlyingVehicleData, "Sounds for flying vehicle"); addField( "maneuveringForce", TypeF32, Offset(maneuveringForce, FlyingVehicleData), "@brief Maximum X and Y (horizontal plane) maneuvering force.\n\n" @@ -240,11 +241,7 @@ void FlyingVehicleData::packData(BitStream* stream) for (S32 i = 0; i < MaxSounds; i++) { - if (stream->writeFlag(sound[i])) - { - SimObjectId writtenId = mPacked ? SimObjectId((uintptr_t)sound[i]) : sound[i]->getId(); - stream->writeRangedU32(writtenId, DataBlockObjectIdFirst, DataBlockObjectIdLast); - } + PACKDATA_ASSET_ARRAY(FlyingSounds, i); } for (S32 j = 0; j < MaxJetEmitters; j++) @@ -277,11 +274,9 @@ void FlyingVehicleData::unpackData(BitStream* stream) { Parent::unpackData(stream); - for (S32 i = 0; i < MaxSounds; i++) { - sound[i] = NULL; - if (stream->readFlag()) - sound[i] = (SFXProfile*)(uintptr_t)stream->readRangedU32(DataBlockObjectIdFirst, - DataBlockObjectIdLast); + for (S32 i = 0; i < MaxSounds; i++) + { + UNPACKDATA_ASSET_ARRAY(FlyingSounds, i); } for (S32 j = 0; j < MaxJetEmitters; j++) { @@ -374,11 +369,11 @@ bool FlyingVehicle::onNewDataBlock(GameBaseData* dptr, bool reload) SFX_DELETE( mJetSound ); SFX_DELETE( mEngineSound ); - if ( mDataBlock->sound[FlyingVehicleData::EngineSound] ) - mEngineSound = SFX->createSource( mDataBlock->sound[FlyingVehicleData::EngineSound], &getTransform() ); + if ( mDataBlock->getFlyingSounds(FlyingVehicleData::EngineSound) ) + mEngineSound = SFX->createSource( mDataBlock->getFlyingSoundProfile(FlyingVehicleData::EngineSound), &getTransform() ); - if ( mDataBlock->sound[FlyingVehicleData::JetSound] ) - mJetSound = SFX->createSource( mDataBlock->sound[FlyingVehicleData::JetSound], &getTransform() ); + if ( mDataBlock->getFlyingSounds(FlyingVehicleData::JetSound)) + mJetSound = SFX->createSource( mDataBlock->getFlyingSoundProfile(FlyingVehicleData::JetSound), &getTransform() ); } // Jet Sequences diff --git a/Engine/source/T3D/vehicles/flyingVehicle.h b/Engine/source/T3D/vehicles/flyingVehicle.h index 814b66250..f0a45edd3 100644 --- a/Engine/source/T3D/vehicles/flyingVehicle.h +++ b/Engine/source/T3D/vehicles/flyingVehicle.h @@ -45,7 +45,15 @@ struct FlyingVehicleData: public VehicleData { EngineSound, MaxSounds, }; - SFXProfile* sound[MaxSounds]; + DECLARE_SOUNDASSET_ARRAY(FlyingVehicleData, FlyingSounds, Sounds::MaxSounds); + DECLARE_ASSET_ARRAY_SETGET(FlyingVehicleData, FlyingSounds); + SFXProfile* getFlyingSoundProfile(U32 id) + { + if (mFlyingSoundsAsset[id] != NULL) + return mFlyingSoundsAsset[id]->getSfxProfile(); + + return NULL; + } enum Jets { // These enums index into a static name list. diff --git a/Engine/source/T3D/vehicles/hoverVehicle.cpp b/Engine/source/T3D/vehicles/hoverVehicle.cpp index ee49b917f..dbaee9993 100644 --- a/Engine/source/T3D/vehicles/hoverVehicle.cpp +++ b/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 | @@ -152,7 +162,7 @@ HoverVehicleData::HoverVehicleData() jetEmitter[j] = 0; for (S32 i = 0; i < MaxSounds; i++) - sound[i] = 0; + INIT_ASSET_ARRAY(HoverSounds, i); } HoverVehicleData::~HoverVehicleData() @@ -232,14 +242,8 @@ void HoverVehicleData::initPersistFields() addField( "pitchForce", TypeF32, Offset(pitchForce, HoverVehicleData), "Pitch (rotation about the X-axis) force applied when steering in the y-axis direction." ); - addField( "jetSound", TYPEID< SFXProfile >(), Offset(sound[JetSound], HoverVehicleData), - "Looping sound played when the vehicle is jetting." ); - addField( "engineSound", TYPEID< SFXProfile >(), Offset(sound[EngineSound], HoverVehicleData), - "Looping engine sound.\nThe volume is dynamically adjusted based on the " - "current thrust level." ); - addField( "floatSound", TYPEID< SFXProfile >(), Offset(sound[FloatSound], HoverVehicleData), - "Looping sound played while the vehicle is floating.\n\n@see stabMinLen" ); - + 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 " "of dust particles is generated only while the vehicle is moving." ); @@ -311,9 +315,13 @@ bool HoverVehicleData::preload(bool server, String &errorStr) // Resolve objects transmitted from server if (!server) { + for (S32 i = 0; i < MaxSounds; i++) - if (sound[i]) - Sim::findObject(SimObjectId((uintptr_t)sound[i]),sound[i]); + if (getHoverSounds(i) != StringTable->EmptyString()) + { + _setHoverSounds(getHoverSounds(i), i); + } + for (S32 j = 0; j < MaxJetEmitters; j++) if (jetEmitter[j]) Sim::findObject(SimObjectId((uintptr_t)jetEmitter[j]),jetEmitter[j]); @@ -361,9 +369,9 @@ void HoverVehicleData::packData(BitStream* stream) stream->write(dustTrailFreqMod); for (S32 i = 0; i < MaxSounds; i++) - if (stream->writeFlag(sound[i])) - stream->writeRangedU32(mPacked ? SimObjectId((uintptr_t)sound[i]): - sound[i]->getId(),DataBlockObjectIdFirst,DataBlockObjectIdLast); + { + PACKDATA_ASSET_ARRAY(HoverSounds, i); + } for (S32 j = 0; j < MaxJetEmitters; j++) { @@ -410,9 +418,9 @@ void HoverVehicleData::unpackData(BitStream* stream) stream->read(&dustTrailFreqMod); for (S32 i = 0; i < MaxSounds; i++) - sound[i] = stream->readFlag()? - (SFXProfile*)(uintptr_t)stream->readRangedU32(DataBlockObjectIdFirst, - DataBlockObjectIdLast): 0; + { + UNPACKDATA_ASSET_ARRAY(HoverSounds, i); + } for (S32 j = 0; j < MaxJetEmitters; j++) { jetEmitter[j] = NULL; @@ -539,14 +547,14 @@ bool HoverVehicle::onNewDataBlock(GameBaseData* dptr, bool reload) SFX_DELETE( mFloatSound ); SFX_DELETE( mJetSound ); - if ( mDataBlock->sound[HoverVehicleData::EngineSound] ) - mEngineSound = SFX->createSource( mDataBlock->sound[HoverVehicleData::EngineSound], &getTransform() ); + if ( mDataBlock->getHoverSounds(HoverVehicleData::EngineSound) ) + mEngineSound = SFX->createSource( mDataBlock->getHoverSoundProfile(HoverVehicleData::EngineSound), &getTransform() ); - if ( !mDataBlock->sound[HoverVehicleData::FloatSound] ) - mFloatSound = SFX->createSource( mDataBlock->sound[HoverVehicleData::FloatSound], &getTransform() ); + if ( !mDataBlock->getHoverSounds(HoverVehicleData::FloatSound) ) + mFloatSound = SFX->createSource( mDataBlock->getHoverSoundProfile(HoverVehicleData::FloatSound), &getTransform() ); - if ( mDataBlock->sound[HoverVehicleData::JetSound] ) - mJetSound = SFX->createSource( mDataBlock->sound[HoverVehicleData::JetSound], &getTransform() ); + if ( mDataBlock->getHoverSounds(HoverVehicleData::JetSound) ) + mJetSound = SFX->createSource( mDataBlock->getHoverSoundProfile(HoverVehicleData::JetSound), &getTransform() ); } // Todo: Uncomment if this is a "leaf" class diff --git a/Engine/source/T3D/vehicles/hoverVehicle.h b/Engine/source/T3D/vehicles/hoverVehicle.h index 7b44e5987..8f666a76a 100644 --- a/Engine/source/T3D/vehicles/hoverVehicle.h +++ b/Engine/source/T3D/vehicles/hoverVehicle.h @@ -46,7 +46,14 @@ class HoverVehicleData : public VehicleData FloatSound, MaxSounds }; - SFXProfile* sound[MaxSounds]; + DECLARE_SOUNDASSET_ARRAY(HoverVehicleData, HoverSounds, Sounds::MaxSounds); + SFXProfile* getHoverSoundProfile(U32 id) + { + if (mHoverSoundsAsset[id] != NULL) + return mHoverSoundsAsset[id]->getSfxProfile(); + + return NULL; + } enum Jets { // These enums index into a static name list. diff --git a/Engine/source/T3D/vehicles/vehicle.cpp b/Engine/source/T3D/vehicles/vehicle.cpp index c673cd3b7..2fad95b6d 100644 --- a/Engine/source/T3D/vehicles/vehicle.cpp +++ b/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" @@ -166,7 +188,9 @@ VehicleData::VehicleData() powerSteering = false; for (S32 i = 0; i < Body::MaxSounds; i++) - body.sound[i] = 0; + { + INIT_ASSET_ARRAY(VehicleBodySounds, i); + } dustEmitter = NULL; dustID = 0; @@ -189,7 +213,8 @@ VehicleData::VehicleData() medSplashSoundVel = 2.0; hardSplashSoundVel = 3.0; - dMemset(waterSound, 0, sizeof(waterSound)); + for (S32 i = 0; i < Sounds::MaxSounds; i++) + INIT_ASSET_ARRAY(VehicleWaterSounds, i); collDamageThresholdVel = 20; collDamageMultiplier = 0.05f; @@ -215,8 +240,20 @@ bool VehicleData::preload(bool server, String &errorStr) // Resolve objects transmitted from server if (!server) { for (S32 i = 0; i < Body::MaxSounds; i++) - if (body.sound[i]) - Sim::findObject(SimObjectId((uintptr_t)body.sound[i]),body.sound[i]); + { + if (getVehicleBodySounds(i) != StringTable->EmptyString() ) + { + _setVehicleBodySounds(getVehicleBodySounds(i), i); + } + } + + for (S32 j = 0; j < Sounds::MaxSounds; j++) + { + if (getVehicleWaterSounds(j) != StringTable->EmptyString()) + { + _setVehicleWaterSounds(getVehicleWaterSounds(j), j); + } + } } if( !dustEmitter && dustID != 0 ) @@ -264,10 +301,9 @@ void VehicleData::packData(BitStream* stream) stream->write(body.restitution); stream->write(body.friction); for (i = 0; i < Body::MaxSounds; i++) - if (stream->writeFlag(body.sound[i])) - stream->writeRangedU32(mPacked ? SimObjectId((uintptr_t)body.sound[i]): - body.sound[i]->getId(),DataBlockObjectIdFirst, - DataBlockObjectIdLast); + { + PACKDATA_ASSET_ARRAY(VehicleBodySounds, i); + } stream->write(minImpactSpeed); stream->write(softImpactSpeed); @@ -308,9 +344,10 @@ void VehicleData::packData(BitStream* stream) stream->write(enablePhysicsRep); // write the water sound profiles - for(i = 0; i < MaxSounds; i++) - if(stream->writeFlag(waterSound[i])) - stream->writeRangedU32(waterSound[i]->getId(), DataBlockObjectIdFirst, DataBlockObjectIdLast); + for (i = 0; i < MaxSounds; i++) + { + PACKDATA_ASSET_ARRAY(VehicleWaterSounds, i); + } if (stream->writeFlag( dustEmitter )) { @@ -359,11 +396,9 @@ void VehicleData::unpackData(BitStream* stream) stream->read(&body.restitution); stream->read(&body.friction); S32 i; - for (i = 0; i < Body::MaxSounds; i++) { - body.sound[i] = NULL; - if (stream->readFlag()) - body.sound[i] = (SFXProfile*)(uintptr_t)stream->readRangedU32(DataBlockObjectIdFirst, - DataBlockObjectIdLast); + for (i = 0; i < Body::MaxSounds; i++) + { + UNPACKDATA_ASSET_ARRAY(VehicleBodySounds, i); } stream->read(&minImpactSpeed); @@ -405,12 +440,10 @@ void VehicleData::unpackData(BitStream* stream) stream->read(&enablePhysicsRep); // write the water sound profiles - for(i = 0; i < MaxSounds; i++) - if(stream->readFlag()) - { - U32 id = stream->readRangedU32(DataBlockObjectIdFirst, DataBlockObjectIdLast); - waterSound[i] = dynamic_cast( Sim::findObject(id) ); - } + for (i = 0; i < Sounds::MaxSounds; i++) + { + UNPACKDATA_ASSET_ARRAY(VehicleWaterSounds, i); + } if( stream->readFlag() ) { @@ -491,15 +524,8 @@ void VehicleData::initPersistFields() addField( "bodyFriction", TypeF32, Offset(body.friction, VehicleData), "Collision friction coefficient.\nHow well this object will slide against " "objects it collides with." ); - addField( "softImpactSound", TYPEID< SFXProfile >(), Offset(body.sound[Body::SoftImpactSound], VehicleData), - "@brief Sound to play on a 'soft' impact.\n\n" - "This sound is played if the impact speed is < hardImpactSpeed and >= " - "softImpactSpeed.\n\n" - "@see softImpactSpeed" ); - addField( "hardImpactSound", TYPEID< SFXProfile >(), Offset(body.sound[Body::HardImpactSound], VehicleData), - "@brief Sound to play on a 'hard' impact.\n\n" - "This sound is played if the impact speed >= hardImpactSpeed.\n\n" - "@see hardImpactSpeed" ); + + 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." ); @@ -596,18 +622,8 @@ void VehicleData::initPersistFields() addField( "hardSplashSoundVelocity", TypeF32, Offset(hardSplashSoundVel, VehicleData), "Minimum velocity when entering the water for the imapactWaterHard sound " "to play.\n\n@see impactWaterHard" ); - addField( "exitingWater", TYPEID< SFXProfile >(), Offset(waterSound[ExitWater], VehicleData), - "Sound to play when exiting the water." ); - addField( "impactWaterEasy", TYPEID< SFXProfile >(), Offset(waterSound[ImpactSoft], VehicleData), - "Sound to play when entering the water with speed >= softSplashSoundVelocity " - "and < mediumSplashSoundVelocity." ); - addField( "impactWaterMedium", TYPEID< SFXProfile >(), Offset(waterSound[ImpactMedium], VehicleData), - "Sound to play when entering the water with speed >= mediumSplashSoundVelocity " - "and < hardSplashSoundVelocity." ); - addField( "impactWaterHard", TYPEID< SFXProfile >(), Offset(waterSound[ImpactHard], VehicleData), - "Sound to play when entering the water with speed >= hardSplashSoundVelocity." ); - addField( "waterWakeSound", TYPEID< SFXProfile >(), Offset(waterSound[Wake], VehicleData), - "Looping sound to play while moving through the 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." ); @@ -876,8 +892,8 @@ bool Vehicle::onNewDataBlock(GameBaseData* dptr,bool reload) // costs and makes the system easier to understand. SFX_DELETE( mWakeSound ); - if ( mDataBlock->waterSound[VehicleData::Wake] ) - mWakeSound = SFX->createSource( mDataBlock->waterSound[VehicleData::Wake], &getTransform() ); + if ( mDataBlock->getVehicleWaterSounds(VehicleData::Wake) != NULL ) + mWakeSound = SFX->createSource( mDataBlock->getVehicleWaterSoundProfile(VehicleData::Wake), &getTransform() ); } return true; @@ -1140,27 +1156,27 @@ void Vehicle::updatePos(F32 dt) if (collSpeed >= mDataBlock->softImpactSpeed) impactSound = VehicleData::Body::SoftImpactSound; - if (impactSound != -1 && mDataBlock->body.sound[impactSound] != NULL) - SFX->playOnce( mDataBlock->body.sound[impactSound], &getTransform() ); + if (impactSound != -1 && mDataBlock->getVehicleBodySounds(impactSound) != NULL) + SFX->playOnce( mDataBlock->getVehicleBodySoundProfile(impactSound), &getTransform() ); } // Water volume sounds F32 vSpeed = getVelocity().len(); if (!inLiquid && mWaterCoverage >= 0.8f) { if (vSpeed >= mDataBlock->hardSplashSoundVel) - SFX->playOnce( mDataBlock->waterSound[VehicleData::ImpactHard], &getTransform() ); + SFX->playOnce( mDataBlock->getVehicleWaterSoundProfile(VehicleData::ImpactHard), &getTransform() ); else if (vSpeed >= mDataBlock->medSplashSoundVel) - SFX->playOnce( mDataBlock->waterSound[VehicleData::ImpactMedium], &getTransform() ); + SFX->playOnce( mDataBlock->getVehicleWaterSoundProfile(VehicleData::ImpactMedium), &getTransform() ); else if (vSpeed >= mDataBlock->softSplashSoundVel) - SFX->playOnce( mDataBlock->waterSound[VehicleData::ImpactSoft], &getTransform() ); + SFX->playOnce( mDataBlock->getVehicleWaterSoundProfile(VehicleData::ImpactSoft), &getTransform() ); inLiquid = true; } else if(inLiquid && mWaterCoverage < 0.8f) { if (vSpeed >= mDataBlock->exitSplashSoundVel) - SFX->playOnce( mDataBlock->waterSound[VehicleData::ExitWater], &getTransform() ); + SFX->playOnce( mDataBlock->getVehicleWaterSoundProfile(VehicleData::ExitWater), &getTransform() ); inLiquid = false; } } diff --git a/Engine/source/T3D/vehicles/vehicle.h b/Engine/source/T3D/vehicles/vehicle.h index 585f81b90..2e6440662 100644 --- a/Engine/source/T3D/vehicles/vehicle.h +++ b/Engine/source/T3D/vehicles/vehicle.h @@ -45,11 +45,21 @@ struct VehicleData : public RigidShapeData HardImpactSound, MaxSounds, }; - SFXProfile* sound[MaxSounds]; F32 restitution; F32 friction; } body; + DECLARE_SOUNDASSET_ARRAY(VehicleData, VehicleBodySounds, Body::Sounds::MaxSounds) + + SFXProfile* getVehicleBodySoundProfile(U32 id) + { + if (mVehicleBodySoundsAsset[id] != NULL) + return mVehicleBodySoundsAsset[id]->getSfxProfile(); + + return NULL; + } + + enum VehicleConsts { VC_NUM_DUST_EMITTERS = 1, @@ -69,7 +79,17 @@ struct VehicleData : public RigidShapeData Wake, MaxSounds }; - SFXProfile* waterSound[MaxSounds]; + + DECLARE_SOUNDASSET_ARRAY(VehicleData, VehicleWaterSounds, Sounds::MaxSounds) + + SFXProfile* getVehicleWaterSoundProfile(U32 id) + { + if (mVehicleWaterSoundsAsset[id] != NULL) + return mVehicleWaterSoundsAsset[id]->getSfxProfile(); + + return NULL; + } + F32 exitSplashSoundVel; F32 softSplashSoundVel; F32 medSplashSoundVel; diff --git a/Engine/source/T3D/vehicles/wheeledVehicle.cpp b/Engine/source/T3D/vehicles/wheeledVehicle.cpp index 36a355cdb..258222847 100644 --- a/Engine/source/T3D/vehicles/wheeledVehicle.cpp +++ b/Engine/source/T3D/vehicles/wheeledVehicle.cpp @@ -75,7 +75,7 @@ ConsoleDocClass( WheeledVehicleTire, WheeledVehicleTire::WheeledVehicleTire() { - INIT_SHAPEASSET(Shape); + INIT_ASSET(Shape); staticFriction = 1; kineticFriction = 0.5f; @@ -177,7 +177,7 @@ void WheeledVehicleTire::packData(BitStream* stream) { Parent::packData(stream); - PACKDATA_SHAPEASSET(Shape); + PACKDATA_ASSET(Shape); stream->write(mass); stream->write(staticFriction); @@ -196,7 +196,7 @@ void WheeledVehicleTire::unpackData(BitStream* stream) { Parent::unpackData(stream); - UNPACKDATA_SHAPEASSET(Shape); + UNPACKDATA_ASSET(Shape); stream->read(&mass); stream->read(&staticFriction); @@ -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; @@ -301,7 +312,7 @@ WheeledVehicleData::WheeledVehicleData() wheelCount = 0; dMemset(&wheel, 0, sizeof(wheel)); for (S32 i = 0; i < MaxSounds; i++) - sound[i] = 0; + INIT_ASSET_ARRAY(WheeledVehicleSounds, i); } @@ -335,10 +346,9 @@ bool WheeledVehicleData::preload(bool server, String &errorStr) if (!server) { for (S32 i = 0; i < MaxSounds; i++) { - if (!sfxResolve(&sound[i], errorStr)) + if (getWheeledVehicleSounds(i) != StringTable->EmptyString()) { - delete si; - return false; + _setWheeledVehicleSounds(getWheeledVehicleSounds(i), i); } } @@ -438,16 +448,7 @@ bool WheeledVehicleData::mirrorWheel(Wheel* we) void WheeledVehicleData::initPersistFields() { - addField( "jetSound", TYPEID< SFXTrack >(), Offset(sound[JetSound], WheeledVehicleData), - "Looping sound played when the vehicle is jetting." ); - addField( "engineSound", TYPEID< SFXTrack >(), Offset(sound[EngineSound], WheeledVehicleData), - "@brief Looping engine sound.\n\n" - "The pitch is dynamically adjusted based on the current engine RPM" ); - addField("squealSound", TYPEID< SFXTrack >(), Offset(sound[SquealSound], WheeledVehicleData), - "@brief Looping sound played while any of the wheels is slipping.\n\n" - "The volume is dynamically adjusted based on how much the wheels are slipping." ); - addField("WheelImpactSound", TYPEID< SFXTrack >(), Offset(sound[WheelImpactSound], WheeledVehicleData), - "Sound played when the wheels impact the ground.\nCurrently unused." ); + 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 " @@ -481,7 +482,9 @@ void WheeledVehicleData::packData(BitStream* stream) tireEmitter->getId(),DataBlockObjectIdFirst,DataBlockObjectIdLast); for (S32 i = 0; i < MaxSounds; i++) - sfxWrite( stream, sound[ i ] ); + { + PACKDATA_ASSET_ARRAY(WheeledVehicleSounds, i); + } stream->write(maxWheelSpeed); stream->write(engineTorque); @@ -498,7 +501,9 @@ void WheeledVehicleData::unpackData(BitStream* stream) DataBlockObjectIdLast): 0; for (S32 i = 0; i < MaxSounds; i++) - sfxRead( stream, &sound[ i ] ); + { + UNPACKDATA_ASSET_ARRAY(WheeledVehicleSounds, i); + } stream->read(&maxWheelSpeed); stream->read(&engineTorque); @@ -683,14 +688,14 @@ bool WheeledVehicle::onNewDataBlock(GameBaseData* dptr, bool reload) SFX_DELETE( mSquealSound ); SFX_DELETE( mJetSound ); - if ( mDataBlock->sound[WheeledVehicleData::EngineSound] ) - mEngineSound = SFX->createSource( mDataBlock->sound[WheeledVehicleData::EngineSound], &getTransform() ); + if ( mDataBlock->getWheeledVehicleSounds(WheeledVehicleData::EngineSound) ) + mEngineSound = SFX->createSource( mDataBlock->getWheeledVehicleSound(WheeledVehicleData::EngineSound), &getTransform() ); - if ( mDataBlock->sound[WheeledVehicleData::SquealSound] ) - mSquealSound = SFX->createSource( mDataBlock->sound[WheeledVehicleData::SquealSound], &getTransform() ); + if ( mDataBlock->getWheeledVehicleSounds(WheeledVehicleData::SquealSound) ) + mSquealSound = SFX->createSource( mDataBlock->getWheeledVehicleSound(WheeledVehicleData::SquealSound), &getTransform() ); - if ( mDataBlock->sound[WheeledVehicleData::JetSound] ) - mJetSound = SFX->createSource( mDataBlock->sound[WheeledVehicleData::JetSound], &getTransform() ); + if ( mDataBlock->getWheeledVehicleSounds(WheeledVehicleData::JetSound) ) + mJetSound = SFX->createSource( mDataBlock->getWheeledVehicleSound(WheeledVehicleData::JetSound), &getTransform() ); } scriptOnNewDataBlock(); diff --git a/Engine/source/T3D/vehicles/wheeledVehicle.h b/Engine/source/T3D/vehicles/wheeledVehicle.h index b096670ca..56f5997a9 100644 --- a/Engine/source/T3D/vehicles/wheeledVehicle.h +++ b/Engine/source/T3D/vehicles/wheeledVehicle.h @@ -44,7 +44,7 @@ struct WheeledVehicleTire: public SimDataBlock typedef SimDataBlock Parent; DECLARE_SHAPEASSET(WheeledVehicleTire, Shape, onShapeChanged); - DECLARE_SHAPEASSET_SETGET(WheeledVehicleTire, Shape); + DECLARE_ASSET_SETGET(WheeledVehicleTire, Shape); // Physical properties F32 mass; // Mass of the whole wheel @@ -118,7 +118,17 @@ struct WheeledVehicleData: public VehicleData WheelImpactSound, MaxSounds, }; - SFXTrack* sound[MaxSounds]; + + DECLARE_SOUNDASSET_ARRAY(WheeledVehicleData, WheeledVehicleSounds, Sounds::MaxSounds); + + SFXProfile* getWheeledVehicleSound(U32 id) + { + if (mWheeledVehicleSoundsAsset[id] != NULL) + return mWheeledVehicleSoundsAsset[id]->getSfxProfile(); + + return NULL; + } + ParticleEmitterData* tireEmitter; diff --git a/Engine/source/afx/afxMagicMissile.cpp b/Engine/source/afx/afxMagicMissile.cpp index 93d4ef237..a67447248 100644 --- a/Engine/source/afx/afxMagicMissile.cpp +++ b/Engine/source/afx/afxMagicMissile.cpp @@ -141,7 +141,7 @@ U32 Projectile::smProjectileWarpTicks = 5; // afxMagicMissileData::afxMagicMissileData() { - INIT_SHAPEASSET(ProjectileShape); + INIT_ASSET(ProjectileShape); sound = NULL; @@ -246,7 +246,7 @@ afxMagicMissileData::afxMagicMissileData() afxMagicMissileData::afxMagicMissileData(const afxMagicMissileData& other, bool temp_clone) : GameBaseData(other, temp_clone) { - CLONE_SHAPEASSET(ProjectileShape); + CLONE_ASSET(ProjectileShape); projectileShape = other.projectileShape; // -- TSShape loads using projectileShapeName sound = other.sound; splash = other.splash; @@ -599,7 +599,7 @@ void afxMagicMissileData::packData(BitStream* stream) { Parent::packData(stream); - PACKDATA_SHAPEASSET(ProjectileShape); + PACKDATA_ASSET(ProjectileShape); /* From stock Projectile code... stream->writeFlag(faceViewer); @@ -710,7 +710,7 @@ void afxMagicMissileData::unpackData(BitStream* stream) { Parent::unpackData(stream); - UNPACKDATA_SHAPEASSET(ProjectileShape); + UNPACKDATA_ASSET(ProjectileShape); /* From stock Projectile code... faceViewer = stream->readFlag(); */ diff --git a/Engine/source/afx/afxMagicMissile.h b/Engine/source/afx/afxMagicMissile.h index 1206354fd..626dfd91d 100644 --- a/Engine/source/afx/afxMagicMissile.h +++ b/Engine/source/afx/afxMagicMissile.h @@ -72,7 +72,7 @@ public: // variables set in datablock definition: // Shape related DECLARE_SHAPEASSET(afxMagicMissileData, ProjectileShape, onShapeChanged); - DECLARE_SHAPEASSET_SETGET(afxMagicMissileData, ProjectileShape); + DECLARE_ASSET_SETGET(afxMagicMissileData, ProjectileShape); //StringTableEntry projectileShapeName; //bool hasLight; diff --git a/Engine/source/afx/ce/afxBillboard.cpp b/Engine/source/afx/ce/afxBillboard.cpp index 553c2942f..c0092c389 100644 --- a/Engine/source/afx/ce/afxBillboard.cpp +++ b/Engine/source/afx/ce/afxBillboard.cpp @@ -51,7 +51,7 @@ ConsoleDocClass( afxBillboardData, afxBillboardData::afxBillboardData() { color.set(1.0f, 1.0f, 1.0f, 1.0f); - INIT_IMAGEASSET(Texture); + INIT_ASSET(Texture); dimensions.set(1.0f, 1.0f); texCoords[0].set(0.0f, 0.0f); texCoords[1].set(0.0f, 1.0f); @@ -66,7 +66,7 @@ afxBillboardData::afxBillboardData(const afxBillboardData& other, bool temp_clon : GameBaseData(other, temp_clone) { color = other.color; - CLONE_IMAGEASSET(Texture); + CLONE_ASSET(Texture); dimensions = other.dimensions; texCoords[0] = other.texCoords[0]; texCoords[1] = other.texCoords[1]; @@ -123,7 +123,7 @@ void afxBillboardData::packData(BitStream* stream) Parent::packData(stream); stream->write(color); - PACKDATA_IMAGEASSET(Texture); + PACKDATA_ASSET(Texture); mathWrite(*stream, dimensions); mathWrite(*stream, texCoords[0]); @@ -140,7 +140,7 @@ void afxBillboardData::unpackData(BitStream* stream) Parent::unpackData(stream); stream->read(&color); - UNPACKDATA_IMAGEASSET(Texture); + UNPACKDATA_ASSET(Texture); mathRead(*stream, &dimensions); mathRead(*stream, &texCoords[0]); mathRead(*stream, &texCoords[1]); diff --git a/Engine/source/afx/ce/afxBillboard.h b/Engine/source/afx/ce/afxBillboard.h index 1183500a2..8c6532539 100644 --- a/Engine/source/afx/ce/afxBillboard.h +++ b/Engine/source/afx/ce/afxBillboard.h @@ -48,7 +48,7 @@ public: public: DECLARE_IMAGEASSET(afxBillboardData, Texture, onChangeTexture, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_SETGET(afxBillboardData, Texture); + DECLARE_ASSET_SETGET(afxBillboardData, Texture); LinearColorF color; diff --git a/Engine/source/afx/ce/afxModel.cpp b/Engine/source/afx/ce/afxModel.cpp index ba452156b..7c6eb019c 100644 --- a/Engine/source/afx/ce/afxModel.cpp +++ b/Engine/source/afx/ce/afxModel.cpp @@ -54,7 +54,7 @@ ConsoleDocClass( afxModelData, afxModelData::afxModelData() { - INIT_SHAPEASSET(Shape); + INIT_ASSET(Shape); sequence = ST_NULLSTRING; seq_rate = 1.0f; seq_offset = 0.0f; @@ -84,7 +84,7 @@ afxModelData::afxModelData() afxModelData::afxModelData(const afxModelData& other, bool temp_clone) : GameBaseData(other, temp_clone) { - CLONE_SHAPEASSET(Shape); + CLONE_ASSET(Shape); sequence = other.sequence; seq_rate = other.seq_rate; seq_offset = other.seq_offset; @@ -253,7 +253,7 @@ void afxModelData::packData(BitStream* stream) { Parent::packData(stream); - PACKDATA_SHAPEASSET(Shape); + PACKDATA_ASSET(Shape); stream->writeString(sequence); stream->write(seq_rate); stream->write(seq_offset); @@ -285,7 +285,7 @@ void afxModelData::unpackData(BitStream* stream) { Parent::unpackData(stream); - UNPACKDATA_SHAPEASSET(Shape); + UNPACKDATA_ASSET(Shape); sequence = stream->readSTString(); stream->read(&seq_rate); stream->read(&seq_offset); diff --git a/Engine/source/afx/ce/afxModel.h b/Engine/source/afx/ce/afxModel.h index 0d13692ef..80c6803f7 100644 --- a/Engine/source/afx/ce/afxModel.h +++ b/Engine/source/afx/ce/afxModel.h @@ -44,7 +44,7 @@ struct afxModelData : public GameBaseData typedef GameBaseData Parent; DECLARE_SHAPEASSET(afxModelData, Shape, onShapeChanged); - DECLARE_SHAPEASSET_SETGET(afxModelData, Shape); + DECLARE_ASSET_SETGET(afxModelData, Shape); StringTableEntry sequence; diff --git a/Engine/source/afx/ce/afxZodiac.cpp b/Engine/source/afx/ce/afxZodiac.cpp index eca56af5a..dc4cb5b01 100644 --- a/Engine/source/afx/ce/afxZodiac.cpp +++ b/Engine/source/afx/ce/afxZodiac.cpp @@ -78,7 +78,7 @@ bool afxZodiacData::sPreferDestinationGradients = false; afxZodiacData::afxZodiacData() { - INIT_IMAGEASSET(Texture); + INIT_ASSET(Texture); radius_xy = 1; vert_range.set(0.0f, 0.0f); @@ -120,7 +120,7 @@ afxZodiacData::afxZodiacData() afxZodiacData::afxZodiacData(const afxZodiacData& other, bool temp_clone) : GameBaseData(other, temp_clone) { - CLONE_IMAGEASSET(Texture); + CLONE_ASSET(Texture); radius_xy = other.radius_xy; vert_range = other.vert_range; @@ -269,7 +269,7 @@ void afxZodiacData::packData(BitStream* stream) merge_zflags(); - PACKDATA_IMAGEASSET(Texture); + PACKDATA_ASSET(Texture); stream->write(radius_xy); stream->write(vert_range.x); stream->write(vert_range.y); @@ -294,7 +294,7 @@ void afxZodiacData::unpackData(BitStream* stream) { Parent::unpackData(stream); - UNPACKDATA_IMAGEASSET(Texture); + UNPACKDATA_ASSET(Texture); stream->read(&radius_xy); stream->read(&vert_range.x); stream->read(&vert_range.y); diff --git a/Engine/source/afx/ce/afxZodiac.h b/Engine/source/afx/ce/afxZodiac.h index d03fcf593..917ee5490 100644 --- a/Engine/source/afx/ce/afxZodiac.h +++ b/Engine/source/afx/ce/afxZodiac.h @@ -60,7 +60,7 @@ public: public: DECLARE_IMAGEASSET(afxZodiacData, Texture, onImageChanged, AFX_GFXZodiacTextureProfile); - DECLARE_IMAGEASSET_SETGET(afxZodiacData, Texture); + DECLARE_ASSET_SETGET(afxZodiacData, Texture); F32 radius_xy; Point2F vert_range; diff --git a/Engine/source/afx/ce/afxZodiacPlane.cpp b/Engine/source/afx/ce/afxZodiacPlane.cpp index aaea763e7..c9045bc95 100644 --- a/Engine/source/afx/ce/afxZodiacPlane.cpp +++ b/Engine/source/afx/ce/afxZodiacPlane.cpp @@ -51,7 +51,7 @@ ConsoleDocClass( afxZodiacPlaneData, afxZodiacPlaneData::afxZodiacPlaneData() { - INIT_IMAGEASSET(Texture); + INIT_ASSET(Texture); radius_xy = 1; start_ang = 0; @@ -71,7 +71,7 @@ afxZodiacPlaneData::afxZodiacPlaneData() afxZodiacPlaneData::afxZodiacPlaneData(const afxZodiacPlaneData& other, bool temp_clone) : GameBaseData(other, temp_clone) { - CLONE_IMAGEASSET(Texture); + CLONE_ASSET(Texture); radius_xy = other.radius_xy; start_ang = other.start_ang; @@ -165,7 +165,7 @@ void afxZodiacPlaneData::packData(BitStream* stream) merge_zflags(); - PACKDATA_IMAGEASSET(Texture); + PACKDATA_ASSET(Texture); stream->write(radius_xy); stream->write(start_ang); @@ -184,7 +184,7 @@ void afxZodiacPlaneData::unpackData(BitStream* stream) { Parent::unpackData(stream); - UNPACKDATA_IMAGEASSET(Texture); + UNPACKDATA_ASSET(Texture); stream->read(&radius_xy); stream->read(&start_ang); diff --git a/Engine/source/afx/ce/afxZodiacPlane.h b/Engine/source/afx/ce/afxZodiacPlane.h index e99702b4c..7b2d7aec2 100644 --- a/Engine/source/afx/ce/afxZodiacPlane.h +++ b/Engine/source/afx/ce/afxZodiacPlane.h @@ -60,7 +60,7 @@ public: public: DECLARE_IMAGEASSET(afxZodiacPlaneData, Texture, onImageChanged, AFX_GFXZodiacTextureProfile); - DECLARE_IMAGEASSET_SETGET(afxZodiacPlaneData, Texture); + DECLARE_ASSET_SETGET(afxZodiacPlaneData, Texture); F32 radius_xy; F32 start_ang; diff --git a/Engine/source/assets/assetBase.h b/Engine/source/assets/assetBase.h index 7d1918857..d4efc6a8a 100644 --- a/Engine/source/assets/assetBase.h +++ b/Engine/source/assets/assetBase.h @@ -173,6 +173,5 @@ private: #define assetText(x,suff) #x#suff #define macroText(x) #x #define assetDoc(x,suff) "@brief "#x" "#suff - #endif // _ASSET_BASE_H_ diff --git a/Engine/source/environment/VolumetricFog.cpp b/Engine/source/environment/VolumetricFog.cpp index b602d87ac..c9eaff9df 100644 --- a/Engine/source/environment/VolumetricFog.cpp +++ b/Engine/source/environment/VolumetricFog.cpp @@ -137,8 +137,8 @@ VolumetricFog::VolumetricFog() mSpeed1.set(0.5f, 0.0f); mSpeed2.set(0.1f, 0.1f); - INIT_SHAPEASSET(Shape); - INIT_IMAGEASSET(Texture); + INIT_ASSET(Shape); + INIT_ASSET(Texture); } VolumetricFog::~VolumetricFog() @@ -543,7 +543,7 @@ U32 VolumetricFog::packUpdate(NetConnection *con, U32 mask, BitStream *stream) stream->write(mFogDensity); if (stream->writeFlag(mask & FogModulationMask)) { - PACK_IMAGEASSET(con, Texture); + PACK_ASSET(con, Texture); mTexTiles = mFabs(mTexTiles); stream->write(mTexTiles); stream->write(mStrength); @@ -567,7 +567,7 @@ U32 VolumetricFog::packUpdate(NetConnection *con, U32 mask, BitStream *stream) } if (stream->writeFlag(mask & FogShapeMask)) { - PACK_SHAPEASSET(con, Shape); + PACK_ASSET(con, Shape); mathWrite(*stream, getTransform()); mathWrite(*stream, getScale()); @@ -613,7 +613,7 @@ void VolumetricFog::unpackUpdate(NetConnection *con, BitStream *stream) } if (stream->readFlag())// Fog Modulation { - UNPACK_IMAGEASSET(con, Texture); + UNPACK_ASSET(con, Texture); stream->read(&mTexTiles); mTexTiles = mFabs(mTexTiles); stream->read(&mStrength); @@ -667,7 +667,7 @@ void VolumetricFog::unpackUpdate(NetConnection *con, BitStream *stream) } if (stream->readFlag())//Fog shape { - UNPACK_SHAPEASSET(con, Shape); + UNPACK_ASSET(con, Shape); mathRead(*stream, &mat); mathRead(*stream, &scale); diff --git a/Engine/source/environment/VolumetricFog.h b/Engine/source/environment/VolumetricFog.h index 1a4abaca3..83df0c184 100644 --- a/Engine/source/environment/VolumetricFog.h +++ b/Engine/source/environment/VolumetricFog.h @@ -85,7 +85,7 @@ class VolumetricFog : public SceneObject }; DECLARE_SHAPEASSET(VolumetricFog, Shape, onShapeChanged); - DECLARE_SHAPEASSET_NET_SETGET(VolumetricFog, Shape, FogShapeMask); + DECLARE_ASSET_NET_SETGET(VolumetricFog, Shape, FogShapeMask); protected: // Rendertargets; @@ -163,7 +163,7 @@ class VolumetricFog : public SceneObject // Fog Modulation data DECLARE_IMAGEASSET(VolumetricFog, Texture, onImageChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_NET_SETGET(VolumetricFog, Texture, FogModulationMask); + DECLARE_ASSET_NET_SETGET(VolumetricFog, Texture, FogModulationMask); bool mIsTextured; F32 mTexTiles; @@ -257,4 +257,4 @@ class VolumetricFog : public SceneObject DECLARE_CALLBACK(void, onEnterFog, (SimObjectId obj)); DECLARE_CALLBACK(void, onLeaveFog, (SimObjectId obj)); }; -#endif \ No newline at end of file +#endif diff --git a/Engine/source/environment/basicClouds.cpp b/Engine/source/environment/basicClouds.cpp index defd8fc41..462bf573f 100644 --- a/Engine/source/environment/basicClouds.cpp +++ b/Engine/source/environment/basicClouds.cpp @@ -215,7 +215,7 @@ U32 BasicClouds::packUpdate( NetConnection *conn, U32 mask, BitStream *stream ) { stream->writeFlag( mLayerEnabled[i] ); - PACK_IMAGEASSET_ARRAY(conn, Texture, i); + PACK_ASSET_ARRAY(conn, Texture, i); stream->write( mTexScale[i] ); mathWrite( *stream, mTexDirection[i] ); @@ -236,7 +236,7 @@ void BasicClouds::unpackUpdate( NetConnection *conn, BitStream *stream ) { mLayerEnabled[i] = stream->readFlag(); - UNPACK_IMAGEASSET_ARRAY(conn, Texture, i); + UNPACK_ASSET_ARRAY(conn, Texture, i); stream->read( &mTexScale[i] ); mathRead( *stream, &mTexDirection[i] ); diff --git a/Engine/source/environment/cloudLayer.cpp b/Engine/source/environment/cloudLayer.cpp index 29d2ab502..0bc5b5944 100644 --- a/Engine/source/environment/cloudLayer.cpp +++ b/Engine/source/environment/cloudLayer.cpp @@ -113,7 +113,7 @@ CloudLayer::CloudLayer() mHeight = 4.0f; - INIT_IMAGEASSET(Texture); + INIT_ASSET(Texture); } IMPLEMENT_CO_NETOBJECT_V1( CloudLayer ); @@ -242,7 +242,7 @@ U32 CloudLayer::packUpdate( NetConnection *conn, U32 mask, BitStream *stream ) { U32 retMask = Parent::packUpdate( conn, mask, stream ); - PACK_IMAGEASSET(conn, Texture); + PACK_ASSET(conn, Texture); for ( U32 i = 0; i < TEX_COUNT; i++ ) { @@ -264,7 +264,7 @@ void CloudLayer::unpackUpdate( NetConnection *conn, BitStream *stream ) { Parent::unpackUpdate( conn, stream ); - UNPACK_IMAGEASSET(conn, Texture); + UNPACK_ASSET(conn, Texture); if(mTextureAssetId != StringTable->EmptyString()) mTextureAsset = mTextureAssetId; diff --git a/Engine/source/environment/cloudLayer.h b/Engine/source/environment/cloudLayer.h index 82e152dfb..8f7ffc667 100644 --- a/Engine/source/environment/cloudLayer.h +++ b/Engine/source/environment/cloudLayer.h @@ -97,7 +97,7 @@ protected: static U32 smTriangleCount; DECLARE_IMAGEASSET(CloudLayer, Texture, onImageChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_NET_SETGET(CloudLayer, Texture, CloudLayerMask); + DECLARE_ASSET_NET_SETGET(CloudLayer, Texture, CloudLayerMask); GFXShaderRef mShader; @@ -136,4 +136,4 @@ protected: }; -#endif // _CLOUDLAYER_H_ \ No newline at end of file +#endif // _CLOUDLAYER_H_ diff --git a/Engine/source/environment/decalRoad.cpp b/Engine/source/environment/decalRoad.cpp index 33d137a83..fb226507a 100644 --- a/Engine/source/environment/decalRoad.cpp +++ b/Engine/source/environment/decalRoad.cpp @@ -287,7 +287,7 @@ DecalRoad::DecalRoad() mTypeMask |= StaticObjectType | StaticShapeObjectType; mNetFlags.set(Ghostable); - INIT_MATERIALASSET(Material); + INIT_ASSET(Material); mMaterialInst = nullptr; } @@ -491,7 +491,7 @@ U32 DecalRoad::packUpdate(NetConnection * con, U32 mask, BitStream * stream) if ( stream->writeFlag( mask & DecalRoadMask ) ) { // Write Texture Name. - PACK_MATERIALASSET(con, Material); + PACK_ASSET(con, Material); stream->write( mBreakAngle ); @@ -580,7 +580,7 @@ void DecalRoad::unpackUpdate( NetConnection *con, BitStream *stream ) // DecalRoadMask if ( stream->readFlag() ) { - UNPACK_MATERIALASSET(con, Material); + UNPACK_ASSET(con, Material); if (isProperlyAdded()) _initMaterial(); diff --git a/Engine/source/environment/decalRoad.h b/Engine/source/environment/decalRoad.h index 7934d7889..180b92d08 100644 --- a/Engine/source/environment/decalRoad.h +++ b/Engine/source/environment/decalRoad.h @@ -243,7 +243,7 @@ protected: BaseMatInstance* mMaterialInst; DECLARE_MATERIALASSET(DecalRoad, Material); - DECLARE_MATERIALASSET_NET_SETGET(DecalRoad, Material, DecalRoadMask); + DECLARE_ASSET_NET_SETGET(DecalRoad, Material, DecalRoadMask); U32 mRenderPriority; diff --git a/Engine/source/environment/editors/guiMeshRoadEditorCtrl.cpp b/Engine/source/environment/editors/guiMeshRoadEditorCtrl.cpp index 6433332d7..69963cec5 100644 --- a/Engine/source/environment/editors/guiMeshRoadEditorCtrl.cpp +++ b/Engine/source/environment/editors/guiMeshRoadEditorCtrl.cpp @@ -97,9 +97,9 @@ GuiMeshRoadEditorCtrl::GuiMeshRoadEditorCtrl() mHoverNodeColor( 255,255,255,255 ), mHasCopied( false ) { - INIT_MATERIALASSET(TopMaterial); - INIT_MATERIALASSET(BottomMaterial); - INIT_MATERIALASSET(SideMaterial); + INIT_ASSET(TopMaterial); + INIT_ASSET(BottomMaterial); + INIT_ASSET(SideMaterial); mTopMaterialAssetId = Con::getVariable("$MeshRoadEditor::defaultTopMaterialAsset"); mBottomMaterialAssetId = Con::getVariable("$MeshRoadEditor::defaultBottomMaterialAsset"); diff --git a/Engine/source/environment/editors/guiMeshRoadEditorCtrl.h b/Engine/source/environment/editors/guiMeshRoadEditorCtrl.h index 95cffeab0..497dd14f8 100644 --- a/Engine/source/environment/editors/guiMeshRoadEditorCtrl.h +++ b/Engine/source/environment/editors/guiMeshRoadEditorCtrl.h @@ -160,13 +160,13 @@ class GuiMeshRoadEditorCtrl : public EditTSCtrl public: DECLARE_MATERIALASSET(GuiMeshRoadEditorCtrl, TopMaterial); - DECLARE_MATERIALASSET_SETGET(GuiMeshRoadEditorCtrl, TopMaterial); + DECLARE_ASSET_SETGET(GuiMeshRoadEditorCtrl, TopMaterial); DECLARE_MATERIALASSET(GuiMeshRoadEditorCtrl, BottomMaterial); - DECLARE_MATERIALASSET_SETGET(GuiMeshRoadEditorCtrl, BottomMaterial); + DECLARE_ASSET_SETGET(GuiMeshRoadEditorCtrl, BottomMaterial); DECLARE_MATERIALASSET(GuiMeshRoadEditorCtrl, SideMaterial); - DECLARE_MATERIALASSET_SETGET(GuiMeshRoadEditorCtrl, SideMaterial); + DECLARE_ASSET_SETGET(GuiMeshRoadEditorCtrl, SideMaterial); }; class GuiMeshRoadEditorUndoAction : public UndoAction diff --git a/Engine/source/environment/editors/guiRoadEditorCtrl.h b/Engine/source/environment/editors/guiRoadEditorCtrl.h index 5e076aa68..9d2c5d014 100644 --- a/Engine/source/environment/editors/guiRoadEditorCtrl.h +++ b/Engine/source/environment/editors/guiRoadEditorCtrl.h @@ -104,7 +104,7 @@ class GuiRoadEditorCtrl : public EditTSCtrl public: DECLARE_MATERIALASSET(GuiRoadEditorCtrl, Material); - DECLARE_MATERIALASSET_SETGET(GuiRoadEditorCtrl, Material); + DECLARE_ASSET_SETGET(GuiRoadEditorCtrl, Material); protected: diff --git a/Engine/source/environment/meshRoad.cpp b/Engine/source/environment/meshRoad.cpp index 84cbb2d0f..2413198a8 100644 --- a/Engine/source/environment/meshRoad.cpp +++ b/Engine/source/environment/meshRoad.cpp @@ -920,9 +920,9 @@ MeshRoad::MeshRoad() mTriangleCount[i] = 0; } - INIT_MATERIALASSET(TopMaterial); - INIT_MATERIALASSET(BottomMaterial); - INIT_MATERIALASSET(SideMaterial); + INIT_ASSET(TopMaterial); + INIT_ASSET(BottomMaterial); + INIT_ASSET(SideMaterial); mSideProfile.mRoad = this; } @@ -1416,9 +1416,9 @@ U32 MeshRoad::packUpdate(NetConnection * con, U32 mask, BitStream * stream) stream->writeAffineTransform( mObjToWorld ); // Write Materials - PACK_MATERIALASSET(con, TopMaterial); - PACK_MATERIALASSET(con, BottomMaterial); - PACK_MATERIALASSET(con, SideMaterial); + PACK_ASSET(con, TopMaterial); + PACK_ASSET(con, BottomMaterial); + PACK_ASSET(con, SideMaterial); stream->write( mTextureLength ); stream->write( mBreakAngle ); @@ -1515,9 +1515,9 @@ void MeshRoad::unpackUpdate(NetConnection * con, BitStream * stream) stream->readAffineTransform(&ObjectMatrix); Parent::setTransform(ObjectMatrix); - UNPACK_MATERIALASSET(con, TopMaterial); - UNPACK_MATERIALASSET(con, BottomMaterial); - UNPACK_MATERIALASSET(con, SideMaterial); + UNPACK_ASSET(con, TopMaterial); + UNPACK_ASSET(con, BottomMaterial); + UNPACK_ASSET(con, SideMaterial); if ( isProperlyAdded() ) _initMaterial(); diff --git a/Engine/source/environment/meshRoad.h b/Engine/source/environment/meshRoad.h index 718a015cd..9fe7505b9 100644 --- a/Engine/source/environment/meshRoad.h +++ b/Engine/source/environment/meshRoad.h @@ -622,13 +622,13 @@ protected: GFXPrimitiveBufferHandle mPB[SurfaceCount]; DECLARE_MATERIALASSET(MeshRoad, TopMaterial); - DECLARE_MATERIALASSET_NET_SETGET(MeshRoad, TopMaterial, MeshRoadMask); + DECLARE_ASSET_NET_SETGET(MeshRoad, TopMaterial, MeshRoadMask); DECLARE_MATERIALASSET(MeshRoad, BottomMaterial); - DECLARE_MATERIALASSET_NET_SETGET(MeshRoad, BottomMaterial, MeshRoadMask); + DECLARE_ASSET_NET_SETGET(MeshRoad, BottomMaterial, MeshRoadMask); DECLARE_MATERIALASSET(MeshRoad, SideMaterial); - DECLARE_MATERIALASSET_NET_SETGET(MeshRoad, SideMaterial, MeshRoadMask); + DECLARE_ASSET_NET_SETGET(MeshRoad, SideMaterial, MeshRoadMask); //String mMaterialName[SurfaceCount]; SimObjectPtr mMaterial[SurfaceCount]; diff --git a/Engine/source/environment/scatterSky.cpp b/Engine/source/environment/scatterSky.cpp index cd447e56c..36ab28ecf 100644 --- a/Engine/source/environment/scatterSky.cpp +++ b/Engine/source/environment/scatterSky.cpp @@ -168,7 +168,7 @@ ScatterSky::ScatterSky() mNightCubemapName = StringTable->EmptyString(); mSunSize = 1.0f; - INIT_MATERIALASSET(MoonMat); + INIT_ASSET(MoonMat); mMoonMatInst = NULL; @@ -503,7 +503,7 @@ U32 ScatterSky::packUpdate(NetConnection *con, U32 mask, BitStream *stream) stream->writeFlag( mMoonEnabled ); - PACK_MATERIALASSET(con, MoonMat); + PACK_ASSET(con, MoonMat); stream->write( mMoonScale ); stream->write( mMoonTint ); @@ -617,7 +617,7 @@ void ScatterSky::unpackUpdate(NetConnection *con, BitStream *stream) mMoonEnabled = stream->readFlag(); - UNPACK_MATERIALASSET(con, MoonMat); + UNPACK_ASSET(con, MoonMat); stream->read( &mMoonScale ); stream->read( &mMoonTint ); diff --git a/Engine/source/environment/scatterSky.h b/Engine/source/environment/scatterSky.h index 2657aa6b8..0633e9e23 100644 --- a/Engine/source/environment/scatterSky.h +++ b/Engine/source/environment/scatterSky.h @@ -212,7 +212,7 @@ protected: bool mMoonEnabled; DECLARE_MATERIALASSET(ScatterSky, MoonMat); - DECLARE_MATERIALASSET_NET_SETGET(ScatterSky, MoonMat, UpdateMask); + DECLARE_ASSET_NET_SETGET(ScatterSky, MoonMat, UpdateMask); BaseMatInstance *mMoonMatInst; F32 mMoonScale; diff --git a/Engine/source/environment/skyBox.cpp b/Engine/source/environment/skyBox.cpp index 057de94aa..468ecb8dd 100644 --- a/Engine/source/environment/skyBox.cpp +++ b/Engine/source/environment/skyBox.cpp @@ -56,7 +56,7 @@ SkyBox::SkyBox() mTypeMask |= EnvironmentObjectType | StaticObjectType; mNetFlags.set(Ghostable | ScopeAlways); - INIT_MATERIALASSET(Material); + INIT_ASSET(Material); mMatInstance = NULL; mIsVBDirty = false; @@ -139,7 +139,7 @@ U32 SkyBox::packUpdate( NetConnection *conn, U32 mask, BitStream *stream ) { U32 retMask = Parent::packUpdate( conn, mask, stream ); - PACK_MATERIALASSET(conn, Material); + PACK_ASSET(conn, Material); stream->writeFlag( mDrawBottom ); stream->write( mFogBandHeight ); @@ -152,7 +152,7 @@ void SkyBox::unpackUpdate( NetConnection *conn, BitStream *stream ) Parent::unpackUpdate( conn, stream ); StringTableEntry oldMatName = getMaterial(); - UNPACK_MATERIALASSET(conn, Material); + UNPACK_ASSET(conn, Material); if (oldMatName != getMaterial()) { _updateMaterial(); diff --git a/Engine/source/environment/skyBox.h b/Engine/source/environment/skyBox.h index 38c2b0ac7..7f2ebe494 100644 --- a/Engine/source/environment/skyBox.h +++ b/Engine/source/environment/skyBox.h @@ -102,7 +102,7 @@ protected: // Material DECLARE_MATERIALASSET(SkyBox, Material); - DECLARE_MATERIALASSET_NET_SETGET(SkyBox, Material, -1); + DECLARE_ASSET_NET_SETGET(SkyBox, Material, -1); BaseMatInstance *mMatInstance; SkyMatParams mMatParamHandle; diff --git a/Engine/source/environment/sun.cpp b/Engine/source/environment/sun.cpp index 42062a78b..47cc91070 100644 --- a/Engine/source/environment/sun.cpp +++ b/Engine/source/environment/sun.cpp @@ -90,7 +90,7 @@ Sun::Sun() mCoronaUseLightColor = true; mCoronaMatInst = NULL; - INIT_MATERIALASSET(CoronaMaterial); + INIT_ASSET(CoronaMaterial); mMatrixSet = reinterpret_cast(dMalloc_aligned(sizeof(MatrixSet), 16)); constructInPlace(mMatrixSet); @@ -240,7 +240,7 @@ U32 Sun::packUpdate(NetConnection *conn, U32 mask, BitStream *stream ) stream->writeFlag( mCoronaEnabled ); - PACK_MATERIALASSET(conn, CoronaMaterial); + PACK_ASSET(conn, CoronaMaterial); stream->write( mCoronaScale ); stream->write( mCoronaTint ); @@ -286,7 +286,7 @@ void Sun::unpackUpdate( NetConnection *conn, BitStream *stream ) mCoronaEnabled = stream->readFlag(); - UNPACK_MATERIALASSET(conn, CoronaMaterial); + UNPACK_ASSET(conn, CoronaMaterial); stream->read( &mCoronaScale ); stream->read( &mCoronaTint ); diff --git a/Engine/source/environment/sun.h b/Engine/source/environment/sun.h index 9d11c0ed1..f9d1674f8 100644 --- a/Engine/source/environment/sun.h +++ b/Engine/source/environment/sun.h @@ -79,7 +79,7 @@ protected: bool mCoronaEnabled; DECLARE_MATERIALASSET(Sun, CoronaMaterial); - DECLARE_MATERIALASSET_NET_SETGET(Sun, CoronaMaterial, UpdateMask); + DECLARE_ASSET_NET_SETGET(Sun, CoronaMaterial, UpdateMask); BaseMatInstance *mCoronaMatInst; MatrixSet *mMatrixSet; diff --git a/Engine/source/environment/waterObject.cpp b/Engine/source/environment/waterObject.cpp index dd5ea1a6f..7aba59163 100644 --- a/Engine/source/environment/waterObject.cpp +++ b/Engine/source/environment/waterObject.cpp @@ -260,9 +260,9 @@ WaterObject::WaterObject() mMatrixSet = reinterpret_cast(dMalloc_aligned(sizeof(MatrixSet), 16)); constructInPlace(mMatrixSet); - INIT_IMAGEASSET(RippleTex); - INIT_IMAGEASSET(FoamTex); - INIT_IMAGEASSET(DepthGradientTex); + INIT_ASSET(RippleTex); + INIT_ASSET(FoamTex); + INIT_ASSET(DepthGradientTex); mCubemapName = StringTable->EmptyString(); } @@ -546,9 +546,9 @@ U32 WaterObject::packUpdate( NetConnection * conn, U32 mask, BitStream *stream ) if ( stream->writeFlag( mask & TextureMask ) ) { - PACK_IMAGEASSET(conn, RippleTex); - PACK_IMAGEASSET(conn, DepthGradientTex); - PACK_IMAGEASSET(conn, FoamTex); + PACK_ASSET(conn, RippleTex); + PACK_ASSET(conn, DepthGradientTex); + PACK_ASSET(conn, FoamTex); stream->writeString( mCubemapName ); } @@ -668,9 +668,9 @@ void WaterObject::unpackUpdate( NetConnection * conn, BitStream *stream ) // TextureMask if ( stream->readFlag() ) { - UNPACK_IMAGEASSET(conn, RippleTex); - UNPACK_IMAGEASSET(conn, DepthGradientTex); - UNPACK_IMAGEASSET(conn, FoamTex); + UNPACK_ASSET(conn, RippleTex); + UNPACK_ASSET(conn, DepthGradientTex); + UNPACK_ASSET(conn, FoamTex); mCubemapName = stream->readSTString(); diff --git a/Engine/source/environment/waterObject.h b/Engine/source/environment/waterObject.h index 3c72ba21e..17d5d8428 100644 --- a/Engine/source/environment/waterObject.h +++ b/Engine/source/environment/waterObject.h @@ -273,11 +273,11 @@ protected: // Other textures DECLARE_IMAGEASSET(WaterObject, RippleTex, onRippleTexChanged, GFXStaticTextureProfile); - DECLARE_IMAGEASSET_NET_SETGET(WaterObject, RippleTex, TextureMask); + DECLARE_ASSET_NET_SETGET(WaterObject, RippleTex, TextureMask); DECLARE_IMAGEASSET(WaterObject, FoamTex, onFoamTexChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_NET_SETGET(WaterObject, FoamTex, TextureMask); + DECLARE_ASSET_NET_SETGET(WaterObject, FoamTex, TextureMask); DECLARE_IMAGEASSET(WaterObject, DepthGradientTex, onDepthGradientTexChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_NET_SETGET(WaterObject, DepthGradientTex, TextureMask); + DECLARE_ASSET_NET_SETGET(WaterObject, DepthGradientTex, TextureMask); StringTableEntry mCubemapName; diff --git a/Engine/source/forest/forestItem.cpp b/Engine/source/forest/forestItem.cpp index 36ac0dfe3..e9cdbc7c0 100644 --- a/Engine/source/forest/forestItem.cpp +++ b/Engine/source/forest/forestItem.cpp @@ -53,7 +53,7 @@ ForestItemData::ForestItemData() mTightnessCoefficient( 0.4f ), mDampingCoefficient( 0.7f ) { - INIT_SHAPEASSET(Shape); + INIT_ASSET(Shape); } void ForestItemData::initPersistFields() @@ -164,7 +164,7 @@ void ForestItemData::packData(BitStream* stream) stream->write( localName ); - PACKDATA_SHAPEASSET(Shape); + PACKDATA_ASSET(Shape); stream->writeFlag( mCollidable ); @@ -190,7 +190,7 @@ void ForestItemData::unpackData(BitStream* stream) stream->read( &localName ); setInternalName( localName ); - UNPACKDATA_SHAPEASSET(Shape); + UNPACKDATA_ASSET(Shape); mCollidable = stream->readFlag(); diff --git a/Engine/source/forest/forestItem.h b/Engine/source/forest/forestItem.h index 0c7eb0697..2ffb9f9ab 100644 --- a/Engine/source/forest/forestItem.h +++ b/Engine/source/forest/forestItem.h @@ -63,7 +63,7 @@ protected: public: DECLARE_SHAPEASSET(ForestItemData, Shape, onShapeChanged); - DECLARE_SHAPEASSET_SETGET(ForestItemData, Shape); + DECLARE_ASSET_SETGET(ForestItemData, Shape); /// This is the radius used during placement to ensure /// the element isn't crowded up against other trees. diff --git a/Engine/source/gfx/sim/cubemapData.cpp b/Engine/source/gfx/sim/cubemapData.cpp index bf9390dfe..3fbaf4afb 100644 --- a/Engine/source/gfx/sim/cubemapData.cpp +++ b/Engine/source/gfx/sim/cubemapData.cpp @@ -44,10 +44,10 @@ CubemapData::CubemapData() for (U32 i = 0; i < 6; i++) { - INIT_IMAGEASSET_ARRAY(CubeMapFace, i); + INIT_ASSET_ARRAY(CubeMapFace, i); } - INIT_IMAGEASSET(CubeMap); + INIT_ASSET(CubeMap); } CubemapData::~CubemapData() diff --git a/Engine/source/gfx/sim/cubemapData.h b/Engine/source/gfx/sim/cubemapData.h index 7ec2e0fb5..c33cf7021 100644 --- a/Engine/source/gfx/sim/cubemapData.h +++ b/Engine/source/gfx/sim/cubemapData.h @@ -74,7 +74,7 @@ public: protected: DECLARE_IMAGEASSET(CubemapData, CubeMap, onCubemapChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_SETGET(CubemapData, CubeMap); + DECLARE_ASSET_SETGET(CubemapData, CubeMap); DECLARE_IMAGEASSET_ARRAY(CubemapData, CubeMapFace, GFXStaticTextureSRGBProfile, 6); DECLARE_IMAGEASSET_ARRAY_SETGET(CubemapData, CubeMapFace); diff --git a/Engine/source/gui/buttons/guiBitmapButtonCtrl.cpp b/Engine/source/gui/buttons/guiBitmapButtonCtrl.cpp index 91088b2a4..23c451fab 100644 --- a/Engine/source/gui/buttons/guiBitmapButtonCtrl.cpp +++ b/Engine/source/gui/buttons/guiBitmapButtonCtrl.cpp @@ -129,7 +129,7 @@ GuiBitmapButtonCtrl::GuiBitmapButtonCtrl() setExtent( 140, 30 ); mMasked = false; - INIT_IMAGEASSET(Bitmap); + INIT_ASSET(Bitmap); } //----------------------------------------------------------------------------- @@ -668,4 +668,4 @@ bool GuiBitmapButtonCtrl::pointInControl(const Point2I& parentCoordPoint) return Parent::pointInControl(parentCoordPoint); } -DEF_IMAGEASSET_BINDS(GuiBitmapButtonCtrl, Bitmap); +DEF_ASSET_BINDS(GuiBitmapButtonCtrl, Bitmap); diff --git a/Engine/source/gui/buttons/guiBitmapButtonCtrl.h b/Engine/source/gui/buttons/guiBitmapButtonCtrl.h index 59e7825f1..1791c563a 100644 --- a/Engine/source/gui/buttons/guiBitmapButtonCtrl.h +++ b/Engine/source/gui/buttons/guiBitmapButtonCtrl.h @@ -119,7 +119,7 @@ class GuiBitmapButtonCtrl : public GuiButtonCtrl BitmapMode mBitmapMode; DECLARE_IMAGEASSET(GuiBitmapButtonCtrl, Bitmap, onBitmapChange, GFXDefaultGUIProfile); - DECLARE_IMAGEASSET_SETGET(GuiBitmapButtonCtrl, Bitmap); + DECLARE_ASSET_SETGET(GuiBitmapButtonCtrl, Bitmap); /// alpha masking bool mMasked; diff --git a/Engine/source/gui/buttons/guiIconButtonCtrl.cpp b/Engine/source/gui/buttons/guiIconButtonCtrl.cpp index c0fb939ff..093c79cb7 100644 --- a/Engine/source/gui/buttons/guiIconButtonCtrl.cpp +++ b/Engine/source/gui/buttons/guiIconButtonCtrl.cpp @@ -85,7 +85,7 @@ ConsoleDocClass( GuiIconButtonCtrl, GuiIconButtonCtrl::GuiIconButtonCtrl() { - INIT_IMAGEASSET(Bitmap); + INIT_ASSET(Bitmap); mTextLocation = TextLocLeft; mIconLocation = IconLocLeft; mTextMargin = 4; @@ -412,4 +412,4 @@ void GuiIconButtonCtrl::renderBitmapArray(RectI &bounds, S32 state) } } -DEF_IMAGEASSET_BINDS(GuiIconButtonCtrl, Bitmap); +DEF_ASSET_BINDS(GuiIconButtonCtrl, Bitmap); diff --git a/Engine/source/gui/buttons/guiIconButtonCtrl.h b/Engine/source/gui/buttons/guiIconButtonCtrl.h index d2cf0b9bd..8196fef49 100644 --- a/Engine/source/gui/buttons/guiIconButtonCtrl.h +++ b/Engine/source/gui/buttons/guiIconButtonCtrl.h @@ -43,7 +43,7 @@ private: protected: DECLARE_IMAGEASSET(GuiIconButtonCtrl, Bitmap, onImageChanged, GFXTexturePersistentSRGBProfile); - DECLARE_IMAGEASSET_SETGET(GuiIconButtonCtrl, Bitmap); + DECLARE_ASSET_SETGET(GuiIconButtonCtrl, Bitmap); S32 mIconLocation; S32 mTextLocation; diff --git a/Engine/source/gui/buttons/guiToolboxButtonCtrl.cpp b/Engine/source/gui/buttons/guiToolboxButtonCtrl.cpp index 3f1b26f0c..f75a93d83 100644 --- a/Engine/source/gui/buttons/guiToolboxButtonCtrl.cpp +++ b/Engine/source/gui/buttons/guiToolboxButtonCtrl.cpp @@ -43,9 +43,9 @@ ConsoleDocClass( GuiToolboxButtonCtrl, //------------------------------------- GuiToolboxButtonCtrl::GuiToolboxButtonCtrl() { - INIT_IMAGEASSET(NormalBitmap); - INIT_IMAGEASSET(LoweredBitmap); - INIT_IMAGEASSET(HoverBitmap); + INIT_ASSET(NormalBitmap); + INIT_ASSET(LoweredBitmap); + INIT_ASSET(HoverBitmap); setMinExtent(Point2I(16,16)); setExtent(48, 48); @@ -193,6 +193,6 @@ void GuiToolboxButtonCtrl::renderButton(GFXTexHandle &texture, Point2I &offset, } } -DEF_IMAGEASSET_BINDS(GuiToolboxButtonCtrl, NormalBitmap); -DEF_IMAGEASSET_BINDS(GuiToolboxButtonCtrl, LoweredBitmap); -DEF_IMAGEASSET_BINDS(GuiToolboxButtonCtrl, HoverBitmap); +DEF_ASSET_BINDS(GuiToolboxButtonCtrl, NormalBitmap); +DEF_ASSET_BINDS(GuiToolboxButtonCtrl, LoweredBitmap); +DEF_ASSET_BINDS(GuiToolboxButtonCtrl, HoverBitmap); diff --git a/Engine/source/gui/buttons/guiToolboxButtonCtrl.h b/Engine/source/gui/buttons/guiToolboxButtonCtrl.h index ec2b56711..8741cdee9 100644 --- a/Engine/source/gui/buttons/guiToolboxButtonCtrl.h +++ b/Engine/source/gui/buttons/guiToolboxButtonCtrl.h @@ -40,11 +40,11 @@ private: protected: DECLARE_IMAGEASSET(GuiToolboxButtonCtrl, NormalBitmap, onNormalImageChanged, GFXTexturePersistentSRGBProfile); - DECLARE_IMAGEASSET_SETGET(GuiToolboxButtonCtrl, NormalBitmap); + DECLARE_ASSET_SETGET(GuiToolboxButtonCtrl, NormalBitmap); DECLARE_IMAGEASSET(GuiToolboxButtonCtrl, LoweredBitmap, onLoweredImageChanged, GFXTexturePersistentSRGBProfile); - DECLARE_IMAGEASSET_SETGET(GuiToolboxButtonCtrl, LoweredBitmap); + DECLARE_ASSET_SETGET(GuiToolboxButtonCtrl, LoweredBitmap); DECLARE_IMAGEASSET(GuiToolboxButtonCtrl, HoverBitmap, onHoverImageChanged, GFXTexturePersistentSRGBProfile); - DECLARE_IMAGEASSET_SETGET(GuiToolboxButtonCtrl, HoverBitmap); + DECLARE_ASSET_SETGET(GuiToolboxButtonCtrl, HoverBitmap); void renderButton(GFXTexHandle &texture, Point2I &offset, const RectI& updateRect); void renderStateRect( GFXTexHandle &texture, const RectI& rect ); diff --git a/Engine/source/gui/controls/guiBitmapCtrl.cpp b/Engine/source/gui/controls/guiBitmapCtrl.cpp index 1b158d435..89e8ecbb3 100644 --- a/Engine/source/gui/controls/guiBitmapCtrl.cpp +++ b/Engine/source/gui/controls/guiBitmapCtrl.cpp @@ -60,7 +60,7 @@ GuiBitmapCtrl::GuiBitmapCtrl(void) mColor(ColorI::WHITE), mWrap( false ) { - INIT_IMAGEASSET(Bitmap); + INIT_ASSET(Bitmap); } bool GuiBitmapCtrl::setBitmapName( void *object, const char *index, const char *data ) diff --git a/Engine/source/gui/controls/guiBitmapCtrl.h b/Engine/source/gui/controls/guiBitmapCtrl.h index 05f4ca047..c5e2130dd 100644 --- a/Engine/source/gui/controls/guiBitmapCtrl.h +++ b/Engine/source/gui/controls/guiBitmapCtrl.h @@ -40,7 +40,7 @@ class GuiBitmapCtrl : public GuiControl /// Name of the bitmap file. If this is 'texhandle' the bitmap is not loaded /// from a file but rather set explicitly on the control. DECLARE_IMAGEASSET(GuiBitmapCtrl, Bitmap, onImageChanged, GFXDefaultGUIProfile); - DECLARE_IMAGEASSET_SETGET(GuiBitmapCtrl, Bitmap); + DECLARE_ASSET_SETGET(GuiBitmapCtrl, Bitmap); Point2I mStartPoint; ColorI mColor; diff --git a/Engine/source/gui/controls/guiMaterialCtrl.cpp b/Engine/source/gui/controls/guiMaterialCtrl.cpp index 34c0243a9..6d177767f 100644 --- a/Engine/source/gui/controls/guiMaterialCtrl.cpp +++ b/Engine/source/gui/controls/guiMaterialCtrl.cpp @@ -45,7 +45,7 @@ ConsoleDocClass( GuiMaterialCtrl, GuiMaterialCtrl::GuiMaterialCtrl() : mMaterialInst( NULL ) { - INIT_MATERIALASSET(Material); + INIT_ASSET(Material); } void GuiMaterialCtrl::initPersistFields() diff --git a/Engine/source/gui/controls/guiMaterialCtrl.h b/Engine/source/gui/controls/guiMaterialCtrl.h index bafbdf0eb..ff0b44efa 100644 --- a/Engine/source/gui/controls/guiMaterialCtrl.h +++ b/Engine/source/gui/controls/guiMaterialCtrl.h @@ -41,7 +41,7 @@ private: protected: DECLARE_MATERIALASSET(GuiMaterialCtrl, Material); - DECLARE_MATERIALASSET_SETGET(GuiMaterialCtrl, Material); + DECLARE_ASSET_SETGET(GuiMaterialCtrl, Material); BaseMatInstance *mMaterialInst; diff --git a/Engine/source/gui/controls/guiPopUpCtrl.cpp b/Engine/source/gui/controls/guiPopUpCtrl.cpp index d66f50e92..8e9eb5c24 100644 --- a/Engine/source/gui/controls/guiPopUpCtrl.cpp +++ b/Engine/source/gui/controls/guiPopUpCtrl.cpp @@ -278,8 +278,8 @@ GuiPopUpMenuCtrl::GuiPopUpMenuCtrl(void) mBackgroundCancel = false; // Added mReverseTextList = false; // Added - Don't reverse text list if displaying up - INIT_IMAGEASSET_ARRAY(Bitmap, 0); - INIT_IMAGEASSET_ARRAY(Bitmap, 1); + INIT_ASSET_ARRAY(Bitmap, 0); + INIT_ASSET_ARRAY(Bitmap, 1); mBitmapBounds.set(16, 16); // Added mIdMax = -1; diff --git a/Engine/source/gui/controls/guiPopUpCtrlEx.cpp b/Engine/source/gui/controls/guiPopUpCtrlEx.cpp index b66e0d209..0a10d870c 100644 --- a/Engine/source/gui/controls/guiPopUpCtrlEx.cpp +++ b/Engine/source/gui/controls/guiPopUpCtrlEx.cpp @@ -329,8 +329,8 @@ GuiPopUpMenuCtrlEx::GuiPopUpMenuCtrlEx(void) mBackgroundCancel = false; // Added mReverseTextList = false; // Added - Don't reverse text list if displaying up - INIT_IMAGEASSET_ARRAY(Bitmap, Normal); - INIT_IMAGEASSET_ARRAY(Bitmap, Depressed); + INIT_ASSET_ARRAY(Bitmap, Normal); + INIT_ASSET_ARRAY(Bitmap, Depressed); mBitmapBounds.set(16, 16); // Added mHotTrackItems = false; diff --git a/Engine/source/gui/core/guiControl.cpp b/Engine/source/gui/core/guiControl.cpp index 2011aa68b..d312c7610 100644 --- a/Engine/source/gui/core/guiControl.cpp +++ b/Engine/source/gui/core/guiControl.cpp @@ -2898,7 +2898,7 @@ static ConsoleDocFragment _sGuiControlSetExtent2( "GuiControl", // The class to place the method in; use NULL for functions. "void setExtent( Point2I p );" ); // The definition string. -DefineEngineMethod( GuiControl, setExtent, void, ( const char* extOrX, const char* y ), (""), +DefineEngineMethod( GuiControl, setExtent, void, ( const char* extOrX, const char* y ), ("", nullAsType()), "( Point2I p | int x, int y ) Set the width and height of the control.\n\n" "@hide" ) { diff --git a/Engine/source/gui/core/guiTypes.cpp b/Engine/source/gui/core/guiTypes.cpp index 59fc8b854..d4575d21a 100644 --- a/Engine/source/gui/core/guiTypes.cpp +++ b/Engine/source/gui/core/guiTypes.cpp @@ -79,7 +79,7 @@ GuiCursor::GuiCursor() mRenderOffset.set(0.0f,0.0f); mExtent.set(1,1); - INIT_IMAGEASSET(Bitmap); + INIT_ASSET(Bitmap); } GuiCursor::~GuiCursor() @@ -324,7 +324,7 @@ GuiControlProfile::GuiControlProfile(void) : mMouseOverSelected = false; // bitmap members - INIT_IMAGEASSET(Bitmap); + INIT_ASSET(Bitmap); mUseBitmapArray = false; mChildrenProfileName = NULL; diff --git a/Engine/source/gui/core/guiTypes.h b/Engine/source/gui/core/guiTypes.h index 23fa13246..c82c2fd50 100644 --- a/Engine/source/gui/core/guiTypes.h +++ b/Engine/source/gui/core/guiTypes.h @@ -345,7 +345,7 @@ private: typedef SimObject Parent; DECLARE_IMAGEASSET(GuiCursor, Bitmap, onImageChanged, GFXGuiCursorProfile); - DECLARE_IMAGEASSET_SETGET(GuiCursor, Bitmap); + DECLARE_ASSET_SETGET(GuiCursor, Bitmap); Point2I mHotSpot; Point2F mRenderOffset; @@ -555,7 +555,7 @@ public: { return mBitmap; } - DECLARE_IMAGEASSET_SETGET(GuiControlProfile, Bitmap); + DECLARE_ASSET_SETGET(GuiControlProfile, Bitmap); void onBitmapChanged() {} diff --git a/Engine/source/gui/game/guiChunkedBitmapCtrl.cpp b/Engine/source/gui/game/guiChunkedBitmapCtrl.cpp index 138488f05..90e940e07 100644 --- a/Engine/source/gui/game/guiChunkedBitmapCtrl.cpp +++ b/Engine/source/gui/game/guiChunkedBitmapCtrl.cpp @@ -87,7 +87,7 @@ DefineEngineMethod( GuiChunkedBitmapCtrl, setBitmap, void, (const char* filename GuiChunkedBitmapCtrl::GuiChunkedBitmapCtrl() { - INIT_IMAGEASSET(Bitmap); + INIT_ASSET(Bitmap); mUseVariable = false; mTile = false; diff --git a/Engine/source/gui/game/guiChunkedBitmapCtrl.h b/Engine/source/gui/game/guiChunkedBitmapCtrl.h index 037eb91f6..f5d3405b8 100644 --- a/Engine/source/gui/game/guiChunkedBitmapCtrl.h +++ b/Engine/source/gui/game/guiChunkedBitmapCtrl.h @@ -18,7 +18,7 @@ private: protected: DECLARE_IMAGEASSET(GuiChunkedBitmapCtrl, Bitmap, onImageChanged, GFXDefaultGUIProfile); - DECLARE_IMAGEASSET_SETGET(GuiChunkedBitmapCtrl, Bitmap); + DECLARE_ASSET_SETGET(GuiChunkedBitmapCtrl, Bitmap); bool mUseVariable; bool mTile; diff --git a/Engine/source/gui/game/guiProgressBitmapCtrl.cpp b/Engine/source/gui/game/guiProgressBitmapCtrl.cpp index 0d0baa483..0faf2a8e0 100644 --- a/Engine/source/gui/game/guiProgressBitmapCtrl.cpp +++ b/Engine/source/gui/game/guiProgressBitmapCtrl.cpp @@ -124,7 +124,7 @@ GuiProgressBitmapCtrl::GuiProgressBitmapCtrl() mNumberOfBitmaps(0), mDim(0) { - INIT_IMAGEASSET(Bitmap); + INIT_ASSET(Bitmap); } //----------------------------------------------------------------------------- diff --git a/Engine/source/gui/game/guiProgressBitmapCtrl.h b/Engine/source/gui/game/guiProgressBitmapCtrl.h index e391f7b72..fba8aaa3c 100644 --- a/Engine/source/gui/game/guiProgressBitmapCtrl.h +++ b/Engine/source/gui/game/guiProgressBitmapCtrl.h @@ -48,7 +48,7 @@ class GuiProgressBitmapCtrl : public GuiTextCtrl F32 mProgress; DECLARE_IMAGEASSET(GuiProgressBitmapCtrl, Bitmap, onImageChanged, GFXDefaultGUIProfile); - DECLARE_IMAGEASSET_SETGET(GuiProgressBitmapCtrl, Bitmap); + DECLARE_ASSET_SETGET(GuiProgressBitmapCtrl, Bitmap); bool mUseVariable; bool mTile; diff --git a/Engine/source/gui/worldEditor/guiMissionArea.cpp b/Engine/source/gui/worldEditor/guiMissionArea.cpp index cd9c82ac9..a17b5a4ab 100644 --- a/Engine/source/gui/worldEditor/guiMissionArea.cpp +++ b/Engine/source/gui/worldEditor/guiMissionArea.cpp @@ -59,7 +59,7 @@ ConsoleDocClass( GuiMissionAreaCtrl, GuiMissionAreaCtrl::GuiMissionAreaCtrl() { - INIT_IMAGEASSET(HandleBitmap); + INIT_ASSET(HandleBitmap); mHandleTextureSize = Point2I::Zero; mHandleTextureHalfSize = Point2F::Zero; diff --git a/Engine/source/gui/worldEditor/guiMissionArea.h b/Engine/source/gui/worldEditor/guiMissionArea.h index 9c3dec0a5..32d68ecc7 100644 --- a/Engine/source/gui/worldEditor/guiMissionArea.h +++ b/Engine/source/gui/worldEditor/guiMissionArea.h @@ -64,7 +64,7 @@ protected: GFXStateBlockRef mSolidStateBlock; DECLARE_IMAGEASSET(GuiMissionAreaCtrl, HandleBitmap, onHandleBitmapChanged, GFXTexturePersistentSRGBProfile); - DECLARE_IMAGEASSET_SETGET(GuiMissionAreaCtrl, HandleBitmap); + DECLARE_ASSET_SETGET(GuiMissionAreaCtrl, HandleBitmap); Point2I mHandleTextureSize; Point2F mHandleTextureHalfSize; diff --git a/Engine/source/gui/worldEditor/worldEditor.h b/Engine/source/gui/worldEditor/worldEditor.h index dd596af74..a94fe068d 100644 --- a/Engine/source/gui/worldEditor/worldEditor.h +++ b/Engine/source/gui/worldEditor/worldEditor.h @@ -329,11 +329,11 @@ class WorldEditor : public EditTSCtrl ColorI mPopupTextColor; DECLARE_IMAGEASSET(WorldEditor, SelectHandle, onSelectHandleChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_SETGET(WorldEditor, SelectHandle); + DECLARE_ASSET_SETGET(WorldEditor, SelectHandle); DECLARE_IMAGEASSET(WorldEditor, DefaultHandle, onDefaultHandleChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_SETGET(WorldEditor, DefaultHandle); + DECLARE_ASSET_SETGET(WorldEditor, DefaultHandle); DECLARE_IMAGEASSET(WorldEditor, LockedHandle, onLockedHandleChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_SETGET(WorldEditor, LockedHandle); + DECLARE_ASSET_SETGET(WorldEditor, LockedHandle); ColorI mObjectTextColor; bool mObjectsUseBoxCenter; diff --git a/Engine/source/materials/materialDefinition.cpp b/Engine/source/materials/materialDefinition.cpp index 3c3cb5898..07a769ee7 100644 --- a/Engine/source/materials/materialDefinition.cpp +++ b/Engine/source/materials/materialDefinition.cpp @@ -142,18 +142,18 @@ Material::Material() mAccuCoverage[i] = 0.9f; mAccuSpecular[i] = 16.0f; - INIT_IMAGEASSET_ARRAY(DiffuseMap, i); - INIT_IMAGEASSET_ARRAY(OverlayMap, i); - INIT_IMAGEASSET_ARRAY(LightMap, i); - INIT_IMAGEASSET_ARRAY(ToneMap, i); - INIT_IMAGEASSET_ARRAY(DetailMap, i); - INIT_IMAGEASSET_ARRAY(NormalMap, i); - INIT_IMAGEASSET_ARRAY(ORMConfigMap, i); - INIT_IMAGEASSET_ARRAY(RoughMap, i); - INIT_IMAGEASSET_ARRAY(AOMap, i); - INIT_IMAGEASSET_ARRAY(MetalMap, i); - INIT_IMAGEASSET_ARRAY(GlowMap, i); - INIT_IMAGEASSET_ARRAY(DetailNormalMap, i); + INIT_ASSET_ARRAY(DiffuseMap, i); + INIT_ASSET_ARRAY(OverlayMap, i); + INIT_ASSET_ARRAY(LightMap, i); + INIT_ASSET_ARRAY(ToneMap, i); + INIT_ASSET_ARRAY(DetailMap, i); + INIT_ASSET_ARRAY(NormalMap, i); + INIT_ASSET_ARRAY(ORMConfigMap, i); + INIT_ASSET_ARRAY(RoughMap, i); + INIT_ASSET_ARRAY(AOMap, i); + INIT_ASSET_ARRAY(MetalMap, i); + INIT_ASSET_ARRAY(GlowMap, i); + INIT_ASSET_ARRAY(DetailNormalMap, i); mParallaxScale[i] = 0.0f; diff --git a/Engine/source/postFx/postEffect.cpp b/Engine/source/postFx/postEffect.cpp index a9587c4aa..2f87ffa67 100644 --- a/Engine/source/postFx/postEffect.cpp +++ b/Engine/source/postFx/postEffect.cpp @@ -508,7 +508,7 @@ PostEffect::PostEffect() for (U32 i = 0; i < NumTextures; i++) { - INIT_IMAGEASSET_ARRAY(Texture, i); + INIT_ASSET_ARRAY(Texture, i); } } diff --git a/Engine/source/terrain/terrMaterial.cpp b/Engine/source/terrain/terrMaterial.cpp index 06b3b27bd..8a7683078 100644 --- a/Engine/source/terrain/terrMaterial.cpp +++ b/Engine/source/terrain/terrMaterial.cpp @@ -73,11 +73,11 @@ TerrainMaterial::TerrainMaterial() mIsSRGB(false), mInvertRoughness(false) { - INIT_IMAGEASSET(DiffuseMap); - INIT_IMAGEASSET(NormalMap); - INIT_IMAGEASSET(DetailMap); - INIT_IMAGEASSET(ORMConfigMap); - INIT_IMAGEASSET(MacroMap); + INIT_ASSET(DiffuseMap); + INIT_ASSET(NormalMap); + INIT_ASSET(DetailMap); + INIT_ASSET(ORMConfigMap); + INIT_ASSET(MacroMap); } TerrainMaterial::~TerrainMaterial() @@ -203,8 +203,8 @@ TerrainMaterial* TerrainMaterial::findOrCreate( const char *nameOrPath ) //material.getDiffuseMap(); //returns the raw file referenced //material.getDiffuseMapAsset(); //returns the asset id //material.setDiffuseMap(%texture); //tries to set the asset and failing that attempts a flat file reference -DEF_IMAGEASSET_BINDS(TerrainMaterial, DiffuseMap); -DEF_IMAGEASSET_BINDS(TerrainMaterial, NormalMap); -DEF_IMAGEASSET_BINDS(TerrainMaterial, DetailMap); -DEF_IMAGEASSET_BINDS(TerrainMaterial, ORMConfigMap); -DEF_IMAGEASSET_BINDS(TerrainMaterial, MacroMap); +DEF_ASSET_BINDS(TerrainMaterial, DiffuseMap); +DEF_ASSET_BINDS(TerrainMaterial, NormalMap); +DEF_ASSET_BINDS(TerrainMaterial, DetailMap); +DEF_ASSET_BINDS(TerrainMaterial, ORMConfigMap); +DEF_ASSET_BINDS(TerrainMaterial, MacroMap); diff --git a/Engine/source/terrain/terrMaterial.h b/Engine/source/terrain/terrMaterial.h index daf111321..4e129ef73 100644 --- a/Engine/source/terrain/terrMaterial.h +++ b/Engine/source/terrain/terrMaterial.h @@ -43,7 +43,7 @@ protected: //AssetPtr mDiffuseAsset; DECLARE_IMAGEASSET(TerrainMaterial, DiffuseMap, onDiffuseMapChanged, GFXStaticTextureSRGBProfile); - DECLARE_IMAGEASSET_SETGET(TerrainMaterial, DiffuseMap); + DECLARE_ASSET_SETGET(TerrainMaterial, DiffuseMap); /// The size of the diffuse base map in meters /// used to generate its texture coordinates. @@ -51,11 +51,11 @@ protected: /// DECLARE_IMAGEASSET(TerrainMaterial, NormalMap, onNormalMapChanged, GFXNormalMapProfile); - DECLARE_IMAGEASSET_SETGET(TerrainMaterial, NormalMap); + DECLARE_ASSET_SETGET(TerrainMaterial, NormalMap); /// DECLARE_IMAGEASSET(TerrainMaterial, DetailMap, onDetailMapChanged, GFXStaticTextureProfile); - DECLARE_IMAGEASSET_SETGET(TerrainMaterial, DetailMap); + DECLARE_ASSET_SETGET(TerrainMaterial, DetailMap); /// The size of the detail map in meters used /// to generate the texture coordinates for the @@ -70,7 +70,7 @@ protected: /// DECLARE_IMAGEASSET(TerrainMaterial, ORMConfigMap, onORMConfigMapChanged, GFXStaticTextureProfile); - DECLARE_IMAGEASSET_SETGET(TerrainMaterial, ORMConfigMap); + DECLARE_ASSET_SETGET(TerrainMaterial, ORMConfigMap); bool mIsSRGB; bool mInvertRoughness; @@ -82,7 +82,7 @@ protected: bool mSideProjection; DECLARE_IMAGEASSET(TerrainMaterial, MacroMap, onMacroMapChanged, GFXStaticTextureProfile); - DECLARE_IMAGEASSET_SETGET(TerrainMaterial, MacroMap); + DECLARE_ASSET_SETGET(TerrainMaterial, MacroMap); F32 mMacroSize; F32 mMacroStrength; F32 mMacroDistance; diff --git a/Templates/BaseGame/game/tools/projectImporter/scripts/pre40/T3Dpre4ProjectImporter.tscript b/Templates/BaseGame/game/tools/projectImporter/scripts/pre40/T3Dpre4ProjectImporter.tscript index 645bd38ca..119ba6066 100644 --- a/Templates/BaseGame/game/tools/projectImporter/scripts/pre40/T3Dpre4ProjectImporter.tscript +++ b/Templates/BaseGame/game/tools/projectImporter/scripts/pre40/T3Dpre4ProjectImporter.tscript @@ -839,12 +839,13 @@ T3Dpre4ProjectImporter::genProcessor("LevelInfo", "accuTexture accuTextureAsset" T3Dpre4ProjectImporter::genProcessor("TSStatic", "shape shapeAsset shapeName shapeAsset"); T3Dpre4ProjectImporter::genProcessor("TSForestItemData", "shape shapeAsset shapeName shapeAsset shapeFile shapeAsset"); T3Dpre4ProjectImporter::genProcessor("TerrainBlock", "terrainFile terrainAsset"); -T3Dpre4ProjectImporter::genProcessor("afxMagicMissileData", "projectileShapeName projectileShapeAsset"); +T3Dpre4ProjectImporter::genProcessor("afxMagicMissileData", "projectileShapeName projectileShapeAsset sound soundAsset"); T3Dpre4ProjectImporter::genProcessor("afxBillboardData", "texture textureAsset"); T3Dpre4ProjectImporter::genProcessor("afxModelData", "shapeName shapeAsset shapeFile shapeAsset"); T3Dpre4ProjectImporter::genProcessor("afxZodiacData", "texture textureAsset"); T3Dpre4ProjectImporter::genProcessor("afxZodiacPlaneData", "texture textureAsset"); T3Dpre4ProjectImporter::genProcessor("sfxEmitter", "track soundAsset filename soundAsset"); +T3Dpre4ProjectImporter::genProcessor("LightningData", "thunderSounds ThunderSoundAsset strikeSound StrikeSoundAsset"); //============================================================================== // Levels //============================================================================== @@ -920,15 +921,42 @@ T3Dpre4ProjectImporter::genProcessor("DecalData", "material materialAsset"); T3Dpre4ProjectImporter::genProcessor("ExplosionData", "explosionShape explosionShapeAsset"); T3Dpre4ProjectImporter::genProcessor("ParticleData", "texture textureAsset textureName textureAsset textureExt textureExtAsset textureExtName textureExtAsset"); T3Dpre4ProjectImporter::genProcessor("PrecipitationData", "drop dropAsset dropTexture dropAsset splash splashAsset splashTexture splashAsset soundProfile soundAsset"); -T3Dpre4ProjectImporter::genProcessor("SplashData", "texture textureAsset"); +T3Dpre4ProjectImporter::genProcessor("SplashData", "texture textureAsset soundProfile SoundAsset"); T3Dpre4ProjectImporter::genProcessor("LightFlareData", "flareTexture flareTextureAsset"); T3Dpre4ProjectImporter::genProcessor("PhysicsDebrisData", "shape shapeAsset shapeFile shapeAsset"); T3Dpre4ProjectImporter::genProcessor("PhysicsShapeData", "shape shapeAsset shapeName shapeAsset"); -T3Dpre4ProjectImporter::genProcessor("PlayerData", "shapeFP shapeFPAsset shapeNameFP shapeFPAsset"); -T3Dpre4ProjectImporter::genProcessor("ProjectileData", "projectileShape projectileShapeAsset projectileShapeName projectileShapeAsset"); +T3Dpre4ProjectImporter::genProcessor("ProjectileData", "projectileShape projectileShapeAsset projectileShapeName projectileShapeAsset sound soundAsset"); T3Dpre4ProjectImporter::genProcessor("ShapeBaseData", "shapeFile shapeAsset shape shapeAsset debrisShape debrisShapeAsset debrisShapeName debrisShapeAsset"); -T3Dpre4ProjectImporter::genProcessor("ShapeBaseImageData", "shape shapeAsset[0] shapeFP shapeAsset[1] shapeFile shapeAsset[0] shapeFileFP shapeAsset[1]"); +T3Dpre4ProjectImporter::genProcessor("ShapeBaseImageData", "shape shapeAsset[0] shapeFP shapeAsset[1] shapeFile shapeAsset[0] shapeFileFP shapeAsset[1] stateSound stateSoundAsset"); +T3Dpre4ProjectImporter::genProcessor("ProximityMineData","armingSound ArmSoundAsset TriggerSound TriggerSoundAsset"); T3Dpre4ProjectImporter::genProcessor("WheeledVehicleTire", "shape shapeAsset shapeFile shapeAsset"); +T3Dpre4ProjectImporter::genProcessor("WheeledVehicleData", "engineSound engineSoundAsset squealSound squealSoundAsset"); +T3Dpre4ProjectImporter::genProcessor("FlyingVehicleData", "engineSound engineSoundAsset jetSound jetSoundAsset"); +T3Dpre4ProjectImporter::genProcessor("HoverVehicleData", "engineSound engineSoundAsset jetSound jetSoundAsset floatSound floatSoundAsset"); + +//============================================================================== +// Datablocks - Long Lists +//============================================================================== + +$rigidEntriesList = "softImpactSound softImpactSoundAsset hardImpactSound hardImpactSoundAsset"; +$rigidEntriesList = $rigidEntriesList SPC "exitingWater exitingWaterAsset impactWaterEasy impactWaterEasyAsset"; +$rigidEntriesList = $rigidEntriesList SPC "impactWaterMedium impactWaterMediumAsset impactWaterHard impactWaterHardAsset"; +$rigidEntriesList = $rigidEntriesList SPC "waterWakeSound waterWakeSoundAsset"; +T3Dpre4ProjectImporter::genProcessor("RigidShapeData",$rigidEntriesList); + +$PlayerEntriesList = "shapeFP shapeFPAsset shapeNameFP shapeFPAsset"; +$PlayerEntriesList = $PlayerEntriesList SPC "FootSoftSound FootSoftAsset FootHardSound FootHardAsset FootMetalSound FootMetal"; +$PlayerEntriesList = $PlayerEntriesList SPC "FootSnowSound FootSnowAsset FootShallowSound FootShallowSplashAsset"; +$PlayerEntriesList = $PlayerEntriesList SPC "FootWadingSound FootWadingAsset FootUnderwaterSound FootUnderWaterAsset"; +$PlayerEntriesList = $PlayerEntriesList SPC "FootBubblesSound FootBubblesAsset movingBubblesSound MoveBubblesAsset"; +$PlayerEntriesList = $PlayerEntriesList SPC "waterBreathSound WaterBreathAsset"; +$PlayerEntriesList = $PlayerEntriesList SPC "impactSoftSound ImpactSoftAsset impactHardSound impactHardAsset"; +$PlayerEntriesList = $PlayerEntriesList SPC "impactMetalSound ImpactMetalAsset impactSnowSound impactSnowAsset"; +$PlayerEntriesList = $PlayerEntriesList SPC "impactWaterEasy impactWaterEasyAsset impactWaterMedium impactWaterMediumAsset impactWaterHard impactWaterHardAsset"; +$PlayerEntriesList = $PlayerEntriesList SPC "exitingWater ExitWaterAsset"; + + +T3Dpre4ProjectImporter::genProcessor("PlayerData", $PlayerEntriesList); //============================================================================== // Materials //============================================================================== diff --git a/Templates/BaseGame/game/tools/projectImporter/scripts/projectImporter.tscript b/Templates/BaseGame/game/tools/projectImporter/scripts/projectImporter.tscript index eca0e0b07..cfdd7c8bf 100644 --- a/Templates/BaseGame/game/tools/projectImporter/scripts/projectImporter.tscript +++ b/Templates/BaseGame/game/tools/projectImporter/scripts/projectImporter.tscript @@ -515,7 +515,7 @@ function testFilenameExtensions(%filename) } function processLegacyField(%line, %originalFieldName, %newFieldName) -{ +{ if(!strIsMatchExpr("*"@%originalFieldName@"=*;*", %line) && !strIsMatchExpr("*"@%originalFieldName@"[*=*;*", %line) && !strIsMatchExpr("*"@%originalFieldName@" *=*;*", %line)) @@ -603,10 +603,10 @@ function processLegacyField(%line, %originalFieldName, %newFieldName) if(!strIsMatchExpr("*\"*\"*", %originalValue)) %assetId = "\"" @ %assetId @ "\""; - //if (%assetId.getStatusString() $= "Ok") - %outLine = strReplace(%outLine, %value, %assetId); - //else - // error("Asset assignment failure:", %assetId, getStatusString()); + %firstPart = getToken(%outLine, "=", 0); + %secondPart = getToken(%outLine, "=", 1); + %secondPart = strReplace(%secondPart, %value, %assetId); + %outLine = %firstPart @ "=" @ %secondPart; } }