summaryrefslogtreecommitdiff
path: root/indra/llcharacter/llmultigesture.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/llcharacter/llmultigesture.h
Print done when done.
Diffstat (limited to 'indra/llcharacter/llmultigesture.h')
-rw-r--r--indra/llcharacter/llmultigesture.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/indra/llcharacter/llmultigesture.h b/indra/llcharacter/llmultigesture.h
new file mode 100644
index 0000000000..39ee30568b
--- /dev/null
+++ b/indra/llcharacter/llmultigesture.h
@@ -0,0 +1,213 @@
+/**
+ * @file llmultigesture.h
+ * @brief Gestures that are asset-based and can have multiple steps.
+ *
+ * Copyright (c) 2004-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_LLMULTIGESTURE_H
+#define LL_LLMULTIGESTURE_H
+
+#include <set>
+#include <string>
+#include <vector>
+
+#include "lluuid.h"
+#include "llframetimer.h"
+
+class LLDataPacker;
+class LLGestureStep;
+
+class LLMultiGesture
+{
+public:
+ LLMultiGesture();
+ virtual ~LLMultiGesture();
+
+ // Maximum number of bytes this could hold once serialized.
+ S32 getMaxSerialSize() const;
+
+ BOOL serialize(LLDataPacker& dp) const;
+ BOOL deserialize(LLDataPacker& dp);
+
+ void dump();
+
+ void reset();
+
+ const std::string& getTrigger() const { return mTrigger; }
+protected:
+ LLMultiGesture(const LLMultiGesture& gest);
+ const LLMultiGesture& operator=(const LLMultiGesture& rhs);
+
+public:
+ // name is stored at asset level
+ // desc is stored at asset level
+ KEY mKey;
+ MASK mMask;
+
+ // String, like "/foo" or "hello" that makes it play
+ std::string mTrigger;
+
+ // Replaces the trigger substring with this text
+ std::string mReplaceText;
+
+ std::vector<LLGestureStep*> mSteps;
+
+ // Is the gesture currently playing?
+ BOOL mPlaying;
+
+ // "instruction pointer" for steps
+ S32 mCurrentStep;
+
+ // We're waiting for triggered animations to stop playing
+ BOOL mWaitingAnimations;
+
+ // We're waiting a fixed amount of time
+ BOOL mWaitingTimer;
+
+ // Waiting after the last step played for all animations to complete
+ BOOL mWaitingAtEnd;
+
+ // Timer for waiting
+ LLFrameTimer mWaitTimer;
+
+ void (*mDoneCallback)(LLMultiGesture* gesture, void* data);
+ void* mCallbackData;
+
+ // Animations that we requested to start
+ std::set<LLUUID> mRequestedAnimIDs;
+
+ // Once the animation starts playing (sim says to start playing)
+ // the ID is moved from mRequestedAnimIDs to here.
+ std::set<LLUUID> mPlayingAnimIDs;
+};
+
+
+enum EStepType
+{
+ STEP_ANIMATION = 0,
+ STEP_SOUND = 1,
+ STEP_CHAT = 2,
+ STEP_WAIT = 3,
+
+ STEP_EOF = 4
+};
+
+
+class LLGestureStep
+{
+public:
+ LLGestureStep() {}
+ virtual ~LLGestureStep() {}
+
+ virtual EStepType getType() = 0;
+
+ // Return a user-readable label for this step
+ virtual std::string getLabel() const = 0;
+
+ virtual S32 getMaxSerialSize() const = 0;
+ virtual BOOL serialize(LLDataPacker& dp) const = 0;
+ virtual BOOL deserialize(LLDataPacker& dp) = 0;
+
+ virtual void dump() = 0;
+};
+
+
+// By default, animation steps start animations.
+// If the least significant bit is 1, it will stop animations.
+const U32 ANIM_FLAG_STOP = 0x01;
+
+class LLGestureStepAnimation : public LLGestureStep
+{
+public:
+ LLGestureStepAnimation();
+ virtual ~LLGestureStepAnimation();
+
+ virtual EStepType getType() { return STEP_ANIMATION; }
+
+ virtual std::string getLabel() const;
+
+ virtual S32 getMaxSerialSize() const;
+ virtual BOOL serialize(LLDataPacker& dp) const;
+ virtual BOOL deserialize(LLDataPacker& dp);
+
+ virtual void dump();
+
+public:
+ std::string mAnimName;
+ LLUUID mAnimAssetID;
+ U32 mFlags;
+};
+
+
+class LLGestureStepSound : public LLGestureStep
+{
+public:
+ LLGestureStepSound();
+ virtual ~LLGestureStepSound();
+
+ virtual EStepType getType() { return STEP_SOUND; }
+
+ virtual std::string getLabel() const;
+
+ virtual S32 getMaxSerialSize() const;
+ virtual BOOL serialize(LLDataPacker& dp) const;
+ virtual BOOL deserialize(LLDataPacker& dp);
+
+ virtual void dump();
+
+public:
+ std::string mSoundName;
+ LLUUID mSoundAssetID;
+ U32 mFlags;
+};
+
+
+class LLGestureStepChat : public LLGestureStep
+{
+public:
+ LLGestureStepChat();
+ virtual ~LLGestureStepChat();
+
+ virtual EStepType getType() { return STEP_CHAT; }
+
+ virtual std::string getLabel() const;
+
+ virtual S32 getMaxSerialSize() const;
+ virtual BOOL serialize(LLDataPacker& dp) const;
+ virtual BOOL deserialize(LLDataPacker& dp);
+
+ virtual void dump();
+
+public:
+ std::string mChatText;
+ U32 mFlags;
+};
+
+
+const U32 WAIT_FLAG_TIME = 0x01;
+const U32 WAIT_FLAG_ALL_ANIM = 0x02;
+
+class LLGestureStepWait : public LLGestureStep
+{
+public:
+ LLGestureStepWait();
+ virtual ~LLGestureStepWait();
+
+ virtual EStepType getType() { return STEP_WAIT; }
+
+ virtual std::string getLabel() const;
+
+ virtual S32 getMaxSerialSize() const;
+ virtual BOOL serialize(LLDataPacker& dp) const;
+ virtual BOOL deserialize(LLDataPacker& dp);
+
+ virtual void dump();
+
+public:
+ F32 mWaitSeconds;
+ U32 mFlags;
+};
+
+#endif