📄 maingame.cpp
字号:
//if(m_is_inputing_text==FALSE)
// m_is_inputing_text = TRUE;
}
if(pPanel&&pPanel->IsFocus())
{
return id_ret;
}
return id_ret;
}
VOID MainGame::OnUICmd(CGsUIPanel* pUI, UINT msg, LONG param)
{
const char* str = pUI->GetName();
switch(msg)
{
case UI_CMD_CLICK:
case UI_CMD_DBCLK:
{
if (KEY("talk")==str)
{
m_is_broadcast = !m_is_broadcast;
update_ui();
break;
}
switch (GetMode())
{
case ENUM_GAME:
if(KEY("start")==str)
{
NET_Packet* pPacket = new NET_Packet;
pPacket->setCmd(GSP_UI_CMD);
pPacket->write32(m_id_player);
pPacket->write16(_UI_CMD_START);
m_socket.PushSendPacket(1, pPacket);
}
else if(KEY("ready")==str)
{
NET_Packet* pPacket = new NET_Packet;
pPacket->setCmd(GSP_UI_CMD);
pPacket->write32(m_id_player);
pPacket->write16(_UI_CMD_READY);
m_socket.PushSendPacket(1, pPacket);
}
else if (KEY("btn_lobby")==str)
{
SetMode(ENUM_LOBBY);
}
else if(KEY("main_btn_help")==str)
{
m_is_show_magic_book = !m_is_show_magic_book;
if (m_is_show_magic_book)
{
m_rc_magic_book = GRECT((m_pEngine->GetRenderWidth()-MAGIC_CARD_BOOK_WIETH)/2,
m_pEngine->GetRenderHeight(),
(m_pEngine->GetRenderWidth()+MAGIC_CARD_BOOK_WIETH)/2,
m_pEngine->GetRenderHeight()+MAGIC_CARD_BOOK_HEIGHT);
}
}
break;
case ENUM_LOBBY:
if (KEY("lobby_left")==str)
{
if (m_page_table_select>=3)
{
m_page_table_select -= 3;
update_ui();
}
}
else if (KEY("lobby_right")==str)
{
if (m_page_table_select<MAX_TABLE_NUM - NUM_TABLE_IN_LINE*2)
{
m_page_table_select += 3;
update_ui();
}
}
else if (KEY("player_left")==str)
{
if (m_page_player_select>0)
{
m_page_player_select --;
update_ui();
}
}
else if (KEY("player_right")==str)
{
if (m_page_player_select+6<=m_map_user.size())
{
m_page_player_select ++;
update_ui();
}
}
else if (KEY("lobby_ok")==str)
{
SetMode(ENUM_GAME);
}
break;
}
}
break;
default:
break;
}
}
void MainGame::on_handle_place(void *pData)
{
if(pData==NULL)
return;
}
void MainGame::on_handle_unit(void* pData)
{
if(pData==NULL)
return;
}
void MainGame::on_login(void *pData)
{
StartGame();
}
void MainGame::on_add_unit(void *pData)
{
}
void MainGame::on_del_unit(void *pData)
{
}
FLAG MainGame::Update(DWORD dwPassTime)
{
Game_Client::DoUpdate();
std::list<GAME_MSG>::iterator it = m_list_game_msg.begin();
while (it!=m_list_game_msg.end())
{
if (m_pEngine->m_dwEngineTime - it->tick_speek>10000)
it = m_list_game_msg.erase(it);
else
it++;
}
if (GetMode()==ENUM_GAME)
{//游戏中
Update_game();
}
else
{//大厅
Update_lobby();
}
return CGsGame::Update(dwPassTime);
}
HRESULT MainGame::Render()
{
HRESULT hr = S_OK;
// m_pEngine->GetD3dDevice()->Clear(0UL, NULL, D3DCLEAR_TARGET ,
// 0,
// 1.0f, 0L );
if(Game_Client::IsReady())
{
if (GetMode()==ENUM_GAME)
{//游戏中
hr= Render_game();
}
else
{//大厅,挑选桌子
hr= Render_lobby();
}
}
return hr;
}
HRESULT MainGame::Draw(CGsSurface *pSurface)
{
// char strMouse[100];
// sprintf(strMouse, "屏幕坐标X: %5d", m_pEngine->m_Pos.x);
// pSurface->DrawTextDirect(NULL, strMouse, 70, 10, RGB(255,255,255), RGB(0,0,0));
// sprintf(strMouse, "屏幕坐标Y: %5d", m_pEngine->m_Pos.y);
// pSurface->DrawTextDirect(NULL, strMouse, 70, 26, RGB(255,255,255), RGB(0,0,0));
pSurface->DrawTextDirect(NULL, m_str_net_speed, m_pEngine->GetRenderWidth()-80, 10, RGB(255,255,255), RGB(0,96,191));
std::list<GAME_MSG>::iterator it = m_list_game_msg.begin();
for (int i=0; i<6 && it!=m_list_game_msg.end(); i++)
{
pSurface->DrawTextDirect(NULL,
it->str_msg.c_str(),
180,
m_pEngine->GetRenderHeight()-50-(i+1)*16,
RGB(RGBA_GETRED(it->color), RGBA_GETGREEN(it->color), RGBA_GETBLUE(it->color)),
RGB(0,0,0));
it++;
}
if (GetMode()==ENUM_GAME)
return Draw_game(pSurface);
else
return Draw_lobby(pSurface);
return S_OK;
}
VOID MainGame::Cleanup()
{
std::list<_EFFECT_SKILL*>::iterator it = m_lst_effect_skill.begin();
while(it!=m_lst_effect_skill.end())
{
if(*it)
{
if((*it)->ptr_effect)
delete((*it)->ptr_effect);
delete(*it);
}
it = m_lst_effect_skill.erase(it);
}
CGsGame::Cleanup();
}
VOID MainGame::ReleaseSource()
{
m_tex_game_msg.ReleaseObjects();
m_tex_game_time.ReleaseObjects();
for (int i=0; i<NUM_CHAIR; i++)
{
m_array_player[i].do_release_source();
}
CGsGame::ReleaseSource();
}
HRESULT MainGame::RestoreSource()
{
m_tex_game_msg.RestoreObjects();
m_tex_game_time.RestoreObjects();
m_tex_game_time.SetBasePoint(GPOINT(32, 16));
for (int i=0; i<NUM_CHAIR; i++)
{
m_array_player[i].do_restore_source();
}
return CGsGame::RestoreSource();
}
BOOL MainGame::InitGame()
{
for(int i=0; i<NUM_CHAIR; i++)
{
m_array_player[i].SetGsEngine(m_pEngine);
m_array_player[i].Create(8,14);
m_array_player[i].m_scale = 20;
m_ani_dreamland.SetGsEngine(m_pEngine);
m_ani_dreamland.Create("image\\bubble_main.jpg");
m_ani_bubble.SetGsEngine(m_pEngine);
m_ani_bubble.Create("bubble.bmp");
m_ani_bubble.GetTextureGroup()->m_base_point = GPOINT(BUBBLE_BMP_SIZE,BUBBLE_BMP_SIZE);
}
return TRUE;
}
BOOL MainGame::LoadConfig()
{
if(std::string("client 1.0")!=g_config.GetString("MAIN", "style"))
return FALSE;
if(m_account.empty())
m_account = g_config.GetString("MAIN", "account");
m_password = g_config.GetString("MAIN", "password");
m_server_ip = ntohl(inet_addr(g_config.GetString("MAIN", "server_ip", "0.0.0.0")));
if(m_server_ip==0)
{
m_server_ip = ntohl(NET_GetLocalIP());
}
m_server_port = g_config.GetLong("MAIN", "server_port");
m_locate_port = g_config.GetLong("MAIN", "locate_port");
// m_is_show_fps = g_config.GetBOOL("MAIN", "show_fps");
return TRUE;
}
BOOL MainGame::StartGame()
{
BOOL bRet = true;
m_tex_game_msg.CreateEx(512, 256);
m_tex_game_time.CreateEx(64, 32);
m_tex_game_time.SetBasePoint(GPOINT(32, 16));
update_game_clock(0);
//GetMainUI()->Create("ui\\main.ini");
for (int i=0; i<NUM_CHAIR; i++)
{
}
m_bk_music.SetStreamSource("bubble_sound\\wait");
m_bk_music.Play();
m_bk_music.SetLooping();
if (m_pEngine)
{
m_pEngine->SetMediaVolume(DSBVOLUME_MIN/8);
}
return bRet;
}
void MainGame::EndGame()
{
Logout(m_id_player);
}
void MainGame::add_game_msg(D3DCOLOR color, const char *str_msg, ...)
{
va_list args;
va_start(args, str_msg);
char str[256];
VSNPRINTF(str,255,str_msg,args);
/* write to file */
va_end(args);
if(m_list_game_msg.size()>50)
{
m_list_game_msg.pop_back();
}
GAME_MSG msg;
msg.color = color;
msg.str_msg = str;
msg.tick_speek = m_pEngine->m_dwEngineTime;
m_list_game_msg.push_front(msg);
m_is_msg_change = TRUE;
}
HRESULT MainGame::Redraw_Msg()
{
HRESULT hr;
m_tex_game_msg.Clear(0);
std::list<GAME_MSG>::iterator it = m_list_game_msg.begin();
for (int i=0; i<15 && it!=m_list_game_msg.end(); i++)
{
GRECT rc(0, 256-(i+1)*16, 512, 256-i*16);
hr = m_tex_game_msg.DrawText(NULL,
(*it).str_msg.c_str(),
&rc,
512,
256,
DT_SINGLELINE|DT_VCENTER,
(*it).color/*RGBA_MAKE(0,205,255,230)*/,
RGBA_MAKE(0,0,0,0));
it++;
}
m_is_msg_change = FALSE;
return hr;
}
void MainGame::on_speek(uint32 uid_speeker, const char *strUser, const char *strSpeek)
{
STRUCT_ADD_USER* pUser = GetUser(uid_speeker);
char str[1000];
if (pUser)
{
sprintf(str, "【%s】说: %s", pUser->str_name, strSpeek);
add_game_msg(RGBA_MAKE(255, 255, 255, 250), str);
}
else
{
sprintf(str, "【系统】: %s", strSpeek);
add_game_msg(RGBA_MAKE(255, 255, 155, 250), str);
}
}
void MainGame::on_msg_shoot(ULONG uid, STRUCT_SHOOT_DATA *ptr_shoot)
{
if (ptr_shoot==NULL)
{
return;
}
CPlayer* pPlayer = GetPlayer(uid);
if(pPlayer)
{
if(false==pPlayer->on_msg_shoot(ptr_shoot))
{
NET_Session* ptr_session = GetSession();
NET_Packet* pPacket = new NET_Packet;
pPacket->setCmd(GSP_UPDATE_SCENE);
pPacket->write32(uid);
ptr_session->PushSendPacket(pPacket);
}
if (pPlayer->m_scale>=MAIN_SCALE)
{
if (ptr_shoot->shoot_cmd%10==0)
{
play_sound("bubble_sound\\shoot");
}
else
{
play_sound("bubble_sound\\risk");
}
}
}
}
void MainGame::on_msg_add_table(STRUCT_TABLE_INFO *ptr_table_info)
{
m_map_table[ptr_table_info->uid] = *ptr_table_info;
if (m_map_user[m_id_player].us_table==ptr_table_info->uid)
{//是玩家当前的桌子
*((STRUCT_TABLE_INFO*)this) = *ptr_table_info;
CPlayer* pPlayer = GetPlayer();
if(pPlayer)
{
m_ptr_player = pPlayer;
}
//int j=1;
bool bFirst = true;
m_index[0]=-1;
for(int i=0; i<NUM_CHAIR; i++)
{
if(player[i]==0)
continue;
if(player[i]==m_id_player ||
bFirst && m_ptr_player==NULL)
{
m_array_player[i].m_scale = MAIN_SCALE;
m_index[0]=i;
m_array_player[i].update_user_data(0, &m_map_user[player[i]]);
}
bFirst = false;
}
for(i=0; i<NUM_CHAIR; i++)
{
if(i==m_index[0])
continue;
if (i<m_index[0])
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -