Files
Leviathan/Client/Game/game/Main/SGameSelect.cpp
T
2026-06-01 12:46:52 +02:00

648 lines
17 KiB
C++

//
//#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 <WindowsX.h>
//
//#include <kfile/KFiler.h>
//#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<COBSET *> *coblist = COBManager::GetManager()->Load( pAvatar[i] );
// if( coblist )
// {
// std::vector<COBSET *>::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<SIMSG_MOUSEMOVE*>(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<SIMSG_LBUTTONUP*>(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<SIMSG_LBUTTONDBLCLK*>(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 )
////{
////
////}