Add AnimState::shouldLoop()

This commit is contained in:
scrawl 2016-08-22 22:58:24 +02:00
parent 6450c9be27
commit 0c9882956a
2 changed files with 18 additions and 19 deletions

View file

@ -1023,7 +1023,7 @@ namespace MWRender
{ {
float targetTime; float targetTime;
if (state.getTime() < state.mLoopStopTime || state.mLoopCount == 0) if (!state.shouldLoop())
{ {
targetTime = state.getTime() + timepassed; targetTime = state.getTime() + timepassed;
if(textkey == textkeys.end() || textkey->first > targetTime) if(textkey == textkeys.end() || textkey->first > targetTime)
@ -1048,27 +1048,21 @@ namespace MWRender
++textkey; ++textkey;
} }
} }
if(state.shouldLoop())
if(state.getTime() >= state.mLoopStopTime)
{ {
if (!state.mLoopingEnabled) state.mLoopCount--;
state.mLoopCount = 0; state.setTime(state.mLoopStartTime);
else if (state.mLoopCount > 0) state.mPlaying = true;
textkey = textkeys.lower_bound(state.getTime());
while(textkey != textkeys.end() && textkey->first <= state.getTime())
{ {
state.mLoopCount--; handleTextKey(state, stateiter->first, textkey, textkeys);
state.setTime(state.mLoopStartTime); ++textkey;
state.mPlaying = true;
textkey = textkeys.lower_bound(state.getTime());
while(textkey != textkeys.end() && textkey->first <= state.getTime())
{
handleTextKey(state, stateiter->first, textkey, textkeys);
++textkey;
}
if(state.getTime() >= state.mLoopStopTime)
break;
} }
if(state.getTime() >= state.mLoopStopTime)
break;
} }
if(timepassed <= 0.0f) if(timepassed <= 0.0f)

View file

@ -205,6 +205,11 @@ protected:
{ {
*mTime = time; *mTime = time;
} }
bool shouldLoop() const
{
return getTime() >= mLoopStopTime && mLoopingEnabled && mLoopCount > 0;
}
}; };
typedef std::map<std::string,AnimState> AnimStateMap; typedef std::map<std::string,AnimState> AnimStateMap;
AnimStateMap mStates; AnimStateMap mStates;