📄 charselect.cpp
字号:
// CharSelect.cpp: implementation of the CCharSelect class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CharSelect.h"
#include "MainGame.h"
#include "MainTitle.h"
#include "cWindowSystemFunc.h"
#include "WindowIDEnum.h"
#include "./interface/cWindowManager.h"
#include "./Interface/cPushupButton.h"
#include "./Interface/cResourceManager.h"
#include "ObjectManager.h"
#include "MHTimeManager.h"
#include "ChatManager.h"
#include "OptionManager.h"
#include "MHMap.h"
#include "MHCamera.h"
#include "./Interface/cScriptManager.h"
#include "cMsgBox.h"
#include "./Input/UserInput.h"
#define CHARSELECT_STAND_POSX 27930
#define CHARSELECT_STAND_POSZ 7834
#define CHARSELECT_STAND_GAP 145
#define CHARSELECT_STAND_HEIGHT 4895
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLOBALTON(CCharSelect)
CCharSelect::CCharSelect()
{
m_CurSelectedPlayer = -1;
m_pDoublcClickedPlayer = NULL;
// m_bDoublcClicked = FALSE;
m_pPlayer[0] = NULL;
m_pPlayer[1] = NULL;
m_pPlayer[2] = NULL;
m_pPlayer[3] = NULL;
m_pSelectDlg = NULL;
m_pChannelDlg = NULL;
}
CCharSelect::~CCharSelect()
{
}
BOOL CCharSelect::Init(void* pInitParam)
{
//YH2DO -_-
if(MAP->IsInited() == FALSE)
MAP->InitMap(102);
m_pPlayer[0] = NULL;
m_pPlayer[1] = NULL;
m_pPlayer[2] = NULL;
m_pPlayer[3] = NULL;
NETWORK->SetCurState(this);
NewCreateCharSelect_m();
m_pSelectDlg = WINDOWMGR->GetWindowForID( CS_CHARSELECTDLG );
CreateChannelDlg();
m_pChannelDlg = (CChannelDialog*)WINDOWMGR->GetWindowForID( CHA_CHANNELDLG );
if(m_pChannelDlg)
{
m_pChannelDlg->Linking();
}
WINDOWMGR->AfterInit();
ASSERT(pInitParam);
SEND_CHARSELECT_INFO * pmsg = (SEND_CHARSELECT_INFO *)pInitParam;
NetworkMsgParse(pmsg->Category, pmsg->Protocol, pInitParam);
//////////////////////////////////////////////////////////////////////////
// 弊覆磊 贸府甫 困秦
VECTOR3 pos = {0,0,0};
float xpos = CHARSELECT_STAND_POSX;
float zpos = CHARSELECT_STAND_POSZ;
float gap = CHARSELECT_STAND_GAP;
for(int n=0;n<4;++n)
{
// pos.x += CHARSELECT_STAND_POSX;
// pos.y += CHARSELECT_STAND_HEIGHT;
// pos.z += CHARSELECT_STAND_POSZ + n * CHARSELECT_STAND_GAP + 100;
pos.x = xpos + (n *120);
pos.y = CHARSELECT_STAND_HEIGHT;
pos.z = zpos + 30 * n;
}
// pos.x /= 4.f;
// pos.y /= 4.f;
// pos.z /= 4.f;
MAP->SetShadowPivotPos(&pos);
//////////////////////////////////////////////////////////////////////////
//KES 030827 颗败咳 <-- 颇教窃荐肺 何磐
InitCameraInCharSelect();
m_CurSelectedPlayer = -1;
SelectPlayer( -1 );
m_pDoublcClickedPlayer = NULL;
SetDisablePick( FALSE );
m_bBackToMainTitle = FALSE;
return TRUE;
}
void CCharSelect::Release(CGameState* pNextGameState)
{
OBJECTMGR->RemoveAllObject();
WINDOWMGR->DestroyWindowAll();
RESRCMGR->ReleaseResource(11);
if(pNextGameState == NULL )
MAP->Release();
//map release()窍绰 镑捞 绝促?
}
void CCharSelect::Process()
{
/// MHTIMEMGR->Process();
if(CAMERA->GetGotoPosition() != -1)
CAMERA->Process();
if( m_pDoublcClickedPlayer )
{
if( m_pDoublcClickedPlayer->GetEngineObject()->GetCurMotion() == eMotion_Sel1Afterstop )
{
SendMsgGetChannelInfo();
m_pDoublcClickedPlayer = NULL;
}
}
//KES
if( WINDOWMGR->IsMouseInputProcessed() ) return; //dialog啊 喘啡促.
if( m_bDiablePick ) return; //皋技瘤冠胶啊 豆促.
//
//付快胶肺 努腐
if( MOUSE->LButtonDoubleClick() )
{
CPlayer* pPlayer = (CPlayer*)GetSelectedObject( MOUSE->GetMouseEventX(), MOUSE->GetMouseEventY());
if( pPlayer && m_pDoublcClickedPlayer == NULL )
if( pPlayer == GetCurSelectedPlayer() )
{
m_pDoublcClickedPlayer = pPlayer;
SetDisablePick( TRUE );
}
}
else if( MOUSE->LButtonDown() )
{
if( GetCurSelectedPlayer() )
if( GetCurSelectedPlayer()->GetEngineObject()->GetCurMotion() != eMotion_Sel1Afterstop )
return;
CPlayer* pPlayer = (CPlayer*)GetSelectedObject( MOUSE->GetMouseEventX(), MOUSE->GetMouseEventY());
if( pPlayer && m_pDoublcClickedPlayer == NULL )
{
for( int i = 0 ; i < 4 ; ++i )
{
if( m_pPlayer[i] == pPlayer )
{
SelectPlayer( i );
break;
}
}
}
}
}
void CCharSelect::BeforeRender()
{
g_pExecutive->GetRenderer()->BeginRender(0,0,0);
g_pExecutive->GetRenderer()->EndRender();
MAP->Process( gCurTime );
}
void CCharSelect::AfterRender()
{
WINDOWMGR->Render();
}
CPlayer* CCharSelect::GetCurSelectedPlayer()
{
if(m_CurSelectedPlayer == -1)
return NULL;
CPlayer* pPlayer = m_pPlayer[m_CurSelectedPlayer];
return pPlayer;
}
void CCharSelect::NetworkMsgParse(BYTE Category,BYTE Protocol,void* pMsg)
{
switch(Category)
{
case MP_USERCONN:
{
switch(Protocol)
{
case MP_USERCONN_CHARACTERLIST_ACK:
{
SEND_CHARSELECT_INFO* pmsg = (SEND_CHARSELECT_INFO*)pMsg;
memset(m_pPlayer,0,sizeof(CPlayer*)*MAX_CHARACTER_NUM);
VECTOR3 pos;
// float xpos[4] = { 25755, 25684, 25613, 25542 };
float xpos = CHARSELECT_STAND_POSX;
float zpos = CHARSELECT_STAND_POSZ;
float gap = CHARSELECT_STAND_GAP;
float height = CHARSELECT_STAND_HEIGHT;
DWORD basiccolor = RGBA_MAKE(255,255,255,255);
DWORD overcolor = RGBA_MAKE(255,255,255,255);
DWORD presscolor = RGBA_MAKE(255,255,0,255);
int t = -1;
for(int i = 0; i < pmsg->CharNum ; i++)
{
WORD standpoint = pmsg->StandingArrayNum[i];
// YH 老窜 急琶芒俊辑 公扁 哗初澜.
pmsg->ChrTotalInfo[i].WearedItemIdx[eWearedItem_Weapon] = 0;
m_pPlayer[standpoint] = OBJECTMGR->AddPlayer(&pmsg->BaseObjectInfo[i],NULL,&pmsg->ChrTotalInfo[i]);
CPlayer* pPlayer = m_pPlayer[standpoint];
pPlayer->GetEngineObject()->ApplyHeightField(FALSE);
pPlayer->SetOverInfoOption(0);
// pos.x = xpos[standpoint] + 2000;
pos.x = xpos + (standpoint *120);
pos.y = height;
pos.z = zpos + 30 * standpoint;
char LevelName[255];
/*
//烙矫肺 蜡历绰 立加窍绰 甘阑 葛弗促. 唱吝俊 牢磐其捞胶 促矫 父甸锭 甸绢哎 傍埃阑 积阿秦辑 父甸磊.
if( MAINGAME->GetUserLevel() <= eUSERLEVEL_DEVELOPER )
sprintf(LevelName,"[Lv%2d] %-16s[%s]",pmsg->ChrTotalInfo[i].Level,pmsg->BaseObjectInfo[i].ObjectName, GetMapName(pmsg->ChrTotalInfo[i].LoginMapNum) );
else
sprintf(LevelName,"[Lv%2d] %-16s",pmsg->ChrTotalInfo[i].Level,pmsg->BaseObjectInfo[i].ObjectName );
*/
cPushupButton * btn = (cPushupButton *)WINDOWMGR->GetWindowForIDEx(MT_FIRSTCHOSEBTN+standpoint);
wsprintf(LevelName,"[Lv%2d] %-16s",pmsg->ChrTotalInfo[i].Level,pmsg->BaseObjectInfo[i].ObjectName );
btn->SetText(LevelName, basiccolor, overcolor, presscolor);
cImage ToolTipImg;
SCRIPTMGR->GetImage( 63, &ToolTipImg, PFT_HARDPATH );
// if( MAINGAME->GetUserLevel() <= eUSERLEVEL_DEVELOPER )
{
btn->SetToolTip( GetMapName(pmsg->ChrTotalInfo[i].LoginMapNum), RGB_HALF(255,255,255), &ToolTipImg, TTCLR_ITEM_CANEQUIP );
}
pPlayer->SetPosition(&pos);
pPlayer->SetAngle(DEGTORAD(50 - 20*standpoint )); // 规氢 倒府扁
//KES 烙矫.. 4锅掳 某腐磐 规氢 距埃 炼沥
if( standpoint == 3 )
pPlayer->SetAngle(DEGTORAD(50 - 20*standpoint + 10 )); // 规氢 倒府扁
pPlayer->ChangeBaseMotion(eMotion_Sel1Before);//+4*standpoint);
pPlayer->ChangeMotion(eMotion_Sel1Before,0);//+4*standpoint, 0);
pPlayer->ShowObjectName( FALSE );
pPlayer->GetEngineObject()->EnableShadow(TRUE);
// OPTIONMGR->ClrKyungGong();//***
}
//InitCameraInCharSelect();
}
return;
case MP_USERCONN_CHARACTERLIST_NACK:
{
LOG(EC_CHARACTERLIST_FAILED);
}
return;
case MP_USERCONN_CHARACTER_REMOVE_ACK:
{
CPlayer* pPlayer = GetCurSelectedPlayer();
if(!pPlayer)
{
ASSERTMSG(0, "某腐磐 昏力-敲饭捞绢啊 绝嚼聪促.No Character For Delete!");
return;
}
cPushupButton * editboxName = (cPushupButton *)WINDOWMGR->GetWindowForIDEx(MT_FIRSTCHOSEBTN + m_CurSelectedPlayer);
editboxName->SetText("",RGBA_MAKE(255,255,255,255),NULL,NULL);
editboxName->SetPush(FALSE);
m_pPlayer[m_CurSelectedPlayer] = NULL;
m_CurSelectedPlayer = -1;
OBJECTMGR->AddGarbageObject(pPlayer);
SelectPlayer(-1);
SetDisablePick( FALSE );
}
return;
case MP_USERCONN_CHARACTER_REMOVE_NACK:
{
WINDOWMGR->MsgBox( MBI_DELETECHARFAIL, MBT_OK, CHATMGR->GetChatMsg(25) );
SetDisablePick( FALSE );
}
return;
case MP_USERCONN_DISCONNECT_ACK:
{
SetDisablePick( TRUE );
// OBJECTMGR->RemoveAllObject(); //咯扁辑 救瘤快绊 release俊辑 瘤快搁 maintitle拳搁俊 泪矫 焊牢促.
// MAINGAME->SetGameState(eGAMESTATE_TITLE); //俊捞怜飘啊 谗唱搁..
// SetBlock(FALSE);
//立加 谗扁绰 镑俊辑 窃.
m_bBackToMainTitle = TRUE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -