예제 #1
0
/**
 다운로드를 시작하라       
*/
void XDownloadTask::Go( void )
{
	XTRACE("XDownloadTask Go! listReq.size=%d", m_listReq.size());
	if( XBREAK( m_listReq.size() == 0 ) )	{
		XTRACE("error go");
		CallEventHandler( XWM_ERROR_DOWNLOAD, (DWORD) XDownloader::xERR_INVALID_REQUEST );
		ClearEvent( XWM_ERROR_DOWNLOAD );
		return;
	}
	m_bGo = TRUE;
	m_bComplete = FALSE;
	m_bCallbackAll = FALSE;
// 	m_itor = m_listReq.GetNextClear2();
	m_itor = m_listReq.begin();
// 	m_idxCurrDownload = 0;
	m_Error = 0;
//	m_pDownloader->
	
}
예제 #2
0
파일: XWndEdit.cpp 프로젝트: xahgo/tama
// LButtonDown이벤트로 하지 말것. 멀티터치관련해서 버그가 있어서 잘못된 좌표가 넘어온다
void XWndEdit::OnLButtonUp( float lx, float ly )
{    
	m_strTextOld = m_szString;
#ifdef WIN32
	if( XE::GetMain()->DoEditBox( m_szString ) ) {
		SetbUpdate( true );
		CallEventHandler( XWM_ENTER, (DWORD)m_szString );
		if( m_pDelegate )
			m_pDelegate->OnDelegateEnterEditBox( this, m_szString, m_strTextOld );
	}
/*
#ifndef _LIB
	// 라이브러리에 포함시키기가 애매함. 방법이 없나? 일단 델리게이트 형태로 위임시키는 형태로 하자.
	CDlgEnterName dlg;		// 이거 CIV전용이니까 일반화 시킬것
	if( dlg.DoModal() == IDOK )
	{
		_tcscpy_s( m_szString, dlg.m_strName );
		CallEventHandler( XWM_ENTER, (DWORD)m_szString );
	}
#endif
*/
#endif
#ifdef _VER_IOS
    XE::VEC2 vPos = GetPosFinal();
    XE::VEC2 vSize = GetSizeFinal();
    IOS::DoEditBox( vPos.x+4.f, vPos.y+4.f, vSize.w-8.f, vSize.h-8.f, this );	// iOS의 EditBox를 띄운다
#endif
#ifdef _VER_ANDROID
    showEditTextDialogJNI(  "Name:",
						  m_szString,
						  kEditBoxInputModeSingleLine,
						  -1,
						  kKeyboardReturnTypeDone,
						  100,
						  editBoxCallbackFunc,
						  (void*)this  );
#endif
}
예제 #3
0
파일: XESceneSlide.cpp 프로젝트: xahgo/tama
int XESceneSlide::Process( float dt ) 
{ 
	if( m_Trans == xTR_RIGHT )
	{
		float lerpTime = m_timerTrans.GetSlerp();
		if( lerpTime > 1.0f )
			lerpTime = 1.0f;
//		float lerp = XE::xiCatmullrom( lerpTime, -10.f, 0, 1.f, 1.f );
		float lerp = XE::xiHigherPowerDeAccel( lerpTime, 1.0f, 0 );
		if( m_pCurr )
		{
			float x = XE::GetGameWidth() * lerp; 
			m_pCurr->SetPosLocal( x, 0.f );
		}
		if( m_pNext )
		{
			float x = XE::GetGameWidth() * lerp; 
			m_pNext->SetPosLocal( -XE::GetGameWidth() + x, 0.f );
		}
		if( lerpTime == 1.0f )
		{
			m_Trans = xTR_NONE;
			XWnd::DestroyWnd( m_pCurr );		// 오른쪽으로 사라진 현재씬은 지우고
			m_pCurr = m_pNext;					// 현재씬을 새로운 씬으로 바꿈
//			m_pCurr->SetbActive( TRUE );
			GetWndTop()->SetbActive( TRUE );	// 입력을 다시 풀어줌.
			m_pNext = NULL;
			CallScriptTemplate<XESceneSlide*>( "OnFinishSlide", m_pCurr, m_pCurr->GetstrIdentifier().c_str() );
			OnFinishSlide();
			CallEventHandler( XWM_FINISH_SLIDE, m_idxScene );
		}
	} else
	if( m_Trans == xTR_LEFT )
	{
		float lerpTime = m_timerTrans.GetSlerp();
		if( lerpTime > 1.0f )
			lerpTime = 1.0f;
//		float lerp = XE::xiCatmullrom( lerpTime, -10.f, 0, 1.f, 1.f );
		float lerp = XE::xiHigherPowerDeAccel( lerpTime, 1.0f, 0 );
		if( m_pCurr )
		{
			float x = -XE::GetGameWidth() * lerp; 
			m_pCurr->SetPosLocal( x, 0.f );
		}
		if( m_pNext )
		{
			float x = XE::GetGameWidth() * (1.f - lerp); 
			m_pNext->SetPosLocal( x, 0.f );
		}
		if( lerpTime == 1.0f )
		{
			m_Trans = xTR_NONE;
			XWnd::DestroyWnd( m_pCurr );		// 왼쪽으로 사라진 현재씬은 지우고
			m_pCurr = m_pNext;					// 현재씬을 새로운 씬으로 바꿈
//			m_pCurr->SetbActive( TRUE );		// 슬라이딩이 끝나면 다시 풀어줌.
			GetWndTop()->SetbActive( TRUE );	// 입력을 다시 풀어줌.
			m_pNext = NULL;
			CallScriptTemplate<XESceneSlide*>( "OnFinishSlide", m_pCurr, m_pCurr->GetstrIdentifier().c_str() );
			OnFinishSlide();
			CallEventHandler( XWM_FINISH_SLIDE, m_idxScene );
		}
	}
	return XEBaseScene::Process( dt );
}
예제 #4
0
void CBaseTutor::OnEvent(GameEventType event, CBaseEntity *pEntity, CBaseEntity *pOther)
{
	CallEventHandler(event, pEntity, pOther);
	CheckForStateTransition(event, pEntity, pOther);
}
예제 #5
0
int XDownloadTask::Process( float dt )
{
	// 다운로드 시작
	if( m_bGo )	{
		// 다운로더가 다운받는 동작을 하고 있지 않을때
		if( m_pDownloader->GetbGo() == FALSE )		{
			if( m_itor != m_listReq.end() )			{
				// 다운로드 리스트에서 하나씩 꺼내서 요청
				xREQ_INFO info = *m_itor;
				std::string strURL = info.strSubPath;
				strURL += info.strURL;
				bool result = m_pDownloader->RequestFile( strURL.c_str(), info.strDstFullpath.c_str() );
				if( result )				{
				} else
					++m_Error;
			}
		} else	{
			auto& refTimer = m_pDownloader->GettimerTimeout();
			if( !m_pDownloader->IsDownloading() ) {
				// 요청은 했으나 다운로드가 시작이 안되고 있음.
				if( refTimer.IsOff() )
					refTimer.Set( 10.f );
				// 일정시간 지나도 응답이 없으면 에러 출력.
				if( refTimer.IsOver() ) {
					refTimer.Off();
					if( m_RiseError == 0 ) {
						m_RiseError = 1;
						CallEventHandler( XWM_ERROR_DOWNLOAD, (DWORD)XDownloader::xERR_NO_RESPONSE );
					}
				}
			} else {
				// 다운로드가 한번이라도 시작됐으면 타임아웃 타이머 꺼줌.(다운받다가 서버연결안되면 멈출수도 있음)
				refTimer.Off();
			}
			// 에러가 있었으나 방금 해결됨.
			if( m_RiseError ) {
				// 문제가 해결된걸 알려줘야 함. <= 어따쓰는거지 -_-?
				CallEventHandler( XWM_ERROR_DOWNLOAD, (DWORD)XDownloader::xOK );
				m_RiseError = 0;
			}
			// 파일 하나를 다 받음.
			if( m_pDownloader->GetbComplete() )	{
				m_lastInfo = *m_itor++;;
				if( m_lastInfo.strToRename.empty() == false )	{
					// 받은 파일을 리네임 시킴
					// 원래 파일 삭제
					XSYSTEM::RemoveFile( m_lastInfo.strToRename.c_str() );
					XSYSTEM::RenameFile( m_lastInfo.strDstFullpath, m_lastInfo.strToRename );
				}
				if( m_itor == m_listReq.end() ) {
					// 모든 파일을 다 다운받음.
					XTRACE("XDownloadTask: %d files download Complete", m_listReq.size() );
					m_bComplete = TRUE;
					m_bCallbackAll = FALSE;
					m_bGo = FALSE;
				} else {
					XTRACE("XDownloadTask each Complete.%s", C2SZ( m_lastInfo.strDstFullpath ) );
					XTRACE("-Next file:.%s", C2SZ( m_itor->strDstFullpath ) );
					CallEventHandler( XWM_EACH_COMPLETE, 0/*, (DWORD)(&reqInfo)*/ );
					// complete상태를 풀어줘서 Go 대기상태로 만듬.
					m_pDownloader->ClearComplete();
				}
			}
		}

	}
	if( m_Error )	{
		CallEventHandler( XWM_ERROR_DOWNLOAD, XDownloader::xERR_FAILED_REQUEST );
		m_Error = 0;
	}
	// 다운로드가 다 끝나고 콜백호출을 아직 안했으면 호출함.
	if( m_bComplete && m_bCallbackAll == FALSE )	{
		// 콜백호출까지 하면 다 마무리
		m_itor = m_listReq.begin();
		m_bCallbackAll = TRUE;
		m_bComplete = FALSE;
		m_listComplete = m_listReq;
		m_listReq.clear();
		BOOL bSuccess = TRUE;
		XDownloader::xtError codeErr = XDownloader::xERR_UNKNOWN;
		// 받은 파일의 에러검사.
		if( XBREAK( m_listComplete.size() == 0 ) )
			bSuccess = FALSE;
		for( auto& info : m_listComplete )	{
			if( XBREAK( info.strDstFullpath.empty() == true ) )
				bSuccess = FALSE;
			if( XBREAK( info.strURL.empty() == true ) )
				bSuccess = FALSE;
		}
		//
		if( bSuccess )
		{
			// 다운 다받은후 이벤트 발생시킬땐 에러가 없음을 보증하고 발생시킬것.
			XTRACE("XDownloadTask: Call handler: XWM_ALL_COMPLETE");
			CallEventHandler( XWM_ALL_COMPLETE );
			ClearEvent( XWM_ALL_COMPLETE );
		} else {
			CallEventHandler( XWM_ERROR_DOWNLOAD, codeErr );
			ClearEvent( XWM_ERROR_DOWNLOAD );
		}
		m_pDownloader->ClearComplete();
	}
	return 1;
}
예제 #6
0
int XWndPageSlideWithXML::Process( float dt )
{
	if( m_AutoScrollDir == XE::xDIR_RIGHT )
	{
		// ------->>>>
		// 오른쪽 화면이 나타나고 현재화면이 왼쪽으로 사라진다.
		float lerp = m_itpScroll.GetInterpolationValueWithSet( xSEC_SLIDE );
		XE::VEC2 vPos = m_pCurr->GetPosLocal();
		float wScreen = XE::GetGameWidth();
		vPos.x = m_vStartScroll.x + ( (-wScreen) - m_vStartScroll.x ) * lerp;
		m_pCurr->SetPosLocal( vPos );
		if( m_pRight )
		{
			XE::VEC2 vPosRight = m_pRight->GetPosLocal();
			vPosRight.x = vPos.x + wScreen;
			m_pRight->SetPosLocal( vPosRight );
		}
		if( m_itpScroll.IsFinish() )
		{
			m_itpScroll.Off();
			m_AutoScrollDir = XE::xDIR_NONE;
			// 현재 화면이 왼쪽으로 완전히 사라졌다.
			if( m_pLeft )
			{
				m_listLeft.push_back( m_pLeft );
				//XWnd::DestroyWnd( m_pLeft );		// 원래있던 왼쪽페이지를 삭제
			}
			m_pLeft = m_pCurr;
			m_pCurr = m_pRight;
			m_pRight = NULL;
			// 오른쪽 페이지 생성
			int idxRightPage = GetNextPage( m_pCurr->GetidxPage() );
			if( m_numPages > idxRightPage && idxRightPage >= 0 )
			{
				if( m_listRight.size() > 0 )
				{
					m_pRight = m_listRight.GetFirst();
					m_listRight.pop_front();
				}
				//m_pRight = CreatePage( idxRightPage );
				//if( m_pRight && !Find( m_pRight ) )
				//	Add( m_pRight );
				XE::VEC2 v = m_pCurr->GetPosLocal();
				v.x += wScreen;
				m_pRight->SetPosLocal( v );	// 화면 오른쪽에 놓는다.
			}
			CallEventHandler( XWM_FINISH_SLIDE, m_pCurr->GetidxPage() );
		}
	} else
	if( m_AutoScrollDir == XE::xDIR_LEFT )
	{
		// <<<<-----
		// 왼쪽 화면이 나타나고 현재화면이 오른쪽으로 사라진다.
		float lerp = m_itpScroll.GetInterpolationValueWithSet( xSEC_SLIDE );
		XE::VEC2 vPos = m_pCurr->GetPosLocal();
		float wScreen = XE::GetGameWidth();
		vPos.x = m_vStartScroll.x + ( wScreen - m_vStartScroll.x ) * lerp;
		m_pCurr->SetPosLocal( vPos );
		if( m_pLeft )
		{
			XE::VEC2 vPosLeft = m_pLeft->GetPosLocal();
			vPosLeft.x = vPos.x - wScreen;
			m_pLeft->SetPosLocal( vPosLeft );
		}
		if( m_itpScroll.IsFinish() )
		{
			m_itpScroll.Off();
			m_AutoScrollDir = XE::xDIR_NONE;
			// 현재 화면이 오른쪽으로 완전히 사라졌다.
			if( m_pRight )
			{
				m_listRight.push_front( m_pRight );
				//XWnd::DestroyWnd( m_pRight );		// 원래있던 오른쪽페이지를 삭제
			}
			m_pRight = m_pCurr;
			m_pCurr = m_pLeft;
			m_pLeft = NULL;
			// 왼쪽 페이지 생성
			int idxLeftPage = GetPrevPage( m_pCurr->GetidxPage() );
			if( m_numPages > idxLeftPage && idxLeftPage >= 0 )
			{
				if( m_listLeft.size() > 0 )
				{
					m_pLeft = m_listLeft.GetLast();
					m_listLeft.pop_back();
				}
				//m_pLeft = CreatePage( idxLeftPage );
				//if( m_pLeft && !Find( m_pLeft ) )
				//	Add( m_pLeft );
				XE::VEC2 v = m_pCurr->GetPosLocal();
				v.x -= wScreen;
				m_pLeft->SetPosLocal( v );		// 화면 왼쪽에 놓는다.
			}
			CallEventHandler( XWM_FINISH_SLIDE, m_pCurr->GetidxPage() );
		}
	} else
	if( m_AutoScrollDir == XE::xDIR_CENTER )
	{
		// 제자리로 돌아가기
		float lerp = m_itpScroll.GetInterpolationValueWithSet( xSEC_SLIDE );
		float wScreen = XE::GetGameWidth();
		XE::VEC2 vPos = m_pCurr->GetPosLocal();
		vPos.x = m_vStartScroll.x + ( 0 - m_vStartScroll.x ) * lerp;
		m_pCurr->SetPosLocal( vPos );
		if( m_pRight )
		{
			XE::VEC2 vPosRight = m_pRight->GetPosLocal();
			vPosRight.x = vPos.x + wScreen;
			m_pRight->SetPosLocal( vPosRight );
		}
		if( m_pLeft )
		{
			XE::VEC2 vPosLeft = m_pLeft->GetPosLocal();
			vPosLeft.x = vPos.x - wScreen;
			m_pLeft->SetPosLocal( vPosLeft );
		}
		if( m_itpScroll.IsFinish() )
		{
			m_itpScroll.Off();
			m_AutoScrollDir = XE::xDIR_NONE;
		}
	} 
//	else
	return XWnd::Process( dt );
//	return 1;
}
예제 #7
0
//
// HandleEvent
//
// Passes events through to the user
//
U32 ICGrid::HandleEvent(Event &e)
{ 
  if (e.type == Input::EventID())
  {
    // Input events
    switch (e.subType)
    {
      case Input::MOUSEBUTTONDOWN:
      case Input::MOUSEBUTTONDBLCLK:
      {
        // Is the click inside the client area
        if (InClient(Point<S32>(e.input.mouseX, e.input.mouseY)))
        {
          // Ignore if we already have capture
          if (IFace::GetCapture() != this)
          {
            // Grab capture
            GetMouseCapture();

            // Save mouse code
            captureCode = e.input.code;
          }
        }
        break;
      }

      case Input::MOUSEBUTTONUP:
      case Input::MOUSEBUTTONDBLCLKUP:
      {
        if (HasMouseCapture() && e.input.code == captureCode)
        {
          ReleaseMouseCapture();

          // Get mouse position relative to client window
          Point<S32> p = ScreenToClient(Point<S32>(e.input.mouseX, e.input.mouseY));

          // Calculate the (flipped) cell positions
          U32 x = xFlip ? gridSize.x - (p.x / cellSize.x) - 1 : p.x / cellSize.x;
          U32 y = yFlip ? gridSize.y - (p.y / cellSize.y) - 1 : p.y / cellSize.y;

          // Set currently selected
          if (x < gridSize.x && y < gridSize.y)
          {
            selected.Set(x, y);
          }

          if (captureCode == Input::LeftButtonCode())
          {
            CallEventHandler(0x90E4DA5D); // "LeftClick"
          }
          else

          if (captureCode == Input::MidButtonCode())
          {
            CallEventHandler(0x316EC946); // "MiddleClick"
          }
          else

          if (captureCode == Input::RightButtonCode())
          {
            CallEventHandler(0x173F5F78); // "RightClick"
          }

          return (TRUE);
        }
        break;
      }
    }
  }

  // Allow parent class to process this event
  return IControl::HandleEvent(e);
}