00001
00032 #ifndef LL_LLPARTDATA_H
00033 #define LL_LLPARTDATA_H
00034
00035 #include "lluuid.h"
00036 #include "v3math.h"
00037 #include "v3dmath.h"
00038 #include "v2math.h"
00039 #include "v4color.h"
00040
00041 class LLMessageSystem;
00042 class LLDataPacker;
00043
00044 const S32 PS_CUR_VERSION = 18;
00045
00046
00047
00048
00049
00050 enum LLPSScriptFlags
00051 {
00052
00053 LLPS_PART_FLAGS,
00054 LLPS_PART_START_COLOR,
00055 LLPS_PART_START_ALPHA,
00056 LLPS_PART_END_COLOR,
00057 LLPS_PART_END_ALPHA,
00058 LLPS_PART_START_SCALE,
00059 LLPS_PART_END_SCALE,
00060 LLPS_PART_MAX_AGE,
00061
00062
00063 LLPS_SRC_ACCEL,
00064 LLPS_SRC_PATTERN,
00065 LLPS_SRC_INNERANGLE,
00066 LLPS_SRC_OUTERANGLE,
00067 LLPS_SRC_TEXTURE,
00068 LLPS_SRC_BURST_RATE,
00069 LLPS_SRC_BURST_DURATION,
00070 LLPS_SRC_BURST_PART_COUNT,
00071 LLPS_SRC_BURST_RADIUS,
00072 LLPS_SRC_BURST_SPEED_MIN,
00073 LLPS_SRC_BURST_SPEED_MAX,
00074 LLPS_SRC_MAX_AGE,
00075 LLPS_SRC_TARGET_UUID,
00076 LLPS_SRC_OMEGA,
00077 LLPS_SRC_ANGLE_BEGIN,
00078 LLPS_SRC_ANGLE_END
00079 };
00080
00081
00082 class LLPartData
00083 {
00084 public:
00085 LLPartData() :
00086 mFlags(0),
00087 mMaxAge(0.f),
00088 mParameter(0.f)
00089 {
00090 }
00091 BOOL unpack(LLDataPacker &dp);
00092 BOOL pack(LLDataPacker &dp);
00093 LLSD asLLSD() const;
00094 operator LLSD() const {return asLLSD(); }
00095 bool fromLLSD(LLSD& sd);
00096
00097
00098 enum
00099 {
00100 LL_PART_INTERP_COLOR_MASK = 0x01,
00101 LL_PART_INTERP_SCALE_MASK = 0x02,
00102 LL_PART_BOUNCE_MASK = 0x04,
00103 LL_PART_WIND_MASK = 0x08,
00104 LL_PART_FOLLOW_SRC_MASK = 0x10,
00105 LL_PART_FOLLOW_VELOCITY_MASK = 0x20,
00106 LL_PART_TARGET_POS_MASK = 0x40,
00107 LL_PART_TARGET_LINEAR_MASK = 0x80,
00108 LL_PART_EMISSIVE_MASK = 0x100,
00109 LL_PART_BEAM_MASK = 0x200,
00110
00111
00112
00113
00114
00115
00116
00117 LL_PART_DEAD_MASK = 0x80000000,
00118 };
00119
00120 void setFlags(const U32 flags);
00121 void setMaxAge(const F32 max_age);
00122 void setStartScale(const F32 xs, F32 ys);
00123 void setEndScale(const F32 xs, F32 ys);
00124 void setStartColor(const LLVector3 &rgb);
00125 void setEndColor(const LLVector3 &rgb);
00126 void setStartAlpha(const F32 alpha);
00127 void setEndAlpha(const F32 alpha);
00128
00129
00130 friend class LLPartSysData;
00131 friend class LLViewerPartSourceScript;
00132
00133
00134 public:
00135 U32 mFlags;
00136 F32 mMaxAge;
00137 LLColor4 mStartColor;
00138 LLColor4 mEndColor;
00139 LLVector2 mStartScale;
00140 LLVector2 mEndScale;
00141
00142 LLVector3 mPosOffset;
00143 F32 mParameter;
00144 };
00145
00146
00147 class LLPartSysData
00148 {
00149 public:
00150 LLPartSysData();
00151
00152 BOOL unpack(LLDataPacker &dp);
00153 BOOL pack(LLDataPacker &dp);
00154
00155
00156 BOOL unpackBlock(const S32 block_num);
00157 BOOL packBlock();
00158
00159 static BOOL packNull();
00160 static BOOL isNullPS(const S32 block_num);
00161
00162
00163 enum
00164 {
00165 LL_PART_SRC_OBJ_REL_MASK = 0x01,
00166 LL_PART_USE_NEW_ANGLE = 0x02,
00167 };
00168
00169
00170 enum
00171 {
00172 LL_PART_SRC_PATTERN_DROP = 0x01,
00173 LL_PART_SRC_PATTERN_EXPLODE = 0x02,
00174
00175 LL_PART_SRC_PATTERN_ANGLE = 0x04,
00176 LL_PART_SRC_PATTERN_ANGLE_CONE = 0x08,
00177 LL_PART_SRC_PATTERN_ANGLE_CONE_EMPTY = 0x10,
00178 };
00179
00180
00181 void setBurstSpeedMin(const F32 spd) { mBurstSpeedMin = llclamp(spd, -100.f, 100.f); }
00182 void setBurstSpeedMax(const F32 spd) { mBurstSpeedMax = llclamp(spd, -100.f, 100.f); }
00183 void setBurstRadius(const F32 rad) { mBurstRadius = llclamp(rad, 0.f, 50.f); }
00184 void setPartAccel(const LLVector3 &accel);
00185 void setUseNewAngle() { mFlags |= LL_PART_USE_NEW_ANGLE; }
00186 void unsetUseNewAngle() { mFlags &= ~LL_PART_USE_NEW_ANGLE; }
00187
00188
00189
00190
00191 void clampSourceParticleRate();
00192
00193 friend std::ostream& operator<<(std::ostream& s, const LLPartSysData &data);
00194
00195 public:
00196
00197
00198
00199
00200
00201
00202
00203
00204 U32 mCRC;
00205 U32 mFlags;
00206
00207 U8 mPattern;
00208 F32 mInnerAngle;
00209 F32 mOuterAngle;
00210 LLVector3 mAngularVelocity;
00211
00212 F32 mBurstRate;
00213 U8 mBurstPartCount;
00214 F32 mBurstRadius;
00215 F32 mBurstSpeedMin;
00216 F32 mBurstSpeedMax;
00217
00218 F32 mMaxAge;
00219
00220 LLUUID mTargetUUID;
00221
00222 F32 mStartAge;
00223
00224
00225
00226
00227
00228
00229
00230 LLVector3 mPartAccel;
00231 LLUUID mPartImageID;
00232
00233
00234
00235
00236 LLPartData mPartData;
00237
00238 protected:
00239 S32 mNumParticles;
00240 };
00241
00242 #endif // LL_LLPARTDATA_H