45#define SAFE_DELETE(pointer) \
54#ifndef SAFE_DELETE_ARRAY
55#define SAFE_DELETE_ARRAY(pointer) \
86 m_InitialOrientationRandom (0),
87 m_pCreationVolume (
NULL),
88 m_pVelocityRandomizer (
NULL)
90 ::memset (&m_Info, 0,
sizeof (m_Info));
91 ::memset (&m_InfoV2, 0,
sizeof (m_InfoV2));
92 ::memset (&m_ExtraInfo, 0,
sizeof (m_ExtraInfo));
94 ::memset (&m_ColorKeyframes, 0,
sizeof (m_ColorKeyframes));
95 ::memset (&m_OpacityKeyframes, 0,
sizeof (m_OpacityKeyframes));
96 ::memset (&m_SizeKeyframes, 0,
sizeof (m_SizeKeyframes));
97 ::memset (&m_RotationKeyframes, 0,
sizeof (m_RotationKeyframes));
98 ::memset (&m_FrameKeyframes, 0,
sizeof (m_FrameKeyframes));
99 ::memset (&m_BlurTimeKeyframes, 0,
sizeof (m_BlurTimeKeyframes));
100 ::memset (&m_LineProperties, 0,
sizeof (m_LineProperties));
112 m_pUserString (
NULL),
114 m_InitialOrientationRandom (src.m_InitialOrientationRandom),
115 m_pCreationVolume (
NULL),
116 m_pVelocityRandomizer (
NULL)
118 ::memset (&m_Info, 0,
sizeof (m_Info));
119 ::memset (&m_InfoV2, 0,
sizeof (m_InfoV2));
120 ::memset (&m_ExtraInfo, 0,
sizeof (m_ExtraInfo));
122 ::memset (&m_ColorKeyframes, 0,
sizeof (m_ColorKeyframes));
123 ::memset (&m_OpacityKeyframes, 0,
sizeof (m_OpacityKeyframes));
124 ::memset (&m_SizeKeyframes, 0,
sizeof (m_SizeKeyframes));
125 ::memset (&m_RotationKeyframes, 0,
sizeof (m_RotationKeyframes));
126 ::memset (&m_FrameKeyframes, 0,
sizeof (m_FrameKeyframes));
127 ::memset (&m_BlurTimeKeyframes, 0,
sizeof (m_BlurTimeKeyframes));
128 ::memset (&m_LineProperties, 0,
sizeof (m_LineProperties));
142 if (m_pName !=
NULL) {
150 if (m_pUserString !=
NULL) {
153 ::free (m_pUserString);
154 m_pUserString =
NULL;
178 m_Version = src.m_Version;
183 ::memcpy (&m_Info, &src.m_Info, sizeof (m_Info));
184 ::memcpy (&m_InfoV2, &src.m_InfoV2, sizeof (m_InfoV2));
185 ::memcpy (&m_ExtraInfo, &src.m_ExtraInfo, sizeof (m_ExtraInfo));
186 ::memcpy (&m_LineProperties, &src.m_LineProperties,
sizeof(m_LineProperties));
198 m_InitialOrientationRandom = src.m_InitialOrientationRandom;
217 m_ColorKeyframes.NumKeyFrames = 0;
218 m_OpacityKeyframes.NumKeyFrames = 0;
219 m_SizeKeyframes.NumKeyFrames = 0;
220 m_RotationKeyframes.NumKeyFrames = 0;
221 m_FrameKeyframes.NumKeyFrames = 0;
222 m_BlurTimeKeyframes.NumKeyFrames = 0;
249 m_pVelocityRandomizer = randomizer;
254 if (m_pVelocityRandomizer !=
NULL) {
270 m_pCreationVolume = randomizer;
275 if (m_pCreationVolume !=
NULL) {
291 m_pUserString = ::_strdup (pstring);
304 m_pName = ::_strdup (pname);
316 ::lstrcpy (m_Info.TextureFilename, pname);
329 TCHAR path[MAX_PATH];
330 ::lstrcpy (path, m_Info.TextureFilename);
333 LPCTSTR filename = ::strrchr (path,
'\\');
334 if (filename !=
NULL) {
340 ::lstrcpy (m_Info.TextureFilename, filename);
363 if (m_Version > 0x00010000) {
409 WWDEBUG_SAY((
"Unhandled Chunk! File: %s Line: %d\r\n",__FILE__,__LINE__));
428 ::memset (&m_Info, 0,
sizeof (m_Info));
429 ::memset (&m_InfoV2, 0,
sizeof (m_InfoV2));
430 ::memset (&m_ExtraInfo, 0,
sizeof (m_ExtraInfo));
435 m_InfoV2.BurstSize = 1;
436 m_InfoV2.OutwardVel = 0;
437 m_InfoV2.VelInherit = 0;
441 m_InfoV2.CreationVolume.Value1 = 0;
442 m_InfoV2.CreationVolume.Value2 = 0;
443 m_InfoV2.CreationVolume.Value3 = 0;
446 m_InfoV2.VelRandom.Value1 = 0;
447 m_InfoV2.VelRandom.Value2 = 0;
448 m_InfoV2.VelRandom.Value3 = 0;
462 if (m_Version < 0x00020000) {
463 m_InfoV2.BurstSize = 1;
464 m_InfoV2.OutwardVel = 0;
465 m_InfoV2.VelInherit = 0;
472 if (ptexture !=
NULL) {
491 m_InfoV2.CreationVolume.Value1 = m_Info.PositionRandom / 1000.0f;
492 m_InfoV2.CreationVolume.Value2 = m_Info.PositionRandom / 1000.0f;
493 m_InfoV2.CreationVolume.Value3 = m_Info.PositionRandom / 1000.0f;
496 m_InfoV2.VelRandom.Value1 = m_Info.VelocityRandom;
497 m_InfoV2.VelRandom.Value2 = m_Info.VelocityRandom;
498 m_InfoV2.VelRandom.Value3 = m_Info.VelocityRandom;
513 m_ColorKeyframes.Rand =
Vector3 (0, 0, 0);
514 m_ColorKeyframes.NumKeyFrames = 1;
515 m_ColorKeyframes.KeyTimes =
W3DNEW float(m_Info.FadeTime);
518 m_OpacityKeyframes.Start = ((float)(m_Info.StartColor.A)) / 255;
519 m_OpacityKeyframes.Rand = 0;
520 m_OpacityKeyframes.NumKeyFrames = 1;
521 m_OpacityKeyframes.KeyTimes =
W3DNEW float(m_Info.FadeTime);
522 m_OpacityKeyframes.Values =
W3DNEW float(((
float)(m_Info.EndColor.A)) / 255);
524 m_SizeKeyframes.Start = m_Info.StartSize;
525 m_SizeKeyframes.Rand = 0;
526 m_SizeKeyframes.NumKeyFrames = 0;
548 if (chunk_load.
Read (&header, sizeof (header)) ==
sizeof (header)) {
551 m_pName = ::_strdup (header.
Name);
582 if (chunk_load.
Read (&user_info, sizeof (user_info)) ==
sizeof (user_info)) {
588 m_iUserType = user_info.
Type;
592 m_pUserString = (
char *)::malloc (
sizeof (
char) * (user_info.
SizeofStringParam+1));
593 m_pUserString[0] = 0;
626 ::memset (&m_Info, 0,
sizeof (m_Info));
627 if (chunk_load.
Read (&m_Info, sizeof (m_Info)) ==
sizeof (m_Info)) {
729 ::memset (&m_InfoV2, 0,
sizeof (m_InfoV2));
730 if (chunk_load.
Read (&m_InfoV2, sizeof (m_InfoV2)) ==
sizeof (m_InfoV2)) {
769 if (chunk_load.
Read (&info, sizeof (info)) ==
sizeof (info)) {
771 unsigned int index=0;
784 if (m_ColorKeyframes.NumKeyFrames > 0) {
785 m_ColorKeyframes.KeyTimes =
W3DNEWARRAY float[m_ColorKeyframes.NumKeyFrames];
792 if (m_OpacityKeyframes.NumKeyFrames > 0) {
793 m_OpacityKeyframes.KeyTimes =
W3DNEWARRAY float[m_OpacityKeyframes.NumKeyFrames];
794 m_OpacityKeyframes.Values =
W3DNEWARRAY float[m_OpacityKeyframes.NumKeyFrames];
800 if (m_SizeKeyframes.NumKeyFrames > 0) {
801 m_SizeKeyframes.KeyTimes =
W3DNEWARRAY float[m_SizeKeyframes.NumKeyFrames];
802 m_SizeKeyframes.Values =
W3DNEWARRAY float[m_SizeKeyframes.NumKeyFrames];
809 for (index = 0; index < m_ColorKeyframes.NumKeyFrames; index ++) {
811 &m_ColorKeyframes.KeyTimes[index],
812 &m_ColorKeyframes.Values[index]);
820 int last_keyframe = (m_ColorKeyframes.NumKeyFrames - 1);
821 if ( last_keyframe > 0 &&
822 m_ColorKeyframes.Values[last_keyframe].X == 0 &&
823 m_ColorKeyframes.Values[last_keyframe].Y == 0 &&
824 m_ColorKeyframes.Values[last_keyframe].Z == 0 &&
825 (m_ColorKeyframes.Rand.X > 0 || m_ColorKeyframes.Rand.Y > 0 || m_ColorKeyframes.Rand.Z > 0))
827 m_ColorKeyframes.Values[last_keyframe].X = -m_ColorKeyframes.Rand.X;
828 m_ColorKeyframes.Values[last_keyframe].Y = -m_ColorKeyframes.Rand.Y;
829 m_ColorKeyframes.Values[last_keyframe].Z = -m_ColorKeyframes.Rand.Z;
836 for (index = 0; index < m_OpacityKeyframes.NumKeyFrames; index ++) {
838 &m_OpacityKeyframes.KeyTimes[index],
839 &m_OpacityKeyframes.Values[index]);
846 for (index = 0; index < m_SizeKeyframes.NumKeyFrames; index ++) {
848 &m_SizeKeyframes.KeyTimes[index],
849 &m_SizeKeyframes.Values[index]);
883 if (chunk_load.
Read (&key_frame, sizeof (key_frame)) ==
sizeof (key_frame)) {
886 if (key_time !=
NULL) {
887 (*key_time) = key_frame.
Time;
921 if (chunk_load.
Read (&key_frame, sizeof (key_frame)) ==
sizeof (key_frame)) {
924 if (key_time !=
NULL) {
925 (*key_time) = key_frame.
Time;
959 if (chunk_load.
Read (&key_frame, sizeof (key_frame)) ==
sizeof (key_frame)) {
962 if (key_time !=
NULL) {
963 (*key_time) = key_frame.
Time;
968 (*value) = key_frame.
Size;
993 if (chunk_load.
Read (&m_LineProperties, sizeof (m_LineProperties)) ==
sizeof (m_LineProperties)) {
1017 if (chunk_load.
Read(&header,
sizeof(header)) !=
sizeof(header)) {
1021 m_RotationKeyframes.Rand = header.
Random;
1026 if (chunk_load.
Read(&key,
sizeof(key)) ==
sizeof(key)) {
1027 m_RotationKeyframes.Start = key.
Rotation;
1031 if (m_RotationKeyframes.NumKeyFrames > 0) {
1032 m_RotationKeyframes.KeyTimes =
W3DNEWARRAY float[m_RotationKeyframes.NumKeyFrames];
1033 m_RotationKeyframes.Values =
W3DNEWARRAY float[m_RotationKeyframes.NumKeyFrames];
1039 if (chunk_load.
Read(&key,
sizeof(key)) ==
sizeof(key)) {
1040 m_RotationKeyframes.KeyTimes[i] = key.
Time;
1041 m_RotationKeyframes.Values[i] = key.
Rotation;
1043 m_RotationKeyframes.KeyTimes[i] = 0.0f;
1044 m_RotationKeyframes.Values[i] = 0.0f;
1064 if (chunk_load.
Read(&header,
sizeof(header)) !=
sizeof(header)) {
1070 if (chunk_load.
Read(&key,
sizeof(key)) ==
sizeof(key)) {
1071 m_FrameKeyframes.Start = key.
Frame;
1076 m_FrameKeyframes.Rand = header.
Random;
1078 if (m_FrameKeyframes.NumKeyFrames > 0) {
1079 m_FrameKeyframes.KeyTimes =
W3DNEWARRAY float[m_FrameKeyframes.NumKeyFrames];
1080 m_FrameKeyframes.Values =
W3DNEWARRAY float[m_FrameKeyframes.NumKeyFrames];
1086 if (chunk_load.
Read(&key,
sizeof(key)) !=
sizeof(key)) {
1089 m_FrameKeyframes.KeyTimes[i] = key.
Time;
1090 m_FrameKeyframes.Values[i] = key.
Frame;
1107 if (chunk_load.
Read(&header,
sizeof(header)) !=
sizeof(header)) {
1113 if (chunk_load.
Read(&key,
sizeof(key)) ==
sizeof(key)) {
1114 m_BlurTimeKeyframes.Start = key.
BlurTime;
1119 m_BlurTimeKeyframes.Rand = header.
Random;
1121 if (m_BlurTimeKeyframes.NumKeyFrames > 0) {
1122 m_BlurTimeKeyframes.KeyTimes =
new float[m_BlurTimeKeyframes.NumKeyFrames];
1123 m_BlurTimeKeyframes.Values =
new float[m_BlurTimeKeyframes.NumKeyFrames];
1129 if (chunk_load.
Read(&key,
sizeof(key)) !=
sizeof(key)) {
1132 m_BlurTimeKeyframes.KeyTimes[i] = key.
Time;
1133 m_BlurTimeKeyframes.Values[i] = key.
BlurTime;
1149 ::memset (&m_ExtraInfo, 0,
sizeof (m_ExtraInfo));
1150 if (chunk_load.
Read (&m_ExtraInfo, sizeof (m_ExtraInfo)) ==
sizeof (m_ExtraInfo)) {
1214 ::lstrcpyn (header.
Name, m_pName, sizeof (header.
Name));
1215 header.
Name[
sizeof (header.
Name) - 1] = 0;
1218 if (chunk_save.
Write (&header, sizeof (header)) ==
sizeof (header))
1246 DWORD string_len = m_pUserString ? (::lstrlen (m_pUserString) + 1) : 0;
1250 user_info.
Type = m_iUserType;
1254 if (chunk_save.
Write (&user_info, sizeof (user_info)) ==
sizeof (user_info))
1260 if (m_pUserString !=
NULL) {
1263 if (chunk_save.
Write (m_pUserString, string_len) != string_len) {
1294 if (chunk_save.
Write (&m_Info, sizeof (m_Info)) ==
sizeof (m_Info))
1323 if (chunk_save.
Write (&m_InfoV2, sizeof (m_InfoV2)) ==
sizeof (m_InfoV2))
1365 if (chunk_save.
Write (&info, sizeof (info)) ==
sizeof (info)) {
1405 if (chunk_save.
Write (&info, sizeof (info)) ==
sizeof (info)) {
1410 int count = m_ColorKeyframes.NumKeyFrames;
1411 bool success =
true;
1412 for (
int index = 0; (index < count) && success; index ++) {
1413 info.
Time = m_ColorKeyframes.KeyTimes[index];
1415 success = (chunk_save.
Write (&info,
sizeof (info)) ==
sizeof (info));
1438 info.
Opacity = m_OpacityKeyframes.Start;
1443 if (chunk_save.
Write (&info, sizeof (info)) ==
sizeof (info)) {
1448 int count = m_OpacityKeyframes.NumKeyFrames;
1449 bool success =
true;
1450 for (
int index = 0; (index < count) && success; index ++) {
1451 info.
Time = m_OpacityKeyframes.KeyTimes[index];
1452 info.
Opacity = m_OpacityKeyframes.Values[index];
1453 success = (chunk_save.
Write (&info,
sizeof (info)) ==
sizeof (info));
1476 info.
Size = m_SizeKeyframes.Start;
1481 if (chunk_save.
Write (&info, sizeof (info)) ==
sizeof (info)) {
1486 int count = m_SizeKeyframes.NumKeyFrames;
1487 bool success =
true;
1488 for (
int index = 0; (index < count) && success; index ++) {
1489 info.
Time = m_SizeKeyframes.KeyTimes[index];
1490 info.
Size = m_SizeKeyframes.Values[index];
1491 success = (chunk_save.
Write (&info,
sizeof (info)) ==
sizeof (info));
1511 if (chunk_save.
Write (&m_LineProperties, sizeof (m_LineProperties)) ==
sizeof (m_LineProperties))
1543 header.
Random = m_RotationKeyframes.Rand;
1548 bool success =
true;
1553 key.
Rotation = m_RotationKeyframes.Start;
1554 chunk_save.
Write (&key,
sizeof (key));
1557 for (
unsigned int index = 0; (index < header.
KeyframeCount) && success; index ++) {
1558 key.
Time = m_RotationKeyframes.KeyTimes[index];
1559 key.
Rotation = m_RotationKeyframes.Values[index];
1560 success = (chunk_save.
Write (&key,
sizeof (key)) ==
sizeof (key));
1592 header.
Random = m_FrameKeyframes.Rand;
1596 bool success =
true;
1601 key.
Frame = m_FrameKeyframes.Start;
1602 chunk_save.
Write (&key,
sizeof (key));
1605 for (
unsigned int index = 0; (index < header.
KeyframeCount) && success; index ++) {
1606 key.
Time = m_FrameKeyframes.KeyTimes[index];
1607 key.
Frame = m_FrameKeyframes.Values[index];
1608 success = (chunk_save.
Write (&key,
sizeof (key)) ==
sizeof (key));
1639 header.
Random = m_BlurTimeKeyframes.Rand;
1643 bool success =
true;
1648 key.
BlurTime = m_BlurTimeKeyframes.Start;
1649 chunk_save.
Write (&key,
sizeof (key));
1652 for (
unsigned int index = 0; (index < header.
KeyframeCount) && success; index ++) {
1653 key.
Time = m_BlurTimeKeyframes.KeyTimes[index];
1654 key.
BlurTime = m_BlurTimeKeyframes.Values[index];
1655 success = (chunk_save.
Write (&key,
sizeof (key)) ==
sizeof (key));
1679 memset(&data, 0,
sizeof(data));
1681 bool success = (chunk_save.
Write (&data,
sizeof (data)) ==
sizeof (data));
1746 m_InitialOrientationRandom = orient_rnd;
1871 if (pdefinition !=
NULL) {
#define W3D_CURRENT_EMITTER_VERSION
@ W3D_CHUNK_EMITTER_FRAME_KEYFRAMES
@ W3D_CHUNK_EMITTER_INFOV2
@ W3D_CHUNK_EMITTER_BLUR_TIME_KEYFRAMES
@ W3D_CHUNK_EMITTER_ROTATION_KEYFRAMES
@ W3D_CHUNK_EMITTER_LINE_PROPERTIES
@ W3D_CHUNK_EMITTER_USER_DATA
@ W3D_CHUNK_EMITTER_HEADER
@ W3D_CHUNK_EMITTER_EXTRA_INFO
@ W3D_CHUNK_EMITTER_PROPS
uint32 Read(void *buf, uint32 nbytes)
uint32 Write(const void *buf, uint32 nbytes)
bool Begin_Chunk(uint32 id)
static ParticleEmitterClass * Create_From_Definition(const ParticleEmitterDefClass &definition)
virtual WW3DErrorType Save_Color_Keyframes(ChunkSaveClass &chunk_save)
virtual void Convert_To_Ver2(void)
virtual WW3DErrorType Save_W3D(ChunkSaveClass &chunk_save)
float Get_Future_Start_Time(void) const
virtual void Get_Size_Keyframes(ParticlePropertyStruct< float > &keyframes) const
virtual void Set_User_Type(int type)
virtual WW3DErrorType Save_Extra_Info(ChunkSaveClass &chunk_save)
ParticleEmitterDefClass(void)
virtual void Set_User_String(const char *pstring)
virtual void Set_Texture_Filename(const char *pname)
const char * Get_Name(void) const
virtual void Set_Frame_Keyframes(ParticlePropertyStruct< float > &keyframes)
virtual void Set_Size_Keyframes(ParticlePropertyStruct< float > &keyframes)
virtual WW3DErrorType Load_W3D(ChunkLoadClass &chunk_load)
const ParticleEmitterDefClass & operator=(const ParticleEmitterDefClass &src)
virtual void Get_Opacity_Keyframes(ParticlePropertyStruct< float > &keyframes) const
virtual WW3DErrorType Read_Rotation_Keyframes(ChunkLoadClass &chunk_load)
virtual bool Read_Opacity_Keyframe(ChunkLoadClass &chunk_load, float *key_time, float *value)
virtual void Set_Name(const char *pname)
virtual WW3DErrorType Read_Props(ChunkLoadClass &chunk_load)
virtual void Get_Color_Keyframes(ParticlePropertyStruct< Vector3 > &keyframes) const
virtual WW3DErrorType Read_Extra_Info(ChunkLoadClass &chunk_load)
virtual void Set_Velocity_Random(Vector3Randomizer *randomizer)
virtual WW3DErrorType Save_Size_Keyframes(ChunkSaveClass &chunk_save)
virtual Vector3Randomizer * Create_Randomizer(W3dVolumeRandomizerStruct &info)
virtual WW3DErrorType Save_Header(ChunkSaveClass &chunk_save)
virtual ~ParticleEmitterDefClass(void)
virtual WW3DErrorType Save_InfoV2(ChunkSaveClass &chunk_save)
const char * Get_User_String(void) const
int Get_User_Type(void) const
virtual WW3DErrorType Save_Props(ChunkSaveClass &chunk_save)
virtual WW3DErrorType Read_User_Data(ChunkLoadClass &chunk_load)
virtual WW3DErrorType Read_Info(ChunkLoadClass &chunk_load)
virtual void Normalize_Filename(void)
virtual WW3DErrorType Read_Frame_Keyframes(ChunkLoadClass &chunk_load)
virtual void Get_Rotation_Keyframes(ParticlePropertyStruct< float > &rotationframes) const
virtual void Free_Props(void)
virtual WW3DErrorType Read_Header(ChunkLoadClass &chunk_load)
virtual bool Read_Size_Keyframe(ChunkLoadClass &chunk_load, float *key_time, float *value)
virtual WW3DErrorType Read_Line_Properties(ChunkLoadClass &chunk_load)
virtual WW3DErrorType Save_Frame_Keyframes(ChunkSaveClass &chunk_save)
virtual void Set_Color_Keyframes(ParticlePropertyStruct< Vector3 > &keyframes)
virtual void Initialize_Randomizer_Struct(const Vector3Randomizer &randomizer, W3dVolumeRandomizerStruct &info)
virtual WW3DErrorType Save_Info(ChunkSaveClass &chunk_save)
virtual WW3DErrorType Read_Blur_Time_Keyframes(ChunkLoadClass &chunk_load)
virtual WW3DErrorType Read_InfoV2(ChunkLoadClass &chunk_load)
virtual void Set_Rotation_Keyframes(ParticlePropertyStruct< float > &keyframes, float orient_rnd)
virtual WW3DErrorType Save_Rotation_Keyframes(ChunkSaveClass &chunk_save)
virtual WW3DErrorType Save_Blur_Time_Keyframes(ChunkSaveClass &chunk_save)
virtual WW3DErrorType Save_Line_Properties(ChunkSaveClass &chunk_save)
virtual void Set_Blur_Time_Keyframes(ParticlePropertyStruct< float > &keyframes)
virtual bool Read_Color_Keyframe(ChunkLoadClass &chunk_load, float *key_time, Vector3 *value)
virtual void Set_Opacity_Keyframes(ParticlePropertyStruct< float > &keyframes)
virtual void Get_Frame_Keyframes(ParticlePropertyStruct< float > &frameframes) const
virtual void Initialize_To_Ver2(void)
virtual void Set_Creation_Volume(Vector3Randomizer *randomizer)
virtual void Get_Blur_Time_Keyframes(ParticlePropertyStruct< float > &blurtimeframes) const
virtual WW3DErrorType Save_User_Data(ChunkSaveClass &chunk_save)
virtual WW3DErrorType Save_Opacity_Keyframes(ChunkSaveClass &chunk_save)
virtual PrototypeClass * Load_W3D(ChunkLoadClass &chunk_load)
virtual RenderObjClass * Create(void)
ParticleEmitterDefClass * m_pDefinition
WWINLINE void Release_Ref(void) const
static ShaderClass _PresetAdditiveSpriteShader
static ShaderClass _PresetAlphaSpriteShader
WW3DFormat Get_Texture_Format() const
virtual unsigned int Class_ID(void) const =0
static void Convert_Shader(const W3dShaderStruct &shader, ShaderClass *set)
virtual TextureClass * Get_Texture(const char *filename, MipCountType mip_level_count=MIP_LEVELS_ALL, WW3DFormat texture_format=WW3D_FORMAT_UNKNOWN, bool allow_compression=true, TextureBaseClass::TexAssetType type=TextureBaseClass::TEX_REGULAR, bool allow_reduction=true)
static WW3DAssetManager * Get_Instance(void)
__inline void Copy_Emitter_Property_Struct(ParticlePropertyStruct< T > &dest, const ParticlePropertyStruct< T > &src)
#define SAFE_DELETE(pointer)
ParticleEmitterLoaderClass _ParticleEmitterLoader
#define SAFE_DELETE_ARRAY(pointer)
const char * EMITTER_TYPE_NAMES[EMITTER_TYPEID_COUNT]
#define VECTOR3_TO_RGBA(vector3, rgba)
#define SAFE_FREE(pointer)
#define RGBA_TO_VECTOR3(rgba)
W3dRGBAStruct ColorRandom