diff options
author | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
---|---|---|
committer | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
commit | 420b91db29485df39fd6e724e782c449158811cb (patch) | |
tree | b471a94563af914d3ed3edd3e856d21cb1b69945 /indra/llcharacter/llheadrotmotion.h |
Print done when done.
Diffstat (limited to 'indra/llcharacter/llheadrotmotion.h')
-rw-r--r-- | indra/llcharacter/llheadrotmotion.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/indra/llcharacter/llheadrotmotion.h b/indra/llcharacter/llheadrotmotion.h new file mode 100644 index 0000000000..dc327cf44b --- /dev/null +++ b/indra/llcharacter/llheadrotmotion.h @@ -0,0 +1,194 @@ +/** + * @file llheadrotmotion.h + * @brief Implementation of LLHeadRotMotion class. + * + * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#ifndef LL_LLHEADROTMOTION_H +#define LL_LLHEADROTMOTION_H + +//----------------------------------------------------------------------------- +// Header files +//----------------------------------------------------------------------------- +#include "llmotion.h" +#include "llframetimer.h" + +#define MIN_REQUIRED_PIXEL_AREA_HEAD_ROT 500.f; +#define MIN_REQUIRED_PIXEL_AREA_EYE 25000.f; + +//----------------------------------------------------------------------------- +// class LLHeadRotMotion +//----------------------------------------------------------------------------- +class LLHeadRotMotion : + public LLMotion +{ +public: + // Constructor + LLHeadRotMotion(const LLUUID &id); + + // Destructor + virtual ~LLHeadRotMotion(); + +public: + //------------------------------------------------------------------------- + // functions to support MotionController and MotionRegistry + //------------------------------------------------------------------------- + + // static constructor + // all subclasses must implement such a function and register it + static LLMotion *create(const LLUUID &id) { return new LLHeadRotMotion(id); } + +public: + //------------------------------------------------------------------------- + // animation callbacks to be implemented by subclasses + //------------------------------------------------------------------------- + + // motions must specify whether or not they loop + virtual BOOL getLoop() { return TRUE; } + + // motions must report their total duration + virtual F32 getDuration() { return 0.0; } + + // motions must report their "ease in" duration + virtual F32 getEaseInDuration() { return 1.f; } + + // motions must report their "ease out" duration. + virtual F32 getEaseOutDuration() { return 1.f; } + + // called to determine when a motion should be activated/deactivated based on avatar pixel coverage + virtual F32 getMinPixelArea() { return MIN_REQUIRED_PIXEL_AREA_HEAD_ROT; } + + // motions must report their priority + virtual LLJoint::JointPriority getPriority() { return LLJoint::MEDIUM_PRIORITY; } + + virtual LLMotionBlendType getBlendType() { return NORMAL_BLEND; } + + // run-time (post constructor) initialization, + // called after parameters have been set + // must return true to indicate success and be available for activation + virtual LLMotionInitStatus onInitialize(LLCharacter *character); + + // called when a motion is activated + // must return TRUE to indicate success, or else + // it will be deactivated + virtual BOOL onActivate(); + + // called per time step + // must return TRUE while it is active, and + // must return FALSE when the motion is completed. + virtual BOOL onUpdate(F32 time, U8* joint_mask); + + // called when a motion is deactivated + virtual void onDeactivate(); + +public: + //------------------------------------------------------------------------- + // joint states to be animated + //------------------------------------------------------------------------- + LLCharacter *mCharacter; + + LLJoint *mTorsoJoint; + LLJoint *mHeadJoint; + LLJoint *mRootJoint; + LLJoint *mPelvisJoint; + + LLJointState mTorsoState; + LLJointState mNeckState; + LLJointState mHeadState; + + LLQuaternion mLastHeadRot; +}; + +//----------------------------------------------------------------------------- +// class LLEyeMotion +//----------------------------------------------------------------------------- +class LLEyeMotion : + public LLMotion +{ +public: + // Constructor + LLEyeMotion(const LLUUID &id); + + // Destructor + virtual ~LLEyeMotion(); + +public: + //------------------------------------------------------------------------- + // functions to support MotionController and MotionRegistry + //------------------------------------------------------------------------- + + // static constructor + // all subclasses must implement such a function and register it + static LLMotion *create( const LLUUID &id) { return new LLEyeMotion(id); } + +public: + //------------------------------------------------------------------------- + // animation callbacks to be implemented by subclasses + //------------------------------------------------------------------------- + + // motions must specify whether or not they loop + virtual BOOL getLoop() { return TRUE; } + + // motions must report their total duration + virtual F32 getDuration() { return 0.0; } + + // motions must report their "ease in" duration + virtual F32 getEaseInDuration() { return 0.5f; } + + // motions must report their "ease out" duration. + virtual F32 getEaseOutDuration() { return 0.5f; } + + // called to determine when a motion should be activated/deactivated based on avatar pixel coverage + virtual F32 getMinPixelArea() { return MIN_REQUIRED_PIXEL_AREA_EYE; } + + // motions must report their priority + virtual LLJoint::JointPriority getPriority() { return LLJoint::MEDIUM_PRIORITY; } + + virtual LLMotionBlendType getBlendType() { return NORMAL_BLEND; } + + // run-time (post constructor) initialization, + // called after parameters have been set + // must return true to indicate success and be available for activation + virtual LLMotionInitStatus onInitialize(LLCharacter *character); + + // called when a motion is activated + // must return TRUE to indicate success, or else + // it will be deactivated + virtual BOOL onActivate(); + + // called per time step + // must return TRUE while it is active, and + // must return FALSE when the motion is completed. + virtual BOOL onUpdate(F32 time, U8* joint_mask); + + // called when a motion is deactivated + virtual void onDeactivate(); + +public: + //------------------------------------------------------------------------- + // joint states to be animated + //------------------------------------------------------------------------- + LLCharacter *mCharacter; + + LLJoint *mHeadJoint; + LLJointState mLeftEyeState; + LLJointState mRightEyeState; + + LLFrameTimer mEyeJitterTimer; + F32 mEyeJitterTime; + F32 mEyeJitterYaw; + F32 mEyeJitterPitch; + F32 mEyeLookAwayTime; + F32 mEyeLookAwayYaw; + F32 mEyeLookAwayPitch; + + // eye blinking + LLFrameTimer mEyeBlinkTimer; + F32 mEyeBlinkTime; + BOOL mEyesClosed; +}; + +#endif // LL_LLHEADROTMOTION_H + |