示例#1
0
bool Animation::reset(AnimState &state, const NifOgre::TextKeyMap &keys, const std::string &groupname, const std::string &start, const std::string &stop, float startpoint)
{
    const NifOgre::TextKeyMap::const_iterator groupstart = findGroupStart(keys, groupname);

    std::string starttag = groupname+": "+start;
    NifOgre::TextKeyMap::const_iterator startkey(groupstart);
    while(startkey != keys.end() && startkey->second != starttag)
        startkey++;
    if(startkey == keys.end() && start == "loop start")
    {
        starttag = groupname+": start";
        startkey = groupstart;
        while(startkey != keys.end() && startkey->second != starttag)
            startkey++;
    }
    if(startkey == keys.end())
        return false;

    const std::string stoptag = groupname+": "+stop;
    NifOgre::TextKeyMap::const_iterator stopkey(groupstart);
    while(stopkey != keys.end()
          // We have to ignore extra garbage at the end.
          // The Scrib's idle3 animation has "Idle3: Stop." instead of "Idle3: Stop".
          // Why, just why? :(
          && (stopkey->second.size() < stoptag.size() || stopkey->second.substr(0,stoptag.size()) != stoptag))
        stopkey++;
    if(stopkey == keys.end())
        return false;

    if(startkey->first > stopkey->first)
        return false;

    state.mStartTime = startkey->first;
    state.mLoopStartTime = startkey->first;
    state.mLoopStopTime = stopkey->first;
    state.mStopTime = stopkey->first;

    state.mTime = state.mStartTime + ((state.mStopTime - state.mStartTime) * startpoint);
    if(state.mTime > state.mStartTime)
    {
        const std::string loopstarttag = groupname+": loop start";
        const std::string loopstoptag = groupname+": loop stop";
        NifOgre::TextKeyMap::const_iterator key(groupstart);
        while(key->first <= state.mTime && key != stopkey)
        {
            if(key->second == loopstarttag)
                state.mLoopStartTime = key->first;
            else if(key->second == loopstoptag)
                state.mLoopStopTime = key->first;
            key++;
        }
    }

    return true;
}
示例#2
0
文件: time.c 项目: xquiet/sdlbasic
//waitTime(t)								: wait t milliseconds
int waitTime(int t)
{
	 Uint32 ticks;
	ticks=SDL_GetTicks()+t;
	while(ticks>SDL_GetTicks()){
		SDL_Delay(5);
		getevent();
		if (stopkey()==-1)return -1;
	if (autotimer()!=0)return -1;
	}
	return 0;
}