diff options
Diffstat (limited to 'indra/llcharacter/llgesture.h')
-rw-r--r-- | indra/llcharacter/llgesture.h | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/indra/llcharacter/llgesture.h b/indra/llcharacter/llgesture.h new file mode 100644 index 0000000000..64c752769b --- /dev/null +++ b/indra/llcharacter/llgesture.h @@ -0,0 +1,96 @@ +/** + * @file llgesture.h + * @brief A gesture is a combination of a triggering chat phrase or + * key, a sound, an animation, and a chat string. + * + * Copyright (c) 2002-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#ifndef LL_LLGESTURE_H +#define LL_LLGESTURE_H + +#include "llanimationstates.h" +#include "lluuid.h" +#include "llstring.h" +#include "lldarray.h" + +class LLGesture +{ +public: + LLGesture(); + LLGesture(KEY key, MASK mask, const std::string &trigger, + const LLUUID &sound_item_id, const std::string &animation, + const std::string &output_string); + + LLGesture(U8 **buffer, S32 max_size); // deserializes, advances buffer + LLGesture(const LLGesture &gesture); + const LLGesture &operator=(const LLGesture &rhs); + + virtual ~LLGesture() {}; + + // Accessors + KEY getKey() const { return mKey; } + MASK getMask() const { return mMask; } + const std::string& getTrigger() const { return mTrigger; } + const LLUUID& getSound() const { return mSoundItemID; } + const std::string& getAnimation() const { return mAnimation; } + const std::string& getOutputString() const { return mOutputString; } + + // Triggers if a key/mask matches it + virtual BOOL trigger(KEY key, MASK mask); + + // Triggers if case-insensitive substring matches (assumes string is lowercase) + virtual BOOL trigger(const LLString &string); + + // non-endian-neutral serialization + U8 *serialize(U8 *buffer) const; + U8 *deserialize(U8 *buffer, S32 max_size); + static S32 getMaxSerialSize(); + +protected: + KEY mKey; // usually a function key + MASK mMask; // usually MASK_NONE, or MASK_SHIFT + std::string mTrigger; // string, no whitespace allowed + std::string mTriggerLower; // lowercase version of mTrigger + LLUUID mSoundItemID; // ItemID of sound to play, LLUUID::null if none + std::string mAnimation; // canonical name of animation or face animation + std::string mOutputString; // string to say + + static const S32 MAX_SERIAL_SIZE; +}; + +class LLGestureList +{ +public: + LLGestureList(); + virtual ~LLGestureList(); + + // Triggers if a key/mask matches one in the list + BOOL trigger(KEY key, MASK mask); + + // Triggers if substring matches and generates revised string. + BOOL triggerAndReviseString(const LLString &string, LLString* revised_string); + + // Used for construction from UI + S32 count() const { return mList.count(); } + virtual LLGesture* get(S32 i) const { return mList.get(i); } + virtual void put(LLGesture* gesture) { mList.put( gesture ); } + void deleteAll(); + + // non-endian-neutral serialization + U8 *serialize(U8 *buffer) const; + U8 *deserialize(U8 *buffer, S32 max_size); + S32 getMaxSerialSize(); + +protected: + // overridden by child class to use local LLGesture implementation + virtual LLGesture *create_gesture(U8 **buffer, S32 max_size); + +protected: + LLDynamicArray<LLGesture*> mList; + + static const S32 SERIAL_HEADER_SIZE; +}; + +#endif |