/** 다운로드를 시작하라 */ 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-> }
// 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 }
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 ); }
void CBaseTutor::OnEvent(GameEventType event, CBaseEntity *pEntity, CBaseEntity *pOther) { CallEventHandler(event, pEntity, pOther); CheckForStateTransition(event, pEntity, pOther); }
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; }
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; }
// // 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); }