void AnimationScheduler::update(double time) { for(auto& pair : mAnimationGroups) { for(auto& anim : pair.second.mAnimations) { AnimationQueue& queue = mAnimationQueues[anim.first]; if(!anim.second.getEnabled() && !isQueued(anim.first, anim.second)) continue; anim.second.update(time); if(anim.second.isEnding() || anim.second.hasEnded()) { if(!isQueued(anim.first, anim.second)) continue; // ended limited animation, remove from queue queue.pop(); if(!queue.empty()) { queue.front().start(); } else if(!mCurrentAnimation.empty()) { play(mCurrentAnimation); } } } } }
void RuntimeStateMachine::postEvent( Object* a_pObject, Event* a_pEvent ) { o_error(false, "not implemented"); if(NOT(isQueued(a_pObject, a_pEvent))) { //if(a_pObject->testNativeFlags(eNativeFlag_UpdatingStateMachine)) { int32& ptr = *reinterpret_cast<int32*>(reinterpret_cast<byte*>(a_pObject)+m_uiEventQueuePointerOffset); o_assert(ptr < eEventQueueSize); (*reinterpret_cast<Event***>(reinterpret_cast<byte*>(a_pObject)+m_uiEventQueueOffset))[++ptr] = a_pEvent; } //else { dispatchEvent(a_pObject, a_pEvent); static_cast<RuntimeTrack*>(m_Tracks[0])->solveTransitions(a_pObject); } } }