Files
SingularityViewer/indra/llcharacter/llanimationstates.cpp
2010-04-02 02:48:44 -03:00

343 lines
19 KiB
C++

/**
* @file llanimationstates.cpp
* @brief Implementation of animation state related functions.
*
* $LicenseInfo:firstyear=2001&license=viewergpl$
*
* Copyright (c) 2001-2009, Linden Research, Inc.
*
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
//-----------------------------------------------------------------------------
// Agent Animation State
//-----------------------------------------------------------------------------
#include "linden_common.h"
#include "llanimationstates.h"
#include "llstring.h"
LLUUID AGENT_WALK_ANIMS[] = {ANIM_AGENT_WALK, ANIM_AGENT_RUN, ANIM_AGENT_CROUCHWALK, ANIM_AGENT_TURNLEFT, ANIM_AGENT_TURNRIGHT};
S32 NUM_AGENT_WALK_ANIMS = LL_ARRAY_SIZE(AGENT_WALK_ANIMS);
LLUUID AGENT_GUN_HOLD_ANIMS[] = {ANIM_AGENT_HOLD_RIFLE_R, ANIM_AGENT_HOLD_HANDGUN_R, ANIM_AGENT_HOLD_BAZOOKA_R, ANIM_AGENT_HOLD_BOW_L};
S32 NUM_AGENT_GUN_HOLD_ANIMS = LL_ARRAY_SIZE(AGENT_GUN_HOLD_ANIMS);
LLUUID AGENT_GUN_AIM_ANIMS[] = {ANIM_AGENT_AIM_RIFLE_R, ANIM_AGENT_AIM_HANDGUN_R, ANIM_AGENT_AIM_BAZOOKA_R, ANIM_AGENT_AIM_BOW_L};
S32 NUM_AGENT_GUN_AIM_ANIMS = LL_ARRAY_SIZE(AGENT_GUN_AIM_ANIMS);
LLUUID AGENT_NO_ROTATE_ANIMS[] = {ANIM_AGENT_SIT_GROUND, ANIM_AGENT_SIT_GROUND_CONSTRAINED, ANIM_AGENT_STANDUP};
S32 NUM_AGENT_NO_ROTATE_ANIMS = LL_ARRAY_SIZE(AGENT_NO_ROTATE_ANIMS);
LLUUID AGENT_STAND_ANIMS[] = {ANIM_AGENT_STAND, ANIM_AGENT_STAND_1, ANIM_AGENT_STAND_2, ANIM_AGENT_STAND_3, ANIM_AGENT_STAND_4};
S32 NUM_AGENT_STAND_ANIMS = LL_ARRAY_SIZE(AGENT_STAND_ANIMS);
LLAnimationLibrary gAnimLibrary;
//-----------------------------------------------------------------------------
// LLAnimationLibrary()
//-----------------------------------------------------------------------------
LLAnimationLibrary::LLAnimationLibrary() :
mAnimStringTable(16384)
{
//add animation names to animmap
mAnimMap[ANIM_AGENT_AFRAID]= mAnimStringTable.addString("express_afraid");
mAnimMap[ANIM_AGENT_AIM_BAZOOKA_R]= mAnimStringTable.addString("aim_r_bazooka");
mAnimMap[ANIM_AGENT_AIM_BOW_L]= mAnimStringTable.addString("aim_l_bow");
mAnimMap[ANIM_AGENT_AIM_HANDGUN_R]= mAnimStringTable.addString("aim_r_handgun");
mAnimMap[ANIM_AGENT_AIM_RIFLE_R]= mAnimStringTable.addString("aim_r_rifle");
mAnimMap[ANIM_AGENT_ANGRY]= mAnimStringTable.addString("express_anger");
mAnimMap[ANIM_AGENT_AWAY]= mAnimStringTable.addString("away");
mAnimMap[ANIM_AGENT_BACKFLIP]= mAnimStringTable.addString("backflip");
mAnimMap[ANIM_AGENT_BELLY_LAUGH]= mAnimStringTable.addString("express_laugh");
mAnimMap[ANIM_AGENT_BLOW_KISS]= mAnimStringTable.addString("blowkiss");
mAnimMap[ANIM_AGENT_BORED]= mAnimStringTable.addString("express_bored");
mAnimMap[ANIM_AGENT_BOW]= mAnimStringTable.addString("bow");
mAnimMap[ANIM_AGENT_BRUSH]= mAnimStringTable.addString("brush");
mAnimMap[ANIM_AGENT_BUSY]= mAnimStringTable.addString("busy");
mAnimMap[ANIM_AGENT_CLAP]= mAnimStringTable.addString("clap");
mAnimMap[ANIM_AGENT_COURTBOW]= mAnimStringTable.addString("courtbow");
mAnimMap[ANIM_AGENT_CROUCH]= mAnimStringTable.addString("crouch");
mAnimMap[ANIM_AGENT_CROUCHWALK]= mAnimStringTable.addString("crouchwalk");
mAnimMap[ANIM_AGENT_CRY]= mAnimStringTable.addString("express_cry");
mAnimMap[ANIM_AGENT_CUSTOMIZE]= mAnimStringTable.addString("turn_180");
mAnimMap[ANIM_AGENT_CUSTOMIZE_DONE]= mAnimStringTable.addString("turnback_180");
mAnimMap[ANIM_AGENT_DANCE1]= mAnimStringTable.addString("dance1");
mAnimMap[ANIM_AGENT_DANCE2]= mAnimStringTable.addString("dance2");
mAnimMap[ANIM_AGENT_DANCE3]= mAnimStringTable.addString("dance3");
mAnimMap[ANIM_AGENT_DANCE4]= mAnimStringTable.addString("dance4");
mAnimMap[ANIM_AGENT_DANCE5]= mAnimStringTable.addString("dance5");
mAnimMap[ANIM_AGENT_DANCE6]= mAnimStringTable.addString("dance6");
mAnimMap[ANIM_AGENT_DANCE7]= mAnimStringTable.addString("dance7");
mAnimMap[ANIM_AGENT_DANCE8]= mAnimStringTable.addString("dance8");
mAnimMap[ANIM_AGENT_DEAD]= mAnimStringTable.addString("dead");
mAnimMap[ANIM_AGENT_DRINK]= mAnimStringTable.addString("drink");
mAnimMap[ANIM_AGENT_EMBARRASSED]= mAnimStringTable.addString("express_embarrased");
mAnimMap[ANIM_AGENT_EXPRESS_AFRAID]= mAnimStringTable.addString("express_afraid_emote");
mAnimMap[ANIM_AGENT_EXPRESS_ANGER]= mAnimStringTable.addString("express_anger_emote");
mAnimMap[ANIM_AGENT_EXPRESS_BORED]= mAnimStringTable.addString("express_bored_emote");
mAnimMap[ANIM_AGENT_EXPRESS_CRY]= mAnimStringTable.addString("express_cry_emote");
mAnimMap[ANIM_AGENT_EXPRESS_DISDAIN]= mAnimStringTable.addString("express_disdain");
mAnimMap[ANIM_AGENT_EXPRESS_EMBARRASSED]= mAnimStringTable.addString("express_embarrassed_emote");
mAnimMap[ANIM_AGENT_EXPRESS_FROWN]= mAnimStringTable.addString("express_frown");
mAnimMap[ANIM_AGENT_EXPRESS_KISS]= mAnimStringTable.addString("express_kiss");
mAnimMap[ANIM_AGENT_EXPRESS_LAUGH]= mAnimStringTable.addString("express_laugh_emote");
mAnimMap[ANIM_AGENT_EXPRESS_OPEN_MOUTH]= mAnimStringTable.addString("express_open_mouth");
mAnimMap[ANIM_AGENT_EXPRESS_REPULSED]= mAnimStringTable.addString("express_repulsed_emote");
mAnimMap[ANIM_AGENT_EXPRESS_SAD]= mAnimStringTable.addString("express_sad_emote");
mAnimMap[ANIM_AGENT_EXPRESS_SHRUG]= mAnimStringTable.addString("express_shrug_emote");
mAnimMap[ANIM_AGENT_EXPRESS_SMILE]= mAnimStringTable.addString("express_smile");
mAnimMap[ANIM_AGENT_EXPRESS_SURPRISE]= mAnimStringTable.addString("express_surprise_emote");
mAnimMap[ANIM_AGENT_EXPRESS_TONGUE_OUT]= mAnimStringTable.addString("express_tongue_out");
mAnimMap[ANIM_AGENT_EXPRESS_TOOTHSMILE]= mAnimStringTable.addString("express_toothsmile");
mAnimMap[ANIM_AGENT_EXPRESS_WINK]= mAnimStringTable.addString("express_wink_emote");
mAnimMap[ANIM_AGENT_EXPRESS_WORRY]= mAnimStringTable.addString("express_worry_emote");
mAnimMap[ANIM_AGENT_FALLDOWN]= mAnimStringTable.addString("falldown");
mAnimMap[ANIM_AGENT_FEMALE_WALK]= mAnimStringTable.addString("female_walk");
mAnimMap[ANIM_AGENT_FINGER_WAG]= mAnimStringTable.addString("angry_fingerwag");
mAnimMap[ANIM_AGENT_FIST_PUMP]= mAnimStringTable.addString("fist_pump");
mAnimMap[ANIM_AGENT_FLY]= mAnimStringTable.addString("fly");
mAnimMap[ANIM_AGENT_FLYSLOW]= mAnimStringTable.addString("flyslow");
mAnimMap[ANIM_AGENT_HELLO]= mAnimStringTable.addString("hello");
mAnimMap[ANIM_AGENT_HOLD_BAZOOKA_R]= mAnimStringTable.addString("hold_r_bazooka");
mAnimMap[ANIM_AGENT_HOLD_BOW_L]= mAnimStringTable.addString("hold_l_bow");
mAnimMap[ANIM_AGENT_HOLD_HANDGUN_R]= mAnimStringTable.addString("hold_r_handgun");
mAnimMap[ANIM_AGENT_HOLD_RIFLE_R]= mAnimStringTable.addString("hold_r_rifle");
mAnimMap[ANIM_AGENT_HOLD_THROW_R]= mAnimStringTable.addString("hold_throw_r");
mAnimMap[ANIM_AGENT_HOVER]= mAnimStringTable.addString("hover");
mAnimMap[ANIM_AGENT_HOVER_DOWN]= mAnimStringTable.addString("hover_down");
mAnimMap[ANIM_AGENT_HOVER_UP]= mAnimStringTable.addString("hover_up");
mAnimMap[ANIM_AGENT_IMPATIENT]= mAnimStringTable.addString("impatient");
mAnimMap[ANIM_AGENT_JUMP]= mAnimStringTable.addString("jump");
mAnimMap[ANIM_AGENT_JUMP_FOR_JOY]= mAnimStringTable.addString("jumpforjoy");
mAnimMap[ANIM_AGENT_KISS_MY_BUTT]= mAnimStringTable.addString("kissmybutt");
mAnimMap[ANIM_AGENT_LAND]= mAnimStringTable.addString("land");
mAnimMap[ANIM_AGENT_LAUGH_SHORT]= mAnimStringTable.addString("laugh_short");
mAnimMap[ANIM_AGENT_MEDIUM_LAND]= mAnimStringTable.addString("soft_land");
mAnimMap[ANIM_AGENT_MOTORCYCLE_SIT]= mAnimStringTable.addString("motorcycle_sit");
mAnimMap[ANIM_AGENT_MUSCLE_BEACH]= mAnimStringTable.addString("musclebeach");
mAnimMap[ANIM_AGENT_NO]= mAnimStringTable.addString("no_head");
mAnimMap[ANIM_AGENT_NO_UNHAPPY]= mAnimStringTable.addString("no_unhappy");
mAnimMap[ANIM_AGENT_NYAH_NYAH]= mAnimStringTable.addString("nyanya");
mAnimMap[ANIM_AGENT_ONETWO_PUNCH]= mAnimStringTable.addString("punch_onetwo");
mAnimMap[ANIM_AGENT_PEACE]= mAnimStringTable.addString("peace");
mAnimMap[ANIM_AGENT_POINT_ME]= mAnimStringTable.addString("point_me");
mAnimMap[ANIM_AGENT_POINT_YOU]= mAnimStringTable.addString("point_you");
mAnimMap[ANIM_AGENT_PRE_JUMP]= mAnimStringTable.addString("prejump");
mAnimMap[ANIM_AGENT_PUNCH_LEFT]= mAnimStringTable.addString("punch_l");
mAnimMap[ANIM_AGENT_PUNCH_RIGHT]= mAnimStringTable.addString("punch_r");
mAnimMap[ANIM_AGENT_REPULSED]= mAnimStringTable.addString("express_repulsed");
mAnimMap[ANIM_AGENT_ROUNDHOUSE_KICK]= mAnimStringTable.addString("kick_roundhouse_r");
mAnimMap[ANIM_AGENT_RPS_COUNTDOWN]= mAnimStringTable.addString("rps_countdown");
mAnimMap[ANIM_AGENT_RPS_PAPER]= mAnimStringTable.addString("rps_paper");
mAnimMap[ANIM_AGENT_RPS_ROCK]= mAnimStringTable.addString("rps_rock");
mAnimMap[ANIM_AGENT_RPS_SCISSORS]= mAnimStringTable.addString("rps_scissors");
mAnimMap[ANIM_AGENT_RUN]= mAnimStringTable.addString("run");
mAnimMap[ANIM_AGENT_SAD]= mAnimStringTable.addString("express_sad");
mAnimMap[ANIM_AGENT_SALUTE]= mAnimStringTable.addString("salute");
mAnimMap[ANIM_AGENT_SHOOT_BOW_L]= mAnimStringTable.addString("shoot_l_bow");
mAnimMap[ANIM_AGENT_SHOUT]= mAnimStringTable.addString("shout");
mAnimMap[ANIM_AGENT_SHRUG]= mAnimStringTable.addString("express_shrug");
mAnimMap[ANIM_AGENT_SIT]= mAnimStringTable.addString("sit");
mAnimMap[ANIM_AGENT_SIT_FEMALE]= mAnimStringTable.addString("sit_female");
mAnimMap[ANIM_AGENT_SIT_GROUND]= mAnimStringTable.addString("sit_ground");
mAnimMap[ANIM_AGENT_SIT_GROUND_CONSTRAINED]= mAnimStringTable.addString("sit_ground_constrained");
mAnimMap[ANIM_AGENT_SIT_GENERIC]= mAnimStringTable.addString("sit_generic");
mAnimMap[ANIM_AGENT_SIT_TO_STAND]= mAnimStringTable.addString("sit_to_stand");
mAnimMap[ANIM_AGENT_SLEEP]= mAnimStringTable.addString("sleep");
mAnimMap[ANIM_AGENT_SMOKE_IDLE]= mAnimStringTable.addString("smoke_idle");
mAnimMap[ANIM_AGENT_SMOKE_INHALE]= mAnimStringTable.addString("smoke_inhale");
mAnimMap[ANIM_AGENT_SMOKE_THROW_DOWN]= mAnimStringTable.addString("smoke_throw_down");
mAnimMap[ANIM_AGENT_SNAPSHOT]= mAnimStringTable.addString("snapshot");
mAnimMap[ANIM_AGENT_STAND]= mAnimStringTable.addString("stand");
mAnimMap[ANIM_AGENT_STANDUP]= mAnimStringTable.addString("standup");
mAnimMap[ANIM_AGENT_STAND_1]= mAnimStringTable.addString("stand_1");
mAnimMap[ANIM_AGENT_STAND_2]= mAnimStringTable.addString("stand_2");
mAnimMap[ANIM_AGENT_STAND_3]= mAnimStringTable.addString("stand_3");
mAnimMap[ANIM_AGENT_STAND_4]= mAnimStringTable.addString("stand_4");
mAnimMap[ANIM_AGENT_STRETCH]= mAnimStringTable.addString("stretch");
mAnimMap[ANIM_AGENT_STRIDE]= mAnimStringTable.addString("stride");
mAnimMap[ANIM_AGENT_SURF]= mAnimStringTable.addString("surf");
mAnimMap[ANIM_AGENT_SURPRISE]= mAnimStringTable.addString("express_surprise");
mAnimMap[ANIM_AGENT_SWORD_STRIKE]= mAnimStringTable.addString("sword_strike_r");
mAnimMap[ANIM_AGENT_TALK]= mAnimStringTable.addString("talk");
mAnimMap[ANIM_AGENT_TANTRUM]= mAnimStringTable.addString("angry_tantrum");
mAnimMap[ANIM_AGENT_THROW_R]= mAnimStringTable.addString("throw_r");
mAnimMap[ANIM_AGENT_TRYON_SHIRT]= mAnimStringTable.addString("tryon_shirt");
mAnimMap[ANIM_AGENT_TURNLEFT]= mAnimStringTable.addString("turnleft");
mAnimMap[ANIM_AGENT_TURNRIGHT]= mAnimStringTable.addString("turnright");
mAnimMap[ANIM_AGENT_TYPE]= mAnimStringTable.addString("type");
mAnimMap[ANIM_AGENT_WALK]= mAnimStringTable.addString("walk");
mAnimMap[ANIM_AGENT_WHISPER]= mAnimStringTable.addString("whisper");
mAnimMap[ANIM_AGENT_WHISTLE]= mAnimStringTable.addString("whistle");
mAnimMap[ANIM_AGENT_WINK]= mAnimStringTable.addString("express_wink");
mAnimMap[ANIM_AGENT_WINK_HOLLYWOOD]= mAnimStringTable.addString("wink_hollywood");
mAnimMap[ANIM_AGENT_WORRY]= mAnimStringTable.addString("express_worry");
mAnimMap[ANIM_AGENT_YES]= mAnimStringTable.addString("yes_head");
mAnimMap[ANIM_AGENT_YES_HAPPY]= mAnimStringTable.addString("yes_happy");
mAnimMap[ANIM_AGENT_YOGA_FLOAT]= mAnimStringTable.addString("yoga_float");
}
//-----------------------------------------------------------------------------
// ~LLAnimationLibrary()
//-----------------------------------------------------------------------------
LLAnimationLibrary::~LLAnimationLibrary()
{
}
//-----------------------------------------------------------------------------
// Return the text name of an animation state
//-----------------------------------------------------------------------------
const char *LLAnimationLibrary::animStateToString( const LLUUID& state )
{
if (state.isNull())
{
return NULL;
}
if (mAnimMap.count(state))
{
return mAnimMap[state];
}
return NULL;
}
//-----------------------------------------------------------------------------
// Return the animation state for a given name
//-----------------------------------------------------------------------------
LLUUID LLAnimationLibrary::stringToAnimState( const std::string& name, BOOL allow_ids )
{
std::string lower_case_name(name);
LLStringUtil::toLower(lower_case_name);
char *true_name = mAnimStringTable.checkString(lower_case_name.c_str());
LLUUID id;
id.setNull();
if (true_name)
{
for (anim_map_t::iterator iter = mAnimMap.begin();
iter != mAnimMap.end(); iter++)
{
if (iter->second == true_name)
{
id = iter->first;
break;
}
}
}
else if (allow_ids)
{
// try to convert string to LLUUID
id.set(name, FALSE);
}
return id;
}
// Animation states that the user can trigger as part of a gesture
// See struct LLAnimStateEntry in header for label location information
const LLAnimStateEntry gUserAnimStates[] = {
LLAnimStateEntry("express_afraid", ANIM_AGENT_AFRAID),
LLAnimStateEntry("express_anger", ANIM_AGENT_ANGRY),
LLAnimStateEntry("away", ANIM_AGENT_AWAY),
LLAnimStateEntry("backflip", ANIM_AGENT_BACKFLIP),
LLAnimStateEntry("express_laugh", ANIM_AGENT_BELLY_LAUGH),
LLAnimStateEntry("express_toothsmile", ANIM_AGENT_EXPRESS_TOOTHSMILE),
LLAnimStateEntry("blowkiss", ANIM_AGENT_BLOW_KISS),
LLAnimStateEntry("express_bored", ANIM_AGENT_BORED),
LLAnimStateEntry("bow", ANIM_AGENT_BOW),
LLAnimStateEntry("clap", ANIM_AGENT_CLAP),
LLAnimStateEntry("courtbow", ANIM_AGENT_COURTBOW),
LLAnimStateEntry("express_cry", ANIM_AGENT_CRY),
LLAnimStateEntry("dance1", ANIM_AGENT_DANCE1),
LLAnimStateEntry("dance2", ANIM_AGENT_DANCE2),
LLAnimStateEntry("dance3", ANIM_AGENT_DANCE3),
LLAnimStateEntry("dance4", ANIM_AGENT_DANCE4),
LLAnimStateEntry("dance5", ANIM_AGENT_DANCE5),
LLAnimStateEntry("dance6", ANIM_AGENT_DANCE6),
LLAnimStateEntry("dance7", ANIM_AGENT_DANCE7),
LLAnimStateEntry("dance8", ANIM_AGENT_DANCE8),
LLAnimStateEntry("express_disdain", ANIM_AGENT_EXPRESS_DISDAIN),
LLAnimStateEntry("drink", ANIM_AGENT_DRINK),
LLAnimStateEntry("express_embarrased", ANIM_AGENT_EMBARRASSED),
LLAnimStateEntry("angry_fingerwag", ANIM_AGENT_FINGER_WAG),
LLAnimStateEntry("fist_pump", ANIM_AGENT_FIST_PUMP),
LLAnimStateEntry("yoga_float", ANIM_AGENT_YOGA_FLOAT),
LLAnimStateEntry("express_frown", ANIM_AGENT_EXPRESS_FROWN),
LLAnimStateEntry("impatient", ANIM_AGENT_IMPATIENT),
LLAnimStateEntry("jumpforjoy", ANIM_AGENT_JUMP_FOR_JOY),
LLAnimStateEntry("kissmybutt", ANIM_AGENT_KISS_MY_BUTT),
LLAnimStateEntry("express_kiss", ANIM_AGENT_EXPRESS_KISS),
LLAnimStateEntry("laugh_short", ANIM_AGENT_LAUGH_SHORT),
LLAnimStateEntry("musclebeach", ANIM_AGENT_MUSCLE_BEACH),
LLAnimStateEntry("no_unhappy", ANIM_AGENT_NO_UNHAPPY),
LLAnimStateEntry("no_head", ANIM_AGENT_NO),
LLAnimStateEntry("nyanya", ANIM_AGENT_NYAH_NYAH),
LLAnimStateEntry("punch_onetwo", ANIM_AGENT_ONETWO_PUNCH),
LLAnimStateEntry("express_open_mouth", ANIM_AGENT_EXPRESS_OPEN_MOUTH),
LLAnimStateEntry("peace", ANIM_AGENT_PEACE),
LLAnimStateEntry("point_you", ANIM_AGENT_POINT_YOU),
LLAnimStateEntry("point_me", ANIM_AGENT_POINT_ME),
LLAnimStateEntry("punch_l", ANIM_AGENT_PUNCH_LEFT),
LLAnimStateEntry("punch_r", ANIM_AGENT_PUNCH_RIGHT),
LLAnimStateEntry("rps_countdown", ANIM_AGENT_RPS_COUNTDOWN),
LLAnimStateEntry("rps_paper", ANIM_AGENT_RPS_PAPER),
LLAnimStateEntry("rps_rock", ANIM_AGENT_RPS_ROCK),
LLAnimStateEntry("rps_scissors", ANIM_AGENT_RPS_SCISSORS),
LLAnimStateEntry("express_repulsed", ANIM_AGENT_EXPRESS_REPULSED),
LLAnimStateEntry("kick_roundhouse_r", ANIM_AGENT_ROUNDHOUSE_KICK),
LLAnimStateEntry("express_sad", ANIM_AGENT_SAD),
LLAnimStateEntry("salute", ANIM_AGENT_SALUTE),
LLAnimStateEntry("shout", ANIM_AGENT_SHOUT),
LLAnimStateEntry("express_shrug", ANIM_AGENT_SHRUG),
LLAnimStateEntry("express_smile", ANIM_AGENT_EXPRESS_SMILE),
LLAnimStateEntry("smoke_idle", ANIM_AGENT_SMOKE_IDLE),
LLAnimStateEntry("smoke_inhale", ANIM_AGENT_SMOKE_INHALE),
LLAnimStateEntry("smoke_throw_down", ANIM_AGENT_SMOKE_THROW_DOWN),
LLAnimStateEntry("express_surprise", ANIM_AGENT_SURPRISE),
LLAnimStateEntry("sword_strike_r", ANIM_AGENT_SWORD_STRIKE),
LLAnimStateEntry("angry_tantrum", ANIM_AGENT_TANTRUM),
LLAnimStateEntry("express_tongue_out", ANIM_AGENT_EXPRESS_TONGUE_OUT),
LLAnimStateEntry("hello", ANIM_AGENT_HELLO),
LLAnimStateEntry("whisper", ANIM_AGENT_WHISPER),
LLAnimStateEntry("whistle", ANIM_AGENT_WHISTLE),
LLAnimStateEntry("express_wink", ANIM_AGENT_WINK),
LLAnimStateEntry("wink_hollywood", ANIM_AGENT_WINK_HOLLYWOOD),
LLAnimStateEntry("express_worry", ANIM_AGENT_EXPRESS_WORRY),
LLAnimStateEntry("yes_happy", ANIM_AGENT_YES_HAPPY),
LLAnimStateEntry("yes_head", ANIM_AGENT_YES),
};
const S32 gUserAnimStatesCount = LL_ARRAY_SIZE(gUserAnimStates);
// End