⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maingame.cpp

📁 网络泡泡被.net管理
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			//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 + -