From 420b91db29485df39fd6e724e782c449158811cb Mon Sep 17 00:00:00 2001 From: James Cook Date: Tue, 2 Jan 2007 08:33:20 +0000 Subject: Print done when done. --- indra/newview/llviewerpartsim.h | 141 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 indra/newview/llviewerpartsim.h (limited to 'indra/newview/llviewerpartsim.h') diff --git a/indra/newview/llviewerpartsim.h b/indra/newview/llviewerpartsim.h new file mode 100644 index 0000000000..83c374a42e --- /dev/null +++ b/indra/newview/llviewerpartsim.h @@ -0,0 +1,141 @@ +/** + * @file llviewerpartsim.h + * @brief LLViewerPart class header file + * + * Copyright (c) 2003-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#ifndef LL_LLVIEWERPARTSIM_H +#define LL_LLVIEWERPARTSIM_H + +#include "lldarrayptr.h" +#include "llskiplist.h" +#include "llframetimer.h" +#include "llmemory.h" + +#include "llpartdata.h" + +class LLViewerImage; +class LLViewerPart; +class LLViewerPartSource; +class LLViewerRegion; +class LLViewerImage; +class LLVOPartGroup; + +typedef void (*LLVPCallback)(LLViewerPart &part, const F32 dt); + +/////////////////// +// +// An individual particle +// + + +class LLViewerPart : public LLPartData +{ +public: + LLViewerPart(); + ~LLViewerPart(); + + LLViewerPart &operator=(const LLViewerPart &part); + void init(LLViewerPartSource *sourcep, LLViewerImage *imagep, LLVPCallback cb); + + + U32 mPartID; // Particle ID used primarily for moving between groups + F32 mLastUpdateTime; // Last time the particle was updated + + + LLVPCallback mVPCallback; // Callback function for more complicated behaviors + LLPointer mPartSourcep; // Particle source used for this object + + + // Current particle state (possibly used for rendering) + LLPointer mImagep; + LLVector3 mPosAgent; + LLVector3 mVelocity; + LLVector3 mAccel; + LLColor4 mColor; + LLVector2 mScale; + + static U32 sNextPartID; +}; + + + +class LLViewerPartGroup +{ +public: + LLViewerPartGroup(const LLVector3 ¢er, + const F32 box_radius); + virtual ~LLViewerPartGroup(); + + void cleanup(); + + BOOL addPart(LLViewerPart &part); + + void updateParticles(const F32 dt); + + BOOL posInGroup(const LLVector3 &pos); + + void shift(const LLVector3 &offset); + + LLDynamicArray mParticles; + + const LLVector3 &getCenterAgent() const { return mCenterAgent; } + S32 getCount() const { return mParticles.count(); } + LLViewerRegion *getRegion() const { return mRegionp; } +protected: + void removePart(const S32 part_num); + +protected: + LLVector3 mCenterAgent; + F32 mBoxRadius; + LLVector3 mMinObjPos; + LLVector3 mMaxObjPos; + + LLPointer mVOPartGroupp; + LLViewerRegion *mRegionp; +}; + + +class LLViewerPartSim +{ +public: + LLViewerPartSim(); + virtual ~LLViewerPartSim(); + + void shift(const LLVector3 &offset); + + void updateSimulation(); + + void addPartSource(LLViewerPartSource *sourcep); + + void cleanupRegion(LLViewerRegion *regionp); + + BOOL shouldAddPart(); // Just decides whether this particle should be added or not (for particle count capping) + void addPart(LLViewerPart &part); + void cleanMutedParticles(const LLUUID& task_id); + + friend class LLViewerPartGroup; + + BOOL aboveParticleLimit() const { return sParticleCount > sMaxParticleCount; } + + static void setMaxPartCount(const S32 max_parts) { sMaxParticleCount = max_parts; } + static S32 getMaxPartCount() { return sMaxParticleCount; } + static void incPartCount(const S32 count) { sParticleCount += count; } + static void decPartCount(const S32 count) { sParticleCount -= count; } + +protected: + LLViewerPartGroup *createViewerPartGroup(const LLVector3 &pos_agent); + LLViewerPartGroup *put(LLViewerPart &part); + +protected: + LLDynamicArray mViewerPartGroups; + LLDynamicArrayPtr > mViewerPartSources; + LLFrameTimer mSimulationTimer; + + static S32 sMaxParticleCount; + static S32 sParticleCount; +}; + +#endif // LL_LLVIEWERPARTSIM_H -- cgit v1.2.3