void EventComponent::AddEvent(shared_ptr<Event> event) { if (event->GetEventType() != EVT_MOVE) mEventList[event->GetEventType()].push_back(event); else // Unpack move events. { auto mov = static_pointer_cast<MoveEvent>(event); auto mxe = make_shared<MoveXEvent>(); auto mye = make_shared<MoveYEvent>(); mxe->SetTime(event->GetTime()); mye->SetTime(event->GetTime()); mxe->SetEndTime(event->GetEndTime()); mye->SetEndTime(event->GetEndTime()); mxe->SetValue(mov->GetValue().x); mye->SetValue(mov->GetValue().y); mxe->SetEndValue(mov->GetEndValue().x); mye->SetEndValue(mov->GetEndValue().y); mEventList[mxe->GetEventType()].push_back(mxe); mEventList[mye->GetEventType()].push_back(mye); } }
void InterpolateComponent::OnRemove() { SetEndValue(); EntityComponent::OnRemove(); }
void InterpolateComponent::OnUpdate(VariantList *pVList) { if (m_bActive && m_pVar && m_pVar->GetType() != Variant::TYPE_UNUSED && m_pVarTarget->GetType() != Variant::TYPE_UNUSED) { Variant *pA; Variant *pB; if (m_bDirForward) { pA = &m_pVarStartPoint; pB = m_pVarTarget; } else { pB = &m_pVarStartPoint; pA = m_pVarTarget; } float fPercentDone = (float(GetBaseApp()->GetTickTimingSystem(eTimingSystem(*m_pTimingSystem))-m_startTimeMS)/ float(*m_pDuration)); //LogMsg("%.2f percent done changing %s (is now %s)", fPercentDone, m_pVarName->c_str(), m_pVar->Print().c_str()); if ( fPercentDone >= 1) { //we're finished m_pVar->Set(*pB); switch (*m_pOnFinish) { case ON_FINISH_STOP: m_bActive = false; SetEndValue(); return; break; case ON_FINISH_DIE: m_bActive = false; //we're done, kill ourself GetParent()->RemoveComponentByAddress(this); return; break; case ON_FINISH_BOUNCE: m_bDirForward = !m_bDirForward; m_startTimeMS = GetBaseApp()->GetTickTimingSystem(eTimingSystem(*m_pTimingSystem)); break; case ON_FINISH_REPEAT: m_startTimeMS = GetBaseApp()->GetTickTimingSystem(eTimingSystem(*m_pTimingSystem)); m_pVar->Set(m_pVarStartPoint); break; default: LogError("Unknown OnFinish type"); assert(0); } (*m_pPlayCount)++; return; } if (*m_pDeleteAfterPlayCount != 0 && *m_pPlayCount >= *m_pDeleteAfterPlayCount) { m_bActive = false; //we're done, kill ourself GetParent()->RemoveComponentByAddress(this); return; } //set var where it should be on the scale m_pVar->Interpolate(pA, pB, fPercentDone, eInterpolateType(*m_pInterpolateType)); } }
bool TabBox::SelectItem(int iIndex) { if( iIndex < 0 || (std::size_t)iIndex >= m_items.size() ) return false; if( iIndex == m_iCurSel ) return true; int iOldSel = m_iCurSel; m_iCurSel = iIndex; for( std::size_t it = 0; it < m_items.size(); it++ ){ if( (int)it == iIndex ) { ShowTabItem(it); if (!IsFadeSwitch()) { m_items[it]->SetVisible(); } else { int startValue = 0; int endValue = 0; if (m_iCurSel < iOldSel) { startValue = GetPos().GetWidth(); endValue = 0; } else { startValue = -GetPos().GetWidth(); endValue = 0; } auto player = m_items[it]->GetAnimationManager().SetFadeInOutX(true, true); player->SetStartValue(startValue); player->SetEndValue(endValue); player->SetSpeedUpfactorA(0.015); player->SetCompleteCallback(CompleteCallback()); player->Start(); } } else { if ((int)it != iOldSel) { HideTabItem(it); if (!IsFadeSwitch()) { m_items[it]->SetVisible(false); } } else { if (!IsFadeSwitch()) { HideTabItem(it); m_items[it]->SetVisible(false); } else { int startValue = 0; int endValue = 0; if (m_iCurSel < iOldSel) { startValue = 0; endValue = -GetPos().GetWidth(); } else { startValue = 0; endValue = GetPos().GetWidth(); } auto player = m_items[it]->GetAnimationManager().SetFadeInOutX(true, true); player->SetStartValue(startValue); player->SetEndValue(endValue); player->SetSpeedUpfactorA(0.015); CompleteCallback compelteCallback = nbase::Bind(&TabBox::HideTabItem, this, it); player->SetCompleteCallback(compelteCallback); player->Start(); } } } } if( m_pWindow != NULL ) { m_pWindow->SendNotify(this, kEventSelect, m_iCurSel, iOldSel); } return true; }