blob: 2a8d03d431141454d1dfc2974d3f09a34eeed00e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
/**
* @file llvisualparam.h
* @brief Implementation of LLPolyMesh class.
*
* Copyright (c) 2001-$CurrentYear$, Linden Research, Inc.
* $License$
*/
#ifndef LL_LLVisualParam_H
#define LL_LLVisualParam_H
#include "v3math.h"
#include "llstring.h"
#include "llxmltree.h"
class LLPolyMesh;
class LLXmlTreeNode;
enum ESex
{
SEX_FEMALE = 0x01,
SEX_MALE = 0x02,
SEX_BOTH = 0x03 // values chosen to allow use as a bit field.
};
enum EVisualParamGroup
{
VISUAL_PARAM_GROUP_TWEAKABLE,
VISUAL_PARAM_GROUP_ANIMATABLE,
NUM_VISUAL_PARAM_GROUPS
};
const S32 MAX_TRANSMITTED_VISUAL_PARAMS = 255;
//-----------------------------------------------------------------------------
// LLVisualParamInfo
// Contains shared data for VisualParams
//-----------------------------------------------------------------------------
class LLVisualParamInfo
{
friend class LLVisualParam;
public:
LLVisualParamInfo();
virtual ~LLVisualParamInfo() {};
virtual BOOL parseXml(LLXmlTreeNode *node);
protected:
S32 mID; // ID associated with VisualParam
LLString mName; // name (for internal purposes)
LLString mDisplayName; // name displayed to the user
LLString mMinName; // name associated with minimum value
LLString mMaxName; // name associated with maximum value
EVisualParamGroup mGroup; // morph group for separating UI controls
F32 mMinWeight; // minimum weight that can be assigned to this morph target
F32 mMaxWeight; // maximum weight that can be assigned to this morph target
F32 mDefaultWeight;
ESex mSex; // Which gender(s) this param applies to.
};
//-----------------------------------------------------------------------------
// LLVisualParam
// VIRTUAL CLASS
// An interface class for a generalized parametric modification of the avatar mesh
// Contains data that is specific to each Avatar
//-----------------------------------------------------------------------------
class LLVisualParam
{
public:
LLVisualParam();
virtual ~LLVisualParam();
// Special: These functions are overridden by child classes
// (They can not be virtual because they use specific derived Info classes)
LLVisualParamInfo* getInfo() const { return mInfo; }
// This sets mInfo and calls initialization functions
BOOL setInfo(LLVisualParamInfo *info);
// Virtual functions
// Pure virtuals
//virtual BOOL parseData( LLXmlTreeNode *node ) = 0;
virtual void apply( ESex avatar_sex ) = 0;
// Default functions
virtual void setWeight(F32 weight, BOOL set_by_user);
virtual void setAnimationTarget( F32 target_value, BOOL set_by_user );
virtual void animate(F32 delta, BOOL set_by_user);
virtual void stopAnimating(BOOL set_by_user);
// Interface methods
const S32 getID() { return mID; }
void setID(S32 id) { llassert(!mInfo); mID = id; }
const LLString& getName() const { return mInfo->mName; }
const LLString& getDisplayName() const { return mInfo->mDisplayName; }
const LLString& getMaxDisplayName() const { return mInfo->mMaxName; }
const LLString& getMinDisplayName() const { return mInfo->mMinName; }
void setDisplayName(const char* s) { mInfo->mDisplayName = s; }
void setMaxDisplayName(const char* s) { mInfo->mMaxName = s; }
void setMinDisplayName(const char* s) { mInfo->mMinName = s; }
const EVisualParamGroup getGroup() { return mInfo->mGroup; }
F32 getMinWeight() { return mInfo->mMinWeight; }
F32 getMaxWeight() { return mInfo->mMaxWeight; }
F32 getDefaultWeight() { return mInfo->mDefaultWeight; }
ESex getSex() { return mInfo->mSex; }
F32 getWeight() { return mIsAnimating ? mTargetWeight : mCurWeight; }
F32 getCurrentWeight() { return mCurWeight; }
F32 getLastWeight() { return mLastWeight; }
BOOL isAnimating() { return mIsAnimating; }
LLVisualParam* getNextParam() { return mNext; }
void setNextParam( LLVisualParam *next );
virtual void setAnimating(BOOL is_animating) { mIsAnimating = is_animating; }
BOOL getAnimating() { return mIsAnimating; }
protected:
F32 mCurWeight; // current weight
F32 mLastWeight; // last weight
LLVisualParam* mNext; // next param in a shared chain
F32 mTargetWeight; // interpolation target
BOOL mIsAnimating; // this value has been given an interpolation target
S32 mID; // id for storing weight/morphtarget compares compactly
LLVisualParamInfo *mInfo;
};
#endif // LL_LLVisualParam_H
|