diff options
author | Andrey Lihatskiy <alihatskiy@productengine.com> | 2024-05-22 20:51:58 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-22 20:51:58 +0300 |
commit | 6cc7dd09d5e69cf57e6de7fb568a0ad2693f9c9a (patch) | |
tree | fab23811a5cedc1ebf01479c852ee92ff62b636c /indra/llcharacter/llmultigesture.h | |
parent | ef8f4819822288e044ea719feb6af7a1f4df4c4e (diff) | |
parent | 7bb5afc11ee5a6af78302a8d76a9a619e2baaab2 (diff) |
Merge pull request #1545 from Ansariel/DRTVWR-600-maint-A
Merge main into DRTVWR-600-maint-a
Diffstat (limited to 'indra/llcharacter/llmultigesture.h')
-rw-r--r-- | indra/llcharacter/llmultigesture.h | 480 |
1 files changed, 245 insertions, 235 deletions
diff --git a/indra/llcharacter/llmultigesture.h b/indra/llcharacter/llmultigesture.h index 13acbc3f52..b166510721 100644 --- a/indra/llcharacter/llmultigesture.h +++ b/indra/llcharacter/llmultigesture.h @@ -1,235 +1,245 @@ -/** - * @file llmultigesture.h - * @brief Gestures that are asset-based and can have multiple steps. - * - * $LicenseInfo:firstyear=2004&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#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: - KEY mKey; - MASK mMask; - - // This name can be empty if the inventory item is not around and - // the gesture manager has not yet set the name - std::string mName; - - // 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; -}; - - -// Order must match the library_list in floater_preview_gesture.xml! - -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::vector<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::vector<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::vector<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::vector<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::vector<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 +/**
+ * @file llmultigesture.h
+ * @brief Gestures that are asset-based and can have multiple steps.
+ *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#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:
+ KEY mKey { 0 };
+ MASK mMask { 0 };
+
+ // This name can be empty if the inventory item is not around and
+ // the gesture manager has not yet set the name
+ std::string mName;
+
+ // 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 { false };
+
+ // "instruction pointer" for steps
+ S32 mCurrentStep { 0 };
+
+ // We're waiting for triggered animations to stop playing
+ bool mWaitingAnimations { false };
+
+ // We're waiting for key release
+ bool mWaitingKeyRelease { false };
+
+ // We're waiting a fixed amount of time
+ bool mWaitingTimer { false };
+
+ // We're waiting for triggered animations to stop playing
+ bool mTriggeredByKey { false };
+
+ // Has the key been released?
+ bool mKeyReleased { false };
+
+ // Waiting after the last step played for all animations to complete
+ bool mWaitingAtEnd { false };
+
+ // Timer for waiting
+ LLFrameTimer mWaitTimer;
+
+ void (*mDoneCallback)(LLMultiGesture* gesture, void* data) { NULL };
+ void* mCallbackData { NULL };
+
+ // 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;
+};
+
+
+// Order must match the library_list in floater_preview_gesture.xml!
+
+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::vector<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::vector<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::vector<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::vector<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;
+const U32 WAIT_FLAG_KEY_RELEASE = 0x04;
+
+class LLGestureStepWait : public LLGestureStep
+{
+public:
+ LLGestureStepWait();
+ virtual ~LLGestureStepWait();
+
+ virtual EStepType getType() { return STEP_WAIT; }
+
+ virtual std::vector<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
|