示例#1
0
文件: XOrder.cpp 项目: xahgo/tama
void XOrderIndicate::OnCreate()
{
	// 터치를 허용하는 윈도우들의 목록처리
	if( m_spProp->m_aryIdsAllow.size() > 0 ) {
		for( auto& idsAllow : m_spProp->m_aryIdsAllow ) {
			if( !idsAllow.empty() ) {
				GAME->SetActive( true );
				GAME->AddidsAllowWnd( idsAllow );
				CreateIndicator( idsAllow );
			}
		}
	}
	if( m_spProp->m_aryIdsTarget.size() ) {
		// 타겟리스트가 있을때
		bool bFound = false;
		for( auto& idsTarget : m_spProp->m_aryIdsTarget ) {
			if( !idsTarget.empty() ) {
				// 각타겟에 인디케이터를 생성한다.
				bFound = CreateIndicator();
			} else {
				CONSOLE( "%s:ids_target(%s)찾을수 없음.", __TFUNC__, C2SZ(idsTarget) );
			}
		}
		if( !bFound )
			m_timerSec.Set( 1.f );	// 1초에 한번씩 재검색하기 위해
		// 아직 창이 안떳다든가 하는이유로 타겟팅에 실패하면 process에서 다시 찾는다.
		if( m_spProp->m_typeEnd == xFIN_PUSH_TARGET ) {
			GAME->SetActive( true );	// 입력을 모두 풀고
			GAME->AddidsAllowWnd( m_spProp->m_aryIdsTarget );
		}
	} else {
		// end조건이 order_complete이면 좌표가 반드시 있어야 한다.(뭔가 이상하군)
		XBREAK( m_spProp->m_typeEnd != xFIN_ORDER_COMPLETE && m_spProp->m_vPos.IsZero() );
		if( m_spProp->m_secLife > 0 ) {
			m_timerFinish.Set( m_spProp->m_secLife );
		} else {
// 			if( m_spProp->m_aryIdsTarget.size() == 0 )
// 				m_timerFinish.Set( 10.f );	// 타겟이 없는 화살표는 10초후에 자동으로 종료된다.
		}
		if( m_spProp->m_idsRoot.empty() )
			CreateSpr( m_spProp->m_vPos, GAME->GetpScene(), XE::VEC2(0) );
		else {
			XWnd *pRoot = GAME->Find( m_spProp->m_idsRoot );
			if( XASSERT( pRoot ) ) {
				CreateSpr( pRoot, m_spProp->m_idsRoot );
			}
// 				CreateSpr( m_spProp->m_vPos, pRoot, std::string() );
		}
	}
	if( m_spProp->m_typeEnd == xFIN_ORDER_COMPLETE ) {
		GAME->SetActive( true );
	}
}
示例#2
0
文件: XOrder.cpp 项目: xahgo/tama
void XOrderIndicate::Process( float dt )
{
	if( m_timerSec.IsOver() ) {
		if( CreateIndicator() == false ) {
			if( ++m_numFailed >= 3 )
				SetbEnd( true );	// 타겟을 3초간 못찾으면 그냥 끝냄.
		}
		m_timerSec.Reset();
	}
	// 시간되면 자동 종료
	if( m_timerFinish.IsOver() ) {
		// 이 인디케이터가 다른 order의 end가 종료시점일때
		if( GetspProp()->m_typeEnd == xFIN_END_ORDER ) {
			auto spOrderProp = m_spPropSeq->GetspOrderProp( GetspProp()->m_idsEnd );
			if( XASSERT(spOrderProp) ) {
				// 그 다른 order가 touch방식이 아닐때만 자동 사라짐.
				if( spOrderProp->m_typeEnd != xFIN_TOUCH ) {
					CONSOLE("XOrderIndicate::Process:시간초과로 자동 종료됨.");
					SetbEnd( true );
					m_timerFinish.Off();
				} else {
					m_timerFinish.Off();		// 더이상 검사하지 않도록.
				}
			}
		} else
		if( GetspProp()->m_typeEnd == xFIN_DELAY ) {
			m_timerFinish.Off();
			SetbEnd( true );
		}
	}
}
示例#3
0
// Create controls on dialog box
// Four colums of 32 button-controls
// For each button dispaly Button number and an edit box
// The edit box will accept channel number (1-24)
void SppBtnsDlg::CreateControls(UINT nButtons)
{
	// Set the upper-left corner as starting point
	POINT OrigPt;
	OrigPt.x = OrigPt.y = 10;

	for (UINT i=1; i<=nButtons; i++)
	{
		CreateButtonLable(i);
		CreateChannelEdit(i);
		CreateIndicator(i);
	};
}
示例#4
0
文件: XOrder.cpp 项目: xahgo/tama
bool XOrderIndicate::CreateIndicator()
{
	if( m_bTargeted )
		return true;
	int numFounds = 0;
	bool bOk = false;
	XBREAK( m_spProp->m_aryIdsTarget.size() == 0 );
	for( auto& idsTarget : m_spProp->m_aryIdsTarget ) {
		bool bOk = CreateIndicator( idsTarget );
		if( bOk ) {
			++numFounds;
		}
	}
	// 리스트에있는 모든 윈도우를 다 찾았을경우면 true한다. 누락되면 계속 찾기를 시도한다.
	if( m_spProp->m_aryIdsTarget.size() == numFounds ) {
		m_bTargeted = true;
	}
	return bOk;
}