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);
		}
	}
예제 #2
0
void InterpolateComponent::OnRemove()
{
	SetEndValue();
	EntityComponent::OnRemove();
}
예제 #3
0
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));
	}

}
예제 #4
0
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;
}