mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-20 15:13:45 +00:00
Merge pull request #616 from Azaezel/SoundAssetImplements
Sound asset implements
This commit is contained in:
commit
15aed0efc2
126 changed files with 1313 additions and 1129 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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() {}
|
||||
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
#include "sim/netConnection.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
#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<className*>(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<className*>(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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Material> 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<className*>(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<className*>(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_
|
||||
|
|
|
|||
|
|
@ -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<TSShape> 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<className*>(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<className*>(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<className*>(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<className*>(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
|
||||
|
|
|
|||
|
|
@ -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<SoundAsset>* materialAsset)
|
||||
U32 SoundAsset::getAssetById(StringTableEntry assetId, AssetPtr<SoundAsset>* 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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<SFXResource> 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<className*>(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<className*>(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<SFXResource> m##name[max];\
|
||||
StringTableEntry m##name##Name[max]; \
|
||||
StringTableEntry m##name##AssetId[max];\
|
||||
AssetPtr<SoundAsset> 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<SoundAsset> & get##name##Asset(const U32& index) const { return m##name##Asset[index]; }\
|
||||
void set##name##Asset(const AssetPtr<SoundAsset> &_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<SFXResource> 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<enumType>(i);\
|
||||
const char* enumString = castConsoleTypeToString(static_cast<enumType>(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_
|
||||
|
|
|
|||
298
Engine/source/T3D/assets/assetMacroHelpers.h
Normal file
298
Engine/source/T3D/assets/assetMacroHelpers.h
Normal file
|
|
@ -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<className*>(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<className*>(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<entry>, get<entry>Asset and set<entry> 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<className*>(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<className*>(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<entry>, get<entry>Asset and set<entry> 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<enumType>(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<enumType>(index));\
|
||||
Con::printf("unpack: %s = %s",enumString, m##name##AssetId[index]);\
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
m##name##Name[index] = stream->readSTString();\
|
||||
_set##name(m##name##AssetId[index], index);\
|
||||
}\
|
||||
}
|
||||
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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; i<DDC_NUM_EMITTERS; i++ )
|
||||
{
|
||||
|
|
@ -426,7 +426,7 @@ void DebrisData::unpackData(BitStream* stream)
|
|||
|
||||
textureName = stream->readSTString();
|
||||
|
||||
UNPACKDATA_SHAPEASSET(Shape);
|
||||
UNPACKDATA_ASSET(Shape);
|
||||
|
||||
for( S32 i=0; i<DDC_NUM_EMITTERS; i++ )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ struct DebrisData : public GameBaseData
|
|||
bool ignoreWater;
|
||||
|
||||
DECLARE_SHAPEASSET(DebrisData, Shape, onShapeChanged);
|
||||
DECLARE_SHAPEASSET_SETGET(DebrisData, Shape);
|
||||
DECLARE_ASSET_SETGET(DebrisData, Shape);
|
||||
|
||||
StringTableEntry textureName;
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ ConsoleDocClass( DecalData,
|
|||
DecalData::DecalData()
|
||||
{
|
||||
size = 5;
|
||||
INIT_MATERIALASSET(Material);
|
||||
INIT_ASSET(Material);
|
||||
|
||||
lifeSpan = 5000;
|
||||
fadeTime = 1000;
|
||||
|
|
@ -258,7 +258,7 @@ void DecalData::packData( BitStream *stream )
|
|||
stream->write( 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 );
|
||||
|
|
|
|||
|
|
@ -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_
|
||||
#endif // _DECALDATA_H_
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 <i>ambient</i> 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<SFXProfile*>(mDataBlock->soundProfile);
|
||||
SFXProfile* sound_prof = mDataBlock->getSoundProfile();
|
||||
if (sound_prof)
|
||||
{
|
||||
soundProfile_clone = sound_prof->cloneAndPerformSubstitutions(ss_object, ss_index);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ class ParticleData : public SimDataBlock
|
|||
Vector<U8> 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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<NUM_TIME_KEYS; i++ )
|
||||
times[i] = 1.0;
|
||||
|
|
@ -112,7 +116,8 @@ SplashData::SplashData()
|
|||
//--------------------------------------------------------------------------
|
||||
void SplashData::initPersistFields()
|
||||
{
|
||||
addField("soundProfile", TYPEID< SFXProfile >(), 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; i<NUM_TEX; i++ )
|
||||
{
|
||||
PACKDATA_IMAGEASSET_ARRAY(Texture, i);
|
||||
PACKDATA_ASSET_ARRAY(Texture, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -212,6 +219,8 @@ void SplashData::unpackData(BitStream* stream)
|
|||
{
|
||||
Parent::unpackData(stream);
|
||||
|
||||
UNPACKDATA_ASSET(Sound);
|
||||
|
||||
mathRead(*stream, &scale);
|
||||
stream->read(&delayMS);
|
||||
stream->read(&delayVariance);
|
||||
|
|
@ -255,7 +264,7 @@ void SplashData::unpackData(BitStream* stream)
|
|||
|
||||
for( i=0; i<NUM_TEX; i++ )
|
||||
{
|
||||
UNPACKDATA_IMAGEASSET_ARRAY(Texture, i);
|
||||
UNPACKDATA_ASSET_ARRAY(Texture, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -269,6 +278,15 @@ bool SplashData::preload(bool server, String &errorStr)
|
|||
|
||||
if (!server)
|
||||
{
|
||||
|
||||
if (getSound() != StringTable->EmptyString())
|
||||
{
|
||||
_setSound(getSound());
|
||||
|
||||
if(!getSoundProfile())
|
||||
Con::errorf(ConsoleLogEntry::General, "SplashData::preload: Cant get an sfxProfile for splash.");
|
||||
}
|
||||
|
||||
S32 i;
|
||||
for( i=0; i<NUM_EMITTERS; i++ )
|
||||
{
|
||||
|
|
@ -667,6 +685,14 @@ void Splash::spawnExplosion()
|
|||
{
|
||||
if( !mDataBlock->explosion ) 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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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() {}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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, (), ,
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ public:
|
|||
bool castShadows;
|
||||
|
||||
DECLARE_SHAPEASSET(PhysicsDebrisData, Shape, onShapeChanged);
|
||||
DECLARE_SHAPEASSET_SETGET(PhysicsDebrisData, Shape);
|
||||
DECLARE_ASSET_SETGET(PhysicsDebrisData, Shape);
|
||||
|
||||
PhysicsDebrisData();
|
||||
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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; i<ShapeBase::MaxMountedImages; ++i)
|
||||
{
|
||||
INIT_SHAPEASSET_ARRAY(ShapeFP, i);
|
||||
INIT_ASSET_ARRAY(ShapeFP, i);
|
||||
mCRCFP[i] = 0;
|
||||
mValidShapeFP[i] = false;
|
||||
}
|
||||
|
|
@ -397,7 +423,7 @@ PlayerData::PlayerData()
|
|||
boxHeadFrontPercentage = 1;
|
||||
|
||||
for (S32 i = 0; i < MaxSounds; i++)
|
||||
sound[i] = NULL;
|
||||
INIT_ASSET_ARRAY(PlayerSound, i);
|
||||
|
||||
footPuffEmitter = NULL;
|
||||
footPuffID = 0;
|
||||
|
|
@ -444,14 +470,16 @@ bool PlayerData::preload(bool server, String &errorStr)
|
|||
if(!Parent::preload(server, errorStr))
|
||||
return false;
|
||||
|
||||
// Resolve objects transmitted from server
|
||||
if( !server )
|
||||
for (U32 i = 0; i < MaxSounds; ++i)
|
||||
{
|
||||
for( U32 i = 0; i < MaxSounds; ++ i )
|
||||
_setPlayerSound(getPlayerSound(i), i);
|
||||
if (getPlayerSound(i) != StringTable->EmptyString())
|
||||
{
|
||||
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<Sounds>(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; i<ShapeBase::MaxMountedImages; ++i)
|
||||
{
|
||||
PACKDATA_SHAPEASSET_ARRAY(ShapeFP, i);
|
||||
PACKDATA_ASSET_ARRAY(ShapeFP, i);
|
||||
|
||||
// computeCRC is handled in ShapeBaseData
|
||||
if (computeCRC)
|
||||
|
|
@ -1484,8 +1454,8 @@ void PlayerData::unpackData(BitStream* stream)
|
|||
stream->read(&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; i<ShapeBase::MaxMountedImages; ++i)
|
||||
{
|
||||
UNPACKDATA_SHAPEASSET_ARRAY(ShapeFP, i);
|
||||
UNPACKDATA_ASSET_ARRAY(ShapeFP, i);
|
||||
|
||||
// computeCRC is handled in ShapeBaseData
|
||||
if (computeCRC)
|
||||
|
|
@ -1932,11 +1902,11 @@ bool Player::onNewDataBlock( GameBaseData *dptr, bool reload )
|
|||
SFX_DELETE( mMoveBubbleSound );
|
||||
SFX_DELETE( mWaterBreathSound );
|
||||
|
||||
if ( mDataBlock->sound[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->mFootstepSoundId<PlayerData::MaxSoundOffsets))
|
||||
if (contactMaterial && (contactMaterial->mFootstepSoundId > -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->mImpactSoundId<PlayerData::MaxSoundOffsets))
|
||||
if (material && (material->mImpactSoundId > -1 && material->mImpactSoundId < PlayerData::WaterStart))
|
||||
sound = material->mImpactSoundId;
|
||||
else if( rInfo.object->getTypeMask() & VehicleObjectType )
|
||||
sound = 2; // Play metal;
|
||||
|
||||
if (sound >= 0)
|
||||
SFX->playOnce(mDataBlock->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 )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 <i>armed</i> 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 <i>triggered</i> 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] );
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@
|
|||
|
||||
// Need full definition visible for SimObjectPtr<ParticleEmitter>
|
||||
#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
|
||||
|
|
|
|||
|
|
@ -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<SFXSource*>::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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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<S32> mCollisionDetails;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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<SFXProfile*>( 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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ public:
|
|||
|
||||
public:
|
||||
DECLARE_IMAGEASSET(afxBillboardData, Texture, onChangeTexture, GFXStaticTextureSRGBProfile);
|
||||
DECLARE_IMAGEASSET_SETGET(afxBillboardData, Texture);
|
||||
DECLARE_ASSET_SETGET(afxBillboardData, Texture);
|
||||
|
||||
|
||||
LinearColorF color;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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_
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -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] );
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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_
|
||||
#endif // _CLOUDLAYER_H_
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ class GuiRoadEditorCtrl : public EditTSCtrl
|
|||
public:
|
||||
|
||||
DECLARE_MATERIALASSET(GuiRoadEditorCtrl, Material);
|
||||
DECLARE_MATERIALASSET_SETGET(GuiRoadEditorCtrl, Material);
|
||||
DECLARE_ASSET_SETGET(GuiRoadEditorCtrl, Material);
|
||||
|
||||
protected:
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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<Material> mMaterial[SurfaceCount];
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ Sun::Sun()
|
|||
mCoronaUseLightColor = true;
|
||||
mCoronaMatInst = NULL;
|
||||
|
||||
INIT_MATERIALASSET(CoronaMaterial);
|
||||
INIT_ASSET(CoronaMaterial);
|
||||
|
||||
mMatrixSet = reinterpret_cast<MatrixSet *>(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 );
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -260,9 +260,9 @@ WaterObject::WaterObject()
|
|||
mMatrixSet = reinterpret_cast<MatrixSet *>(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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue