📄 maingame.cpp
字号:
// MainGame.cpp: implementation of the MainGame class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MainGame.h"
const GRECT RECT_player[NUM_CHAIR] =
{
GRECT(523, 42, 785, 518),
GRECT(11, 48, 141, 296),
GRECT(159, 48, 291, 296),
GRECT(309, 48, 441, 296),
GRECT(11, 322, 141, 575),
GRECT(159, 322, 291, 575)
};
const char STR_card_name[ENUM_CARD_NUM][2][50] =
{
{"掠夺", "玩家得分扣一分"},
{"吸收", "减少有益泡泡"},
{"泡泡攻击波", "随即冒几个泡泡"},
{"地动天摇", "召唤强烈的地震,崩塌一层"},
{"迷惑", "使玩家无法控制发射台,失控"},
{"失明", "使玩家无法辨认将要发射的泡泡"},
{"邪恶附身", "加7个有害泡泡"},
{"神圣之光", "随机销掉3个泡泡"},
{"天神附身", "使玩家进入超级状态"},
{"神圣祝福", "获得7个有益泡泡"},
{"天賜", "玩家得分奖励一分"}
};
#define MAGIC_CARD_BOOK_WIETH 500
#define MAGIC_CARD_BOOK_HEIGHT 450
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
MainGame::MainGame(CGsEngine* pEngine)
:CGsGame(pEngine),
m_tex_game_msg(pEngine),
m_bk_music(pEngine),
m_tex_game_time(pEngine)
{
m_is_msg_change = FALSE;
for( WORD ix=0; ix<2; ix++ )
{
for( WORD iy=0; iy<2; iy++ )
{
// FLOAT tu = ix;
// FLOAT tv = iy;
float fx = 0;
float fy = 0;
m_aVertex[ix+iy*2] = D3DTLVERTEX( D3DVECTOR(fx,fy,0.0f),
0.5f,
0xffffffff,
0,
0, 0 );
}
}
m_is_inputing_text = FALSE;
//memset(m_magic_list, 0, sizeof(MAGIC_SKILL)*8);
for(int i=0; i<NUM_CHAIR; i++)
{
player[i] = 0;
}
for (i=0; i<NUM_CHAIR; i++)
{
m_index[i] = 0;
}
m_ptr_player = NULL;
m_rc_energy = GRECT(467,100,483,290);
m_rc_power = GRECT(467,290,483,290);
m_is_playing = FALSE;
m_game_start_time = 0;
m_index_table_select = 0;
m_page_table_select = 0;
m_page_player_select = 0;
m_index_player_select = 0;
m_is_show_lobby = TRUE;
m_map_user[0].uid=0;
m_id_player_talk = 0;
m_is_broadcast = TRUE;
m_is_show_magic_book = FALSE;
m_rc_magic_book = GRECT(0, 0, 0, 0);
}
MainGame::~MainGame()
{
}
LRESULT MainGame::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam )
{
return CGsGame::MsgProc( uMsg, wParam, lParam );
}
ID MainGame::OnMouseMove(UINT nFlags, GPOINT point)
{
// if(m_pEngine->TestMouseState(MK_LBUTTON))
// {
// Game_Unit* pUnit = GetControlUnit();
// if(pUnit)
// {
// LONG x,y;
// m_world.GetOriginal(x, y);
// pUnit->query_goto(point.x+x, point.y+y);
// //pUnit->PlyWalkTo(point.x+x, point.y+y);
// }
// }
ID id_ret = CGsGame::OnMouseMove( nFlags, point );
return id_ret;
}
ID MainGame::OnLButtonDown( UINT nFlags, GPOINT point )
{
ID id_ret = CGsGame::OnLButtonDown( nFlags, point );
if (id_ret)
return id_ret;
if (GetMode()==ENUM_LOBBY)
{
GRECT rc(m_pEngine->GetRenderWidth()/2-350, 100, m_pEngine->GetRenderWidth()/2+350, 500);
for (int j=0; j<2; j++)
{
for (int i=0; i<NUM_TABLE_IN_LINE; i++)
{
GRECT rc_table(m_pEngine->GetRenderWidth()/2 - 325 + j*350, 115 + i*130,m_pEngine->GetRenderWidth()/2 - 25 + + j*350, 215 + i*130);
int index = m_page_table_select + j*NUM_TABLE_IN_LINE + i + 1;
if (is_point_in_rect(m_pEngine->m_Pos, rc_table))
{
if (m_index_table_select!=index)
{
m_index_table_select = index;
NET_Packet* pPacket = new NET_Packet;
pPacket->setCmd(GSP_ENTER_TABLE);
pPacket->write16(m_index_table_select);
pPacket->write16(NUM_CHAIR);
m_socket.PushSendPacket(1, pPacket);
update_ui();
}
}
}
}
}
std::map<ULONG, STRUCT_ADD_USER>::iterator it_player = m_map_user.begin();
for (int i=0; i<=m_page_player_select; i++)
it_player++;
for (i=0; i<4; i++)
{
float fr= 0.5f;
if (m_index_player_select==m_page_player_select+i)
fr = m_pEngine->ValueCycle(0.3f, 1.0f, 0, 300);
GRECT rc_player(521 + 57*i, 5, 576 + 57*i, 65);
GRECT rc_player_tip(521 + 57*i, 67, 576 + 57*i, 95);
if (it_player!=m_map_user.end())
{
if (is_point_in_rect(m_pEngine->m_Pos, rc_player) || is_point_in_rect(m_pEngine->m_Pos, rc_player_tip))
{
m_index_player_select = m_page_player_select + i;
if (m_id_player_talk != it_player->second.uid || m_is_broadcast)
{
m_id_player_talk = it_player->second.uid;
m_is_broadcast = FALSE;
update_ui();
}
}
it_player++;
}
}
for (i=0; i<NUM_CHAIR; i++)
{
if (player[m_index[i]]>=0 && is_point_in_rect(m_pEngine->m_Pos, RECT_player[i]))
{
STRUCT_ADD_USER* ptr_user = GetUser(player[m_index[i]]);
m_index_player_select = player[m_index[i]];
if (m_id_player_talk != ptr_user->uid || m_is_broadcast)
{
m_id_player_talk = ptr_user->uid;
m_is_broadcast = FALSE;
update_ui();
}
}
}
return id_ret;
}
ID MainGame::OnLButtonUp( UINT nFlags, GPOINT point )
{
ID id_ret = CGsGame::OnLButtonUp( nFlags, point );
if(id_ret>0)
return id_ret;
return id_ret;
}
ID MainGame::OnLButtonDbClk( UINT nFlags, GPOINT point )
{
ID id_ret = CGsGame::OnLButtonDbClk( nFlags, point );
if(id_ret>0)
return id_ret;
return id_ret;
}
ID MainGame::OnRButtonDown( UINT nFlags, GPOINT point )
{
ID id_ret = CGsGame::OnRButtonDown( nFlags, point );
if(id_ret>0)
return id_ret;
return id_ret;
}
ID MainGame::OnRButtonUp( UINT nFlags, GPOINT point )
{
ID id_ret = CGsGame::OnRButtonUp( nFlags, point );
if(id_ret>0)
return id_ret;
return id_ret;
}
ID MainGame::OnRButtonDbClk( UINT nFlags, GPOINT point )
{
ID id_ret = CGsGame::OnRButtonDbClk( nFlags, point );
if(id_ret>0)
return id_ret;
return id_ret;
}
ID MainGame::OnMouseWheel(UINT nFlags, short zDelta, GPOINT point)
{
ID id_ret = CGsGame::OnMouseWheel(nFlags, zDelta, point);
if(id_ret>0)
return id_ret;
return id_ret;
}
ID MainGame::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar==VK_RETURN)
{
return 0;
}
ID id_ret = CGsGame::OnChar(nChar, nRepCnt, nFlags);
if(id_ret>0)
return id_ret;
return id_ret;
}
ID MainGame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
ID id_ret = CGsGame::OnKeyDown(nChar, nRepCnt, nFlags);
// if(id_ret>0)
// return id_ret;
// CPlayer* pPlayer = GetPlayer();
if(m_ptr_player)
{
switch(nChar)
{
case VK_SPACE:
case VK_UP:
if(m_is_playing && m_ptr_player && m_ptr_player->IsReady())
{
DWORD dwTime = Sys_GetTime();
if(dwTime-m_msg_holder["shoot"]>300)
{
m_ptr_player->m_is_shoot_shaking = FALSE;
m_msg_holder["shoot"] = dwTime;
m_ptr_player->Shoot();
}
}
break;
case VK_LEFT:
if(m_is_playing && m_ptr_player && m_ptr_player->IsReady())
{
m_ptr_player->on_msg_pointer(_UI_CMD_TURN_LEFT);
DWORD dwTime = Sys_GetTime();
if(dwTime-m_msg_holder["turn_left"]>200)
{
m_msg_holder["turn_left"] = dwTime;
NET_Packet* pPacket = new NET_Packet;
pPacket->setCmd(GSP_UI_CMD);
pPacket->write32(m_id_player);
pPacket->write16(_UI_CMD_TURN_LEFT);
m_socket.PushSendPacket(1, pPacket);
}
}
break;
case VK_RIGHT:
if(m_is_playing && m_ptr_player && m_ptr_player->IsReady())
{
m_ptr_player->on_msg_pointer(_UI_CMD_TURN_RIGHT);
DWORD dwTime = Sys_GetTime();
if(dwTime-m_msg_holder["turn_right"]>200)
{
m_msg_holder["turn_right"] = dwTime;
NET_Packet* pPacket = new NET_Packet;
pPacket->setCmd(GSP_UI_CMD);
pPacket->write32(m_id_player);
pPacket->write16(_UI_CMD_TURN_RIGHT);
m_socket.PushSendPacket(1, pPacket);
}
}
break;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
if(m_is_playing && m_ptr_player && m_ptr_player->IsReady() && m_ptr_player->num_bubble_store>=8)
{
DWORD dwTime = Sys_GetTime();
if(dwTime-m_msg_holder["use_bubble"]>500)
{
int obj_idx = nChar - '1';
if (m_index[obj_idx]>=0 && player[m_index[obj_idx]]>0)
{
m_msg_holder["use_bubble"] = dwTime;
query_handle_player(player[m_index[obj_idx]]);
}
}
}
else if (m_is_playing && m_ptr_player && m_ptr_player->GetState()==PLAYER_STATE_LOST)
{
STRUCT_ADD_USER* pUser = GetUser(m_id_player);
if (pUser==NULL || pUser->n_score<=0)
{
break;
}
DWORD dwTime = Sys_GetTime();
if(dwTime-m_msg_holder["use_bubble"]>5000)
{
int obj_idx = nChar - '1';
if (obj_idx!=0 && m_index[obj_idx]>=0 && player[m_index[obj_idx]]>0)
{
m_msg_holder["use_bubble"] = dwTime;
query_handle_player(player[m_index[obj_idx]]);
}
}
}
break;
}
}
return id_ret;
}
void MainGame::query_handle_player(ULONG id_player)
{
NET_Packet* pPacket = new NET_Packet;
pPacket->setCmd(GSP_HANDLE_PLAYER);
STRUCT_HANDLE_PLAYER shp;
shp.user = m_id_player;
shp.object = id_player;
pPacket->writeData(&shp, sizeof(shp));
m_socket.PushSendPacket(1, pPacket);
}
ID MainGame::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
ID id_ret = CGsGame::OnKeyUp(nChar, nRepCnt, nFlags);
// if(id_ret>0)
// return id_ret;
CPlayer* pPlayer = GetPlayer();
switch(nChar)
{
case VK_LEFT:
if(m_is_playing && pPlayer && pPlayer->IsReady())
{
pPlayer->on_msg_pointer(_UI_CMD_HODE_LEFT);
DWORD dwTime = Sys_GetTime();
if(dwTime-m_msg_holder["hold_left"]>200)
{
m_msg_holder["hold_left"] = dwTime;
NET_Packet* pPacket = new NET_Packet;
pPacket->setCmd(GSP_UI_CMD);
pPacket->write32(m_id_player);
pPacket->write16(_UI_CMD_HODE_LEFT);
m_socket.PushSendPacket(1, pPacket);
}
}
break;
case VK_RIGHT:
if(m_is_playing && pPlayer && pPlayer->IsReady())
{
pPlayer->on_msg_pointer(_UI_CMD_HODE_RIGHT);
DWORD dwTime = Sys_GetTime();
if(dwTime-m_msg_holder["hold_right"]>200)
{
m_msg_holder["hold_right"] = dwTime;
NET_Packet* pPacket = new NET_Packet;
pPacket->setCmd(GSP_UI_CMD);
pPacket->write32(m_id_player);
pPacket->write16(_UI_CMD_HODE_RIGHT);
m_socket.PushSendPacket(1, pPacket);
}
}
break;
}
CGsUIPanel* pPanel = m_pEngine->FindUIFromName("input_msg");
if(nChar==VK_RETURN)
{
if(pPanel)
{
if(pPanel->IsFocus())
{
pPanel->SetFocus(FALSE);
//query_speek(m_id_player, pPanel->GetCaption());
int len = strlen(pPanel->GetCaption());
if (len>0 && len<LIMIT_TALK_STRING)
{
NET_Packet* pPacket = new NET_Packet;
if (m_is_broadcast || m_id_player_talk==0)
{
pPacket->setCmd(GSP_SPEEK);
pPacket->write16(uid);
pPacket->writeString(pPanel->GetCaption());
m_socket.PushSendPacket(1, pPacket);
}
else
{
pPacket->setCmd(GSP_TALK);
pPacket->write32(m_id_player_talk);
pPacket->writeString(pPanel->GetCaption());
m_socket.PushSendPacket(1, pPacket);
}
}
pPanel->SetCaption("");
}
else
{
pPanel->SetFocus(TRUE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -