summaryrefslogtreecommitdiff
path: root/indra/newview/llviewerpartsource.h
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
committerJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
commit420b91db29485df39fd6e724e782c449158811cb (patch)
treeb471a94563af914d3ed3edd3e856d21cb1b69945 /indra/newview/llviewerpartsource.h
Print done when done.
Diffstat (limited to 'indra/newview/llviewerpartsource.h')
-rw-r--r--indra/newview/llviewerpartsource.h188
1 files changed, 188 insertions, 0 deletions
diff --git a/indra/newview/llviewerpartsource.h b/indra/newview/llviewerpartsource.h
new file mode 100644
index 0000000000..05fa007ead
--- /dev/null
+++ b/indra/newview/llviewerpartsource.h
@@ -0,0 +1,188 @@
+/**
+ * @file llviewerpartsource.h
+ * @brief LLViewerPartSource class header file
+ *
+ * Copyright (c) 2003-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_LLVIEWERPARTSOURCE_H
+#define LL_LLVIEWERPARTSOURCE_H
+
+#include "llmemory.h"
+#include "llpartdata.h"
+#include "llquaternion.h"
+#include "v3math.h"
+
+////////////////////
+//
+// A particle source - subclassed to generate particles with different behaviors
+//
+//
+
+class LLViewerImage;
+class LLViewerObject;
+class LLViewerPart;
+
+class LLViewerPartSource : public LLRefCount
+{
+public:
+ enum
+ {
+ LL_PART_SOURCE_NULL,
+ LL_PART_SOURCE_SCRIPT,
+ LL_PART_SOURCE_SPIRAL,
+ LL_PART_SOURCE_BEAM,
+ LL_PART_SOURCE_CHAT
+ };
+
+ LLViewerPartSource(const U32 type);
+
+ virtual void update(const F32 dt); // Return FALSE if this source is dead...
+
+ virtual void setDead();
+ BOOL isDead() const { return mIsDead; }
+
+ U32 getType() const { return mType; }
+ static void updatePart(LLViewerPart &part, const F32 dt);
+ void setOwnerUUID(const LLUUID& owner_id) { mOwnerUUID = owner_id; }
+ LLUUID getOwnerUUID() const { return mOwnerUUID; }
+
+ LLVector3 mPosAgent; // Location of the particle source
+ LLVector3 mTargetPosAgent; // Location of the target position
+ LLVector3 mLastUpdatePosAgent;
+protected:
+ U32 mType;
+ BOOL mIsDead;
+ F32 mLastUpdateTime;
+ F32 mLastPartTime;
+ LLUUID mOwnerUUID;
+
+ // Particle information
+ U32 mPartFlags; // Flags for the particle
+};
+
+
+
+///////////////////////////////
+//
+// LLViewerPartSourceScript
+//
+// Particle source that handles the "generic" script-drive particle source
+// attached to objects
+//
+
+
+class LLViewerPartSourceScript : public LLViewerPartSource
+{
+public:
+ LLViewerPartSourceScript(LLViewerObject *source_objp);
+ /*virtual*/ void update(const F32 dt);
+
+ /*virtual*/ void setDead();
+
+ BOOL updateFromMesg();
+
+ // Returns a new particle source to attach to an object...
+ static LLViewerPartSourceScript *unpackPSS(LLViewerObject *source_objp, LLViewerPartSourceScript *pssp, const S32 block_num);
+ static LLViewerPartSourceScript *unpackPSS(LLViewerObject *source_objp, LLViewerPartSourceScript *pssp, LLDataPacker &dp);
+
+ LLViewerImage *getImage() const { return mImagep; }
+ void setImage(LLViewerImage *imagep);
+ LLPartSysData mPartSysData;
+
+ void setTargetObject(LLViewerObject *objp);
+
+protected:
+ LLQuaternion mRotation; // Current rotation for particle source
+ LLPointer<LLViewerImage> mImagep; // Cached image pointer of the mPartSysData UUID
+ LLPointer<LLViewerObject> mSourceObjectp; // Source object that this particle system is attached to
+ LLPointer<LLViewerObject> mTargetObjectp; // Target object for the particle source
+};
+
+
+////////////////////////////
+//
+// Particle source for spiral effect (customize avatar, mostly)
+//
+
+class LLViewerPartSourceSpiral : public LLViewerPartSource
+{
+public:
+ LLViewerPartSourceSpiral(const LLVector3 &pos);
+
+ /*virtual*/ void setDead();
+
+ /*virtual*/ void update(const F32 dt);
+
+ void setSourceObject(LLViewerObject *objp);
+ void setColor(const LLColor4 &color);
+
+ static void updatePart(LLViewerPart &part, const F32 dt);
+ LLColor4 mColor;
+protected:
+ LLPointer<LLViewerImage> mImagep;
+ LLPointer<LLViewerObject> mSourceObjectp;
+ LLVector3d mLKGSourcePosGlobal;
+};
+
+
+////////////////////////////
+//
+// Particle source for tractor(editing) beam
+//
+
+class LLViewerPartSourceBeam : public LLViewerPartSource
+{
+public:
+ LLViewerPartSourceBeam();
+ ~LLViewerPartSourceBeam();
+
+ /*virtual*/ void setDead();
+
+ /*virtual*/ void update(const F32 dt);
+
+ void setSourceObject(LLViewerObject *objp);
+ void setTargetObject(LLViewerObject *objp);
+ void setSourcePosGlobal(const LLVector3d &pos_global);
+ void setTargetPosGlobal(const LLVector3d &pos_global);
+ void setColor(const LLColor4 &color);
+
+ static void updatePart(LLViewerPart &part, const F32 dt);
+ LLPointer<LLViewerImage> mImagep;
+ LLPointer<LLViewerObject> mSourceObjectp;
+ LLPointer<LLViewerObject> mTargetObjectp;
+ LLVector3d mLKGTargetPosGlobal;
+ LLColor4 mColor;
+protected:
+};
+
+
+
+//////////////////////////
+//
+// Particle source for chat effect
+//
+
+class LLViewerPartSourceChat : public LLViewerPartSource
+{
+public:
+ LLViewerPartSourceChat(const LLVector3 &pos);
+
+ /*virtual*/ void setDead();
+
+ /*virtual*/ void update(const F32 dt);
+
+ void setSourceObject(LLViewerObject *objp);
+ void setColor(const LLColor4 &color);
+
+ static void updatePart(LLViewerPart &part, const F32 dt);
+ LLColor4 mColor;
+protected:
+ LLPointer<LLViewerImage> mImagep;
+ LLPointer<LLViewerObject> mSourceObjectp;
+ LLVector3d mLKGSourcePosGlobal;
+};
+
+
+#endif // LL_LLVIEWERPARTSOURCE_H