Animation switchover to swimming when avatar goes under water.
parent
86e5e7ab91
commit
03b24043f7
|
|
@ -55,6 +55,7 @@ AOEngine::AOEngine() :
|
|||
mDefaultSet(0),
|
||||
mEnabled(FALSE),
|
||||
mInMouselook(FALSE),
|
||||
mUnderWater(FALSE),
|
||||
mImportSet(0),
|
||||
mImportCategory(LLUUID::null),
|
||||
mAOFolder(LLUUID::null),
|
||||
|
|
@ -133,6 +134,37 @@ BOOL AOEngine::foreignAnimations()
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
LLUUID AOEngine::mapSwimming(LLUUID motion)
|
||||
{
|
||||
S32 stateNum;
|
||||
llwarns << __LINE__ << llendl;
|
||||
if(motion==ANIM_AGENT_HOVER)
|
||||
stateNum=AOSet::Floating;
|
||||
else if(motion==ANIM_AGENT_FLY)
|
||||
stateNum=AOSet::SwimmingForward;
|
||||
else if(motion==ANIM_AGENT_HOVER_UP)
|
||||
stateNum=AOSet::SwimmingUp;
|
||||
else if(motion==ANIM_AGENT_HOVER_DOWN)
|
||||
stateNum=AOSet::SwimmingDown;
|
||||
else
|
||||
return LLUUID::null;
|
||||
llwarns << __LINE__ << " " << stateNum << llendl;
|
||||
|
||||
AOSet::AOState* state=mCurrentSet->getState(stateNum);
|
||||
llwarns << __LINE__ << " " << state->mName << llendl;
|
||||
return mCurrentSet->getAnimationForState(state);
|
||||
}
|
||||
|
||||
void AOEngine::checkBelowWater(BOOL yes)
|
||||
{
|
||||
if(mUnderWater==yes)
|
||||
return;
|
||||
|
||||
gAgent.sendAnimationRequest(override(mLastOverriddenMotion,FALSE),ANIM_REQUEST_STOP);
|
||||
mUnderWater=yes;
|
||||
gAgent.sendAnimationRequest(override(mLastOverriddenMotion,TRUE),ANIM_REQUEST_START);
|
||||
}
|
||||
|
||||
void AOEngine::enable(BOOL yes)
|
||||
{
|
||||
lldebugs << "using " << mLastMotion << " enable " << yes << llendl;
|
||||
|
|
@ -297,7 +329,13 @@ const LLUUID AOEngine::override(const LLUUID pMotion,BOOL start)
|
|||
if(motion!=ANIM_AGENT_TYPE)
|
||||
mCurrentSet->setMotion(motion);
|
||||
|
||||
animation=mCurrentSet->getAnimationForState(state);
|
||||
mUnderWater=gAgentAvatarp->mBelowWater;
|
||||
if(mUnderWater)
|
||||
animation=mapSwimming(motion);
|
||||
|
||||
if(animation.isNull())
|
||||
animation=mCurrentSet->getAnimationForState(state);
|
||||
|
||||
state->mCurrentAnimationID=animation;
|
||||
lldebugs << "overriding " << gAnimLibrary.animStateToString(motion)
|
||||
<< " with " << animation
|
||||
|
|
|
|||
|
|
@ -111,6 +111,7 @@ class AOEngine
|
|||
BOOL addAnimation(const AOSet* set,AOSet::AOState* state,const LLInventoryItem* item,BOOL reload=TRUE);
|
||||
BOOL removeAnimation(const AOSet* set,AOSet::AOState* state,S32 index);
|
||||
void checkSitCancel();
|
||||
void checkBelowWater(BOOL yes);
|
||||
|
||||
BOOL importNotecard(const LLInventoryItem* item);
|
||||
void processImport();
|
||||
|
|
@ -156,6 +157,7 @@ class AOEngine
|
|||
void stopAllSitVariants();
|
||||
|
||||
BOOL foreignAnimations();
|
||||
LLUUID mapSwimming(LLUUID motion);
|
||||
|
||||
void updateSortOrder(AOSet::AOState* state);
|
||||
void saveSet(const AOSet* set);
|
||||
|
|
@ -175,9 +177,12 @@ class AOEngine
|
|||
|
||||
BOOL mEnabled;
|
||||
BOOL mInMouselook;
|
||||
BOOL mUnderWater;
|
||||
|
||||
LLUUID mAOFolder;
|
||||
LLUUID mLastMotion;
|
||||
LLUUID mLastOverriddenMotion;
|
||||
|
||||
std::vector<AOSet*> mSets;
|
||||
AOSet* mCurrentSet;
|
||||
AOSet* mDefaultSet;
|
||||
|
|
|
|||
|
|
@ -3296,7 +3296,12 @@ void LLVOAvatar::idleUpdateBelowWater()
|
|||
F32 water_height;
|
||||
water_height = getRegion()->getWaterHeight();
|
||||
|
||||
BOOL wasBelowWater = mBelowWater; // ## Zi: Animation Overrider
|
||||
mBelowWater = avatar_height < water_height;
|
||||
// ## Zi: Animation Overrider
|
||||
if (wasBelowWater != mBelowWater)
|
||||
AOEngine::instance().checkBelowWater(mBelowWater);
|
||||
// ## Zi: Animation Overrider
|
||||
}
|
||||
|
||||
void LLVOAvatar::slamPosition()
|
||||
|
|
|
|||
Loading…
Reference in New Issue