summaryrefslogtreecommitdiff
path: root/indra/llcharacter/lljointstate.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/lljointstate.h
Print done when done.
Diffstat (limited to 'indra/llcharacter/lljointstate.h')
-rw-r--r--indra/llcharacter/lljointstate.h106
1 files changed, 106 insertions, 0 deletions
diff --git a/indra/llcharacter/lljointstate.h b/indra/llcharacter/lljointstate.h
new file mode 100644
index 0000000000..82a2b345b0
--- /dev/null
+++ b/indra/llcharacter/lljointstate.h
@@ -0,0 +1,106 @@
+/**
+ * @file lljointstate.h
+ * @brief Implementation of LLJointState class.
+ *
+ * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_LLJOINTSTATE_H
+#define LL_LLJOINTSTATE_H
+
+//-----------------------------------------------------------------------------
+// Header Files
+//-----------------------------------------------------------------------------
+#include "lljoint.h"
+
+//-----------------------------------------------------------------------------
+// class LLJointState
+//-----------------------------------------------------------------------------
+class LLJointState
+{
+public:
+ enum BlendPhase
+ {
+ INACTIVE,
+ EASE_IN,
+ ACTIVE,
+ EASE_OUT
+ };
+protected:
+ // associated joint
+ LLJoint *mJoint;
+
+ // indicates which members are used
+ U32 mUsage;
+
+ // indicates weighted effect of this joint
+ F32 mWeight;
+
+ // transformation members
+ LLVector3 mPosition; // position relative to parent joint
+ LLQuaternion mRotation; // joint rotation relative to parent joint
+ LLVector3 mScale; // scale relative to rotated frame
+ LLJoint::JointPriority mPriority; // how important this joint state is relative to others
+public:
+ // Constructor
+ LLJointState()
+ {
+ mUsage = 0;
+ mJoint = NULL;
+ mUsage = 0;
+ mWeight = 0.f;
+ mPriority = LLJoint::USE_MOTION_PRIORITY;
+ }
+
+ LLJointState(LLJoint* joint)
+ {
+ mUsage = 0;
+ mJoint = joint;
+ mUsage = 0;
+ mWeight = 0.f;
+ mPriority = LLJoint::USE_MOTION_PRIORITY;
+ }
+
+ // Destructor
+ virtual ~LLJointState()
+ {
+ }
+
+ // joint that this state is applied to
+ LLJoint *getJoint() { return mJoint; }
+ BOOL setJoint( LLJoint *joint ) { mJoint = joint; return mJoint != NULL; }
+
+ // transform type (bitwise flags can be combined)
+ // Note that these are set automatically when various
+ // member setPos/setRot/setScale functions are called.
+ enum Usage
+ {
+ POS = 1,
+ ROT = 2,
+ SCALE = 4,
+ };
+ U32 getUsage() { return mUsage; }
+ void setUsage( U32 usage ) { mUsage = usage; }
+ F32 getWeight() { return mWeight; }
+ void setWeight( F32 weight ) { mWeight = weight; }
+
+ // get/set position
+ const LLVector3& getPosition() { return mPosition; }
+ void setPosition( const LLVector3& pos ) { llassert(mUsage & POS); mPosition = pos; }
+
+ // get/set rotation
+ const LLQuaternion& getRotation() { return mRotation; }
+ void setRotation( const LLQuaternion& rot ) { llassert(mUsage & ROT); mRotation = rot; }
+
+ // get/set scale
+ const LLVector3& getScale() { return mScale; }
+ void setScale( const LLVector3& scale ) { llassert(mUsage & SCALE); mScale = scale; }
+
+ // get/set priority
+ const LLJoint::JointPriority getPriority() { return mPriority; }
+ void setPriority( const LLJoint::JointPriority priority ) { mPriority = priority; }
+};
+
+#endif // LL_LLJOINTSTATE_H
+