// //#include "WTYPES.h" //#include "SGameSound.h" //#include ".\sgameselect.h" // //#include "KDeviceManager.h" //#include "KRenderObject.h" //#include "KRenderDeviceDX.h" //#include "K3DCamera.h" //#include "KNX3Loader.h" //#include "KPrimitive.h" // //#include // //#include //#include "KResourceManager.h" // //#include "KSeqModel.h" //#include "KSeqAvatar.h" //#include "KSeqAvatarEx.h" // //#include "SCobManager.h" // //#include "SGameMessage.h" //#include "SNetMessage.h" // //const char * pLoadingList[] = //{ // "bg_select.nx3", //배경 // "prop_candle01.nx3" , //촛대 // "ui_disk_position.nx3" , //발판위치 //}; // //const char * pDisk[] = //{ // "ui_disk_default.nx3", //기본 0 // "ui_disk_active_on.nx3", //커서 오버 시작 1 // "ui_disk_active_ing.nx3", //커서 오버 중 2 // "ui_disk_active_end.nx3", //커서 오버 끝 3 // "ui_disk_select_on.nx3", //선택 시작 4 // "ui_disk_select_ing.nx3", //선택 중 5 // "ui_disk_select_end.nx3", //선택 끝 6 // "ui_disk_accept.nx3", //완료 7 //}; // //const char * pMagic[] = //{ // "ui_magic_default.nx3", //기본 0 // "ui_magic_active_on.nx3", //선택 시작 1 // "ui_magic_active_ing.nx3",//선택 2 // "ui_magic_active_end.nx3",//선택 완료 3 // "ui_magic_accept.nx3", //완료 4 //}; // //const char * pAvatar[] = //{ // "asf.cob", //아수라 여자~ // "asm.cob", //아수라 남자~ // "def.cob", //데바 여자~ // "dem.cob", //데바 남자~ // "asf.cob", //임시~ //}; // //const char * pSearchName = "prop_disk"; // //SGameSelect::SGameSelect(SGameManager* pGameMng, int nGameType, // K3DRenderDeviceDX *pRenderDevice, SSoundManager *pSoundMng, // KTextureManager * pTextureMng, KNX3Manager * pNX3Mng ) // : SGame( pGameMng, nGameType, pRenderDevice, pSoundMng, pTextureMng, pNX3Mng ) //{ // m_nGameType = GAME_TYPE_SELECT; //게임 타입 // m_nNextGameType = GAME_TYPE_WORLD; //다음 예약 게임 타입 // // Init(); //} // //SGameSelect::~SGameSelect(void) //{ // Destroy(); //} // //void SGameSelect::Init() //{ // m_pModelBG = NULL; //배경 // m_pMagicModel = NULL; //마법진 // // for( int i(0); CHARACTER_NUMBER>i; i++ ) // { // m_pSeqAvatar[i] = NULL; // } // // m_nCurSelect = -1; //현재 select Index // m_nOldSelect = -1; //이전 select Index // // m_nCurMouseSelect = -1; // m_nOldMouseSelect = -1; // // m_nGameState = STATE_SELECT; // // Load(); //} // //void SGameSelect::Destroy() //{ // SAFE_DELETE( m_pModelBG ); // SAFE_DELETE( m_pMagicModel ); // // SAFE_DELETE_VECTOR( m_vCandle ); // SAFE_DELETE_VECTOR( m_vDisk ); // // for( int i(0); CHARACTER_NUMBER>i; i++ ) // { // SAFE_DELETE( m_pSeqAvatar[i] ); // } //} // //void SGameSelect::Load() //{ // m_pModelBG = new KSeqModel; // m_pModelBG->Initialize(); // m_pModelBG->AddAnimation( "default", pLoadingList[0] ); // m_pModelBG->PlayAnimation( GetSafeTickCount(), "default", KSeqModel::SEQTYPE_LOOP ); // // KSeqObject *pSequencer = m_pModelBG->GetCurrentAnimation(); // _CID( REQ_EVPOINT ); // KMsgREQ_EVPOINT msg; // std::string strCandle; // if ( pSequencer->Perform( id_REQ_EVPOINT, msg ) != NULL ) // { // for ( int i(0); msg.GetPointCount() >i; i++ ) // { // KEventPointSeq *pEpSeq = msg.GetPoint( i ); // strCandle = pEpSeq->GetName(); // strCandle.erase(0, 3); // // //마법진 Load // if( strCandle.compare("magic") == 0 ) // { // m_pMagicModel = new KSeqModel; // m_pMagicModel->Initialize( ); // m_pMagicModel->AddAnimation( "default" , pMagic[0] ); // m_pMagicModel->AddAnimation( "SelectOn" , pMagic[1] ); // m_pMagicModel->AddAnimation( "SelectIng", pMagic[2] ); // m_pMagicModel->AddAnimation( "SelectOff", pMagic[3] ); // m_pMagicModel->AddAnimation( "Accept" , pMagic[4] ); // // m_pMagicModel->SetTransform( pEpSeq->GetPoint() ); // m_pMagicModel->PlayAnimation( GetSafeTickCount(), "default", KSeqModel::SEQTYPE_LOOP ); // continue; // } // // strCandle += ".nx3"; // KStream *stream = KResourceManager::GetStream( strCandle.c_str(), false ); // if ( stream == NULL ) // continue; // delete stream; // // //촛대 Load // KSeqModel *pModel = new KSeqModel; // pModel->Initialize( ); // pModel->AddAnimation( "default", strCandle.c_str() ); // pModel->SetTransform( pEpSeq->GetPoint() ); // pModel->PlayAnimation( GetSafeTickCount(), "default", KSeqModel::SEQTYPE_LOOP ); // // m_vCandle.push_back(pModel); // } // } // // delete pSequencer; // // //Foot Position // for( int i(0); CHARACTER_NUMBER>i; i++ ) // { // m_DiskModel[i].Initialize(); // m_DiskModel[i].AddAnimation( "default", pLoadingList[2] ); // m_DiskModel[i].PlayAnimation( GetSafeTickCount(), "default", KSeqModel::SEQTYPE_REVERSE ); // m_pDisk[i] = (KSequencer*)m_DiskModel[i].GetCurrentAnimation(); // } // // for( int i(0); CHARACTER_NUMBER>i; i++ ) // { // _CID( REQ_EVPOINT ) // KMsgREQ_EVPOINT msg2; // if ( m_pDisk[i]->PerformMsg( id_REQ_EVPOINT, msg2 ) != NULL ) // { //// for ( int i(0); msg2.GetPointCount() >i; i++ ) // { // KEventPointSeq *pEpSeq = msg2.GetPoint( i ); // strCandle = pEpSeq->GetName(); // // KSeqModel *pModel = new KSeqModel; // // pModel->AddAnimation( "default" , pDisk[0] ); // pModel->AddAnimation( "CursorOn" , pDisk[1] ); // pModel->AddAnimation( "CursorIng", pDisk[2] ); // pModel->AddAnimation( "CursorOff", pDisk[3] ); // pModel->AddAnimation( "SelectOn" , pDisk[4] ); // pModel->AddAnimation( "SelectIng", pDisk[5] ); // pModel->AddAnimation( "SelectOff", pDisk[6] ); // pModel->AddAnimation( "Accept" , pDisk[7] ); // // pModel->SetTransform( pEpSeq->GetPoint() ); // pModel->Initialize(); // pModel->PlayAnimation( GetSafeTickCount(), "default", KSeqModel::SEQTYPE_LOOP ); // m_vDisk.push_back( pModel ); // } // } // } // // //Load Avatar // for( int i(0); CHARACTER_NUMBER>i; i++ ) // { // m_pSeqAvatar[i] = new KSeqAvatarEx; // m_pSeqAvatar[i]->Initialize(); // // std::vector *coblist = COBManager::GetManager()->Load( pAvatar[i] ); // if( coblist ) // { // std::vector::iterator it = coblist->begin(); // for( ; coblist->end() != it; it++ ) // { // COBSET * pSet = (*it); // for( unsigned int j(0); pSet->m_HairList.size()>j; j++ ) // m_pSeqAvatar[i]->AddMesh( pSet->nAniPart, MPART_HAIR, pSet->m_HairList[j].c_str() ); // // for( unsigned int j(0); pSet->m_FaceList.size()>j; j++ ) // m_pSeqAvatar[i]->AddMesh( pSet->nAniPart, MPART_FACE, pSet->m_FaceList[j].c_str() ); // // for( unsigned int j(0); pSet->m_BodyList.size()>j; j++ ) // m_pSeqAvatar[i]->AddMesh( pSet->nAniPart, MPART_BODY, pSet->m_BodyList[j].c_str() ); // // for( unsigned int j(0); pSet->m_HandList.size()>j; j++ ) // m_pSeqAvatar[i]->AddMesh( pSet->nAniPart, MPART_HAND, pSet->m_HandList[j].c_str() ); // // for( unsigned int j(0); pSet->m_FootList.size()>j; j++ ) // m_pSeqAvatar[i]->AddMesh( pSet->nAniPart, MPART_FOOT, pSet->m_FootList[j].c_str() ); // // for( unsigned int j(0); pSet->m_AniList.size()>j; j++ ) // { // m_pSeqAvatar[i]->AddAnimation( pSet->nAniPart, pSet->m_AniList[j].c_str() ); // } // m_pSeqAvatar[i]->PlayAnimation( pSet->nAniPart, GetSafeTickCount(), "default01", KSeqAvatar::SEQTYPE_LOOP ); // m_pSeqAvatar[i]->SetDeform(pSet->nAniPart); // } // } // //Time Event // } //} // //bool SGameSelect::Render( KViewportObject *viewport ) //{ // //제어 안해두 되는 것========================= // //배경 // m_pModelBG->Render(viewport); // // //촛대 // for( unsigned int i(0); m_vCandle.size()>i; i++ ) // m_vCandle[i]->Render(viewport); // //============================================ // // //캐릭터 // for( int i(0); CHARACTER_NUMBER>i; i++ ) // m_pSeqAvatar[i]->Render( viewport ); // // //마법진 // if(m_pMagicModel) // { // m_pMagicModel->Render(viewport); // // if( strcmp( m_pMagicModel->GetCurrentAnimationName(), "SelectOn" ) == 0 ) // { // if( !m_pMagicModel->IsPlaying() ) // { // m_pMagicModel->PlayAnimation( m_dwTime, "SelectIng", KSeqModel::SEQTYPE_LOOP ); // } // } // } // //발판 EventPoint // for( int i(0); CHARACTER_NUMBER>i; i++ ) // { // if( i == m_nCurSelect ) continue; // // m_DiskModel[i].Render(viewport); // m_pDisk[i]->Render(viewport); // // _CID( REQ_EVPOINT ); // KMsgREQ_EVPOINT msg2; // if ( m_pDisk[i]->Perform( id_REQ_EVPOINT, msg2 ) != NULL ) // { // KEventPointSeq *pEpSeq = msg2.GetPoint( i ); // m_vDisk[i]->SetTransform( pEpSeq->GetPoint() ); // // K3DMatrix mat; // K3DMatrixIdentity(mat); // float angRadian = 180.f*K3D_PI/180; // K3DMatrixRotationZ( &mat, angRadian );//회전시키는데 위치가 날라가지? // mat._41 = pEpSeq->GetPoint()._41; // mat._42 = pEpSeq->GetPoint()._42; // mat._43 = pEpSeq->GetPoint()._43; // // m_pSeqAvatar[i]->SetTransform( mat ); // } // // if( strcmp( m_vDisk[i]->GetCurrentAnimationName(), "SelectOff" ) == 0 ) // { // if( !m_vDisk[i]->IsPlaying() ) // m_vDisk[i]->PlayAnimation( m_dwTime, "default", KSeqModel::SEQTYPE_LOOP ); // } // } // // if( m_nCurSelect >= 0 ) // { // m_pDisk[m_nCurSelect]->Render(viewport); // m_DiskModel[m_nCurSelect].Render(viewport); // // _CID( REQ_EVPOINT ); // KMsgREQ_EVPOINT msg2; // if ( m_pDisk[m_nCurSelect]->Perform( id_REQ_EVPOINT, msg2 ) != NULL ) // { // KEventPointSeq *pEpSeq = msg2.GetPoint( m_nCurSelect ); // m_vDisk[m_nCurSelect]->SetTransform( pEpSeq->GetPoint() ); // // K3DMatrix mat; // K3DMatrixIdentity(mat); // float angRadian = 180.f*K3D_PI/180; // K3DMatrixRotationZ( &mat, angRadian );//회전시키는데 위치가 날라가지? // mat._41 = pEpSeq->GetPoint()._41; // mat._42 = pEpSeq->GetPoint()._42; // mat._43 = pEpSeq->GetPoint()._43; // // m_pSeqAvatar[m_nCurSelect]->SetTransform( mat ); // } // // if( strcmp( m_vDisk[m_nCurSelect]->GetCurrentAnimationName(), "SelectOn" ) == 0 ) // { // if( !m_vDisk[m_nCurSelect]->IsPlaying() ) // { // //발판 변경 // m_vDisk[m_nCurSelect]->PlayAnimation( m_dwTime, "SelectIng", KSeqModel::SEQTYPE_LOOP ); // } // } // } // // for( unsigned int i(0); m_vDisk.size()>i; i++ ) // m_vDisk[i]->Render(viewport); // // return true; //} // //bool SGameSelect::Process( DWORD time ) //{ // m_dwTime = time; // // m_pModelBG->Process( time ); // // for( unsigned int i(0); m_vCandle.size()>i; i++ ) // m_vCandle[i]->Process(time); // // for( int i(0); CHARACTER_NUMBER>i; i++ ) // m_pSeqAvatar[i]->Process(time); // // if(m_pMagicModel) m_pMagicModel->Process(time); // // for( int i(0); CHARACTER_NUMBER>i; i++ ) // { // m_pDisk[i]->Process(time); // m_DiskModel[i].Process(time); // } // // for( unsigned int i(0); m_vDisk.size()>i; i++ ) // m_vDisk[i]->Process(time); // // //Login이 완료 됐다. // //애니 메이션 완료 되면, Stage 를 변경 한다. // if( m_nGameState == STATE_LOGIN_WAIT ) // { // if( !m_DiskModel[m_nCurSelect].IsPlaying() ) // { // m_nGameState = STATE_LOGIN; // } // } // // if( m_nGameState == STATE_LOGIN ) // { // //모션 취하는게 끝났다. // if( !m_pMagicModel->IsPlaying() ) // { // m_nGameState = STATE_END; // // SetGameRef( STAGE_END ); // } // } // // return true; //} // //void *SGameSelect::Perform( KID id, KArg& msg ) //{ // // return (void*)0; //} // //void SGameSelect::Bot_Accept( int nSelect, const char * pName ) //{ // _oprint( "Bot_Accept : %d - %s\n", nSelect, pName ); // // m_nCurSelect = nSelect; // // srand( GetSafeTickCount() ); // TS_LOGIN msg; // sprintf( msg.szName, pName ); // msg.race = m_nCurSelect; // // PendMessage( &msg ); // // SetGameRef( STAGE_END ); //} // ////선택이 완료 되었다. 게임에 들어 가자~ //void SGameSelect::Accept() //{ // //m_pSoundMng->PlayMusic( KResourceManager::GetValidFileName( "bgm.mp3" ).c_str() ); // // //Accept // m_pMagicModel->PlayAnimation( m_dwTime, "Accept" ); // m_vDisk[m_nCurSelect]->PlayAnimation( m_dwTime, "Accept" ); // // //Login 요청~ // srand( GetSafeTickCount() ); // TS_LOGIN msg; // sprintf( msg.szName, "berserk" ); // msg.race = m_nCurSelect; // // PendMessage( &msg ); //} // //void SGameSelect::MouseCursorOver() //{ // if( m_nCurMouseSelect >= 0 ) // m_vDisk[m_nCurMouseSelect]->PlayAnimation( m_dwTime, "CursorIng", KSeqModel::SEQTYPE_LOOP ); // // if( m_nOldMouseSelect >= 0 && m_nCurSelect != m_nOldMouseSelect ) // m_vDisk[m_nOldMouseSelect]->PlayAnimation( m_dwTime, "default", KSeqModel::SEQTYPE_LOOP ); //} // //void SGameSelect::MouseSelect() //{ // if( m_nCurSelect>=0 ) // { // if( m_DiskModel[m_nCurSelect].IsPlaying() ) // return; // } // // for( int i(0); CHARACTER_NUMBER>i; i++ ) // { // //현재 선택된 넘이 아니면서, 앞으로 나가고 있는것들 모두 후진~ // if( m_nCurSelect != i && m_DiskModel[i].GetAniType() == KSeqModel::SEQTYPE_NORMAL ) // { // m_DiskModel[i].PlayAnimation( m_dwTime, "default", KSeqModel::SEQTYPE_REVERSE ); // m_vDisk[i]->PlayAnimation( m_dwTime, "SelectOff", KSeqModel::SEQTYPE_NORMAL ); // } // } // // if( m_nCurSelect >= 0 ) // { // m_DiskModel[m_nCurSelect].PlayAnimation( m_dwTime, "default", KSeqModel::SEQTYPE_NORMAL ); // m_vDisk[m_nCurSelect]->PlayAnimation( m_dwTime, "SelectOn", KSeqModel::SEQTYPE_NORMAL ); // if(m_pMagicModel) m_pMagicModel->PlayAnimation( m_dwTime, "SelectOn", KSeqModel::SEQTYPE_NORMAL ); // } //} // //void SGameSelect::AvaterSelect() //{ // //캐릭터 부위 교체 // //if( m_bKey['1'] ) // //{ // // //if( m_nCurSelect == 4 ) return; // // // if( m_nCurSelect >= 0 ) m_nOldSelect = m_nCurSelect; // // m_nCurSelect = 4; // // // MouseSelect(); // // // return; // //} // // // //if( m_bKey['2'] ) // //{ // // //if( m_nCurSelect == 2 ) return; // // // if( m_nCurSelect >= 0 ) m_nOldSelect = m_nCurSelect; // // m_nCurSelect = 2; // // // MouseSelect(); // // // return; // //} // // // //if( m_bKey['3'] ) // //{ // // //if( m_nCurSelect == 0 ) return; // // // if( m_nCurSelect >= 0 ) m_nOldSelect = m_nCurSelect; // // m_nCurSelect = 0; // // // MouseSelect(); // // // return; // //} // // //if( m_bKey['4'] ) // //{ // // //if( m_nCurSelect == 1 ) return; // // // if( m_nCurSelect >= 0 ) m_nOldSelect = m_nCurSelect; // // m_nCurSelect = 1; // // // MouseSelect(); // // // // return; // //} // // //if( m_bKey['5'] ) // //{ // // //if( m_nCurSelect == 3 ) return; // // // if( m_nCurSelect >= 0 ) m_nOldSelect = m_nCurSelect; // // m_nCurSelect = 3; // // // MouseSelect(); // //} // //} // ////Network=============================================================================== // //void SGameSelect::ProcMsgAtStatic( SGameMessage * pGameMsg ) //{ // SGame::ProcMsgAtStatic(pGameMsg); // _CID( REQ_INTERSECTIONLINE ); // // switch( pGameMsg->nType ) // { // case IMSG_MOUSEMOVE : // { // pGameMsg->bUse = true; // SIMSG_MOUSEMOVE* pMsg = static_cast(pGameMsg); // if( m_nGameState != STATE_SELECT ) return; // // KMsgREQ_INTERLINE camera_msg( (KViewportObject*)m_pViewPort, GET_X_LPARAM(pMsg->lParam) , GET_Y_LPARAM(pMsg->lParam) ); // if( m_pModelBG->Perform( id_REQ_INTERSECTIONLINE, camera_msg ) ) // { // for(int i(0); CHARACTER_NUMBER>i; i++) // { // if( m_pSeqAvatar[i]->GetBoundCube()->CheckCollision( camera_msg.vNear, camera_msg.vFar ) ) // { // if( m_nCurMouseSelect != i ) //전꺼와 같지 않으며 // { // if( m_nCurMouseSelect != -1 ) //선택 된게 있었으면. // m_nOldMouseSelect = m_nCurMouseSelect; // // if( i != m_nCurSelect ) // { // m_nCurMouseSelect = i; // MouseCursorOver(); // } // } // break; // } // } // } // } // break; // case IMSG_LBUTTONUP : //캐릭터 선택 // { // pGameMsg->bUse = true; // SIMSG_LBUTTONUP* pMsg = static_cast(pGameMsg); // // if( m_nGameState != STATE_SELECT ) return; // // KMsgREQ_INTERLINE camera_msg( (KViewportObject*)m_pViewPort, GET_X_LPARAM(pMsg->lParam) , GET_Y_LPARAM(pMsg->lParam) ); // if( m_pModelBG->Perform( id_REQ_INTERSECTIONLINE, camera_msg ) ) // { // for(int i(0); CHARACTER_NUMBER>i; i++) // { // if( m_nCurSelect != i && m_pSeqAvatar[i]->GetBoundCube()->CheckCollision( camera_msg.vNear, camera_msg.vFar ) ) // { // if( m_nCurSelect != -1 ) // m_nOldSelect = m_nCurSelect; // m_nCurMouseSelect = -1; // m_nOldMouseSelect = -1; // m_nCurSelect = i; // MouseSelect(); // StartSound( "select.wav", K3DVector(0,0,0) ); // break; // } // } // } // } // break; // case IMSG_LBUTTONDBLCLK : //선택된 캐릭터 로그인 // { // pGameMsg->bUse = true; // SIMSG_LBUTTONDBLCLK* pMsg = static_cast(pGameMsg); // // if( m_nGameState != STATE_SELECT ) return; // // KMsgREQ_INTERLINE camera_msg( (KViewportObject*)m_pViewPort, GET_X_LPARAM(pMsg->lParam) , GET_Y_LPARAM(pMsg->lParam) ); // if( m_pModelBG->Perform( id_REQ_INTERSECTIONLINE, camera_msg ) ) // { // for(int i(0); CHARACTER_NUMBER>i; i++) // { // if( m_nCurSelect == i && m_pSeqAvatar[i]->GetBoundCube()->CheckCollision( camera_msg.vNear, camera_msg.vFar ) ) // { // Accept(); // m_nGameState = STATE_LOGIN_WAIT; // break; // } // } // } // } // break; // case MSG_ENTER : // { // int a = 1; // a = 2; // } // break; // case MSG_ITEM_WEAR : // { // int a = 1; // a = 2; // } // break; // case MSG_ITEM_INVEN : // { // int a = 1; // a = 2; // } // break; // } //} ////Login의 결과다~ ////뭔가 연출을 보여 주고, 다음 Game으로 처리를 넘긴다. ////void SGameSelect::onMsgLogin( TS_LOGIN_RESULT * pMsg ) ////{ //// ////}