📄 maingame.cpp
字号:
// }
// D3DCOLOR color = RGBA_MAKE(96,96,96,255);
D3DCOLOR color = RGBA_MAKE(46,46,46,255);
m_aVertex[0].tu = left;
m_aVertex[0].tv = top;
m_aVertex[0].color = color;
m_aVertex[1].tu = right;
m_aVertex[1].tv = top;
m_aVertex[1].color = color;
m_aVertex[2].tu = left;
m_aVertex[2].tv = bottom;
m_aVertex[2].color = color;
m_aVertex[3].tu = right;
m_aVertex[3].tv = bottom;
m_aVertex[3].color = color;
LPDIRECT3DDEVICE7 pDevice = m_pEngine->GetD3dDevice();
pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE);
pDevice->SetRenderState(D3DRENDERSTATE_ZENABLE, false);
pDevice->SetTexture( 0, pTexture->GetDDrawSurface() );
{
pDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,
D3DFVF_TLVERTEX,
(LPVOID)m_aVertex,
4,
0 );
}
// m_pEngine->PreparePaint();
// m_pEngine->DarkenScene(1.9f);
m_world.Render();
m_pEngine->PreparePaint();
hr = RenderUI();
//画经验条
Game_Unit* pUnit = GetControlUnit();
if(pUnit)
{
m_pEngine->PreparePaint();
m_pEngine->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
GRECT rc(150,555,600,562);
m_pEngine->Render_DrawRect(&rc, TRUE, RGBA_MAKE(0,0,255,50), 0.0f);
if(pUnit->exp_level_up!=pUnit->exp_level && pUnit->base_experience>pUnit->exp_level)
{
rc.right = rc.left + rc.width()*(pUnit->base_experience-pUnit->exp_level)/(pUnit->exp_level_up-pUnit->exp_level);
m_pEngine->Render_DrawRect(&rc, TRUE, RGBA_MAKE(126,255,255,200), 0.0f);
}
if(!pUnit->is_death())
{
m_pEngine->Render_DrawRect(&m_rc_energy, TRUE, RGBA_MAKE(126,255,255,50), 0.0f);
int power = Sys_GetTime()-pUnit->m_map_query_holder["melee"];
m_rc_power.top = 400 - power/10.0f;
if(m_rc_power.top<100)
m_rc_power.top = 100;
if(power>3000)
{
int cr = m_pEngine->ValueCycle(128, 255, 0, 100);
m_pEngine->Render_DrawRect(&m_rc_power, TRUE, RGBA_MAKE(cr,cr,150,250), 0.0f);
}
else if(power>1000)
{
int cr = m_pEngine->ValueCycle(78, 250, 0, 300);
m_pEngine->Render_DrawRect(&m_rc_power, TRUE, RGBA_MAKE(150,cr,70,250), 0.0f);
}
else if(power>500)
{
int cr = m_pEngine->ValueCycle(78, 200, 0, 700);
m_pEngine->Render_DrawRect(&m_rc_power, TRUE, RGBA_MAKE(150,cr,0,250), 0.0f);
}
else
{
m_pEngine->Render_DrawRect(&m_rc_power, TRUE, RGBA_MAKE(150,150,0,250), 0.0f);
}
}
//画魔法图标
m_pEngine->PreparePaint();
for(int i=0; i<8; i++)
{
D3DCOLOR cr = D3DRGBA(0.5f, 0.5f, 0.5f, 1.0f);
if(!pUnit->m_ani_spell.IsReady()
||(pUnit->m_ani_ranged.IsReady() && i>=4))
{
cr = D3DRGBA(0.3f, 0.3f, 0.3f, 0.8f);
}
if(m_magic_list[i].use>0)
{
m_magic_list[i].use -= m_pEngine->m_dwPassTime;
float fcr = m_pEngine->ValueCycle(0.5, 1.0, 0, 200);
cr = D3DRGBA(fcr, fcr, fcr, 1.0f);
}
if(m_select_magic == i)
{
float fv = m_pEngine->ValueCycle(0.6f, 1.0f, 0, 500);
m_magic_list[i].icon.DrawFast(40, 50+i*50, 1.0f, 0.6f, 0.6f, 1.0f, cr);
m_magic_list[i].icon.DrawFast(40, 50+i*50, 1.0f, fv, fv, 0.5f);
//m_pEngine->Render_PaintFast(40, 50+i*50, m_magic_list[i].icon.GetCurrentFrame(), 1.0f, 0.6f, 0.6f, 1.0f, cr);
//m_pEngine->Render_PaintFast(40, 50+i*50, m_magic_list[i].icon.GetCurrentFrame(), 1.0f, fv, fv, 0.5f);
}
else
m_magic_list[i].icon.DrawFast(40, 50+i*50, 1.0f, 0.6f, 0.6f, 1.0f, cr);
//_pEngine->Render_PaintFast(40, 50+i*50, m_magic_list[i].icon.GetCurrentFrame(), 1.0f, 0.6f, 0.6f, 1.0f, cr);
}
}
}
return hr;
}
HRESULT MainGame::Draw(CGsSurface *pSurface)
{
//Sys_Log(NULL, "begin draw time = %d", Sys_GetTime());
char strMouse[100];
LONG x = m_pEngine->m_Pos.x + m_world.m_rcOriginalPix.left;
LONG y = m_pEngine->m_Pos.y + m_world.m_rcOriginalPix.top;
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));
sprintf(strMouse, "世界坐标X: %5d", x);
pSurface->DrawTextDirect(NULL, strMouse, 200, 10, RGB(255,255,255), RGB(0,0,0));
sprintf(strMouse, "世界坐标Y: %5d", y);
pSurface->DrawTextDirect(NULL, strMouse, 200, 26, RGB(255,255,255), RGB(0,0,0));
m_world.PickFlatGrid(x,y);
sprintf(strMouse, "格子坐标X: %5d", x);
pSurface->DrawTextDirect(NULL, strMouse, 20, m_pEngine->GetRenderHeight() - 50, RGB(255,255,255), RGB(1,1,1));
sprintf(strMouse, "格子坐标Y: %5d", y);
pSurface->DrawTextDirect(NULL, strMouse, 20, m_pEngine->GetRenderHeight() - 30, RGB(255,255,255), RGB(1,1,1));
pSurface->DrawTextDirect(NULL, m_str_net_speed, m_pEngine->GetRenderWidth()-100, m_pEngine->GetRenderHeight() - 30, RGB(255,255,255), RGB(1,1,1));
Game_Unit* pUnit = GetControlUnit();
if(pUnit)
{
for(int i=0; i<8; i++)
{
sprintf(strMouse, "F%d", i+1);
pSurface->DrawTextDirect(NULL, strMouse, 15, 30+i*50, RGB(255,214,55), RGB(0,0,0));
}
sprintf(strMouse, "杀怪次数: %d", (LONG)pUnit->count_hunter);
pSurface->DrawTextDirect(NULL, strMouse, 450, 10, RGB(255,185,55));//, RGB(1,1,1));
sprintf(strMouse, "杀人次数: %d", (LONG)pUnit->count_pk);
pSurface->DrawTextDirect(NULL, strMouse, 450, 30, RGB(255,205,155));//, RGB(1,1,1));
sprintf(strMouse, "死亡次数: %d", (LONG)pUnit->count_die);
pSurface->DrawTextDirect(NULL, strMouse, 450, 50, RGB(255,55,55));//, RGB(1,1,1));
sprintf(strMouse, "等级: %d", (LONG)pUnit->base_level);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 190, RGB(255,255,255));//, RGB(1,1,1));
sprintf(strMouse, "经验: %d/%d", (LONG)pUnit->base_experience, pUnit->exp_level_up);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 170, RGB(255,255,255));//, RGB(1,1,1));
sprintf(strMouse, "攻击: %d", (LONG)pUnit->base_damage);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 150, RGB(255,255,255));//, RGB(1,1,1));
sprintf(strMouse, "力量: %d", (LONG)pUnit->base_strength);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 130, RGB(255,255,255));//, RGB(1,1,1));
sprintf(strMouse, "敏捷: %d", (LONG)pUnit->base_agility);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 110, RGB(255,255,255));//, RGB(1,1,1));
sprintf(strMouse, "魔力: %d", (LONG)pUnit->base_magic);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 90, RGB(255,255,255));//, RGB(1,1,1));
sprintf(strMouse, "生命: %d/%d", (LONG)pUnit->life, (LONG)pUnit->base_life);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 70, RGB(255,255,255));//, RGB(1,1,1));
sprintf(strMouse, "魔法: %d/%d", (LONG)pUnit->mana, (LONG)pUnit->base_mana);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 50, RGB(255,255,255));//, RGB(1,1,1));
Game_Unit* pUnit_aim = (Game_Unit*)m_world.GetObject(pUnit->m_aim_unit);
if(pUnit_aim)
{
sprintf(strMouse, "名称: %s", pUnit_aim->GetName());
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 10, RGB(255,155,155));//, RGB(1,1,1));
sprintf(strMouse, "等级: %d", (LONG)pUnit_aim->base_level);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 30, RGB(255,55,55));//, RGB(1,1,1));
sprintf(strMouse, "攻击: %d", (LONG)pUnit_aim->base_damage);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 50, RGB(255,55,55));//, RGB(1,1,1));
sprintf(strMouse, "力量: %d", (LONG)pUnit_aim->base_strength);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 70, RGB(255,55,55));//, RGB(1,1,1));
sprintf(strMouse, "敏捷: %d", (LONG)pUnit_aim->base_agility);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 90, RGB(255,55,55));//, RGB(1,1,1));
sprintf(strMouse, "魔力: %d", (LONG)pUnit_aim->base_magic);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 110, RGB(255,55,55));//, RGB(1,1,1));
sprintf(strMouse, "生命: %d/%d", (LONG)pUnit_aim->life, (LONG)pUnit_aim->base_life);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 130, RGB(255,55,55));//, RGB(1,1,1));
if(pUnit_aim->base_mana>0)
{
sprintf(strMouse, "魔法: %d/%d", (LONG)pUnit_aim->mana, (LONG)pUnit_aim->base_mana);
pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 150, RGB(255,55,55));//, RGB(1,1,1));
}
}
}
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(),
20,
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++;
}
// Sys_Log(NULL, "end draw time = %d", Sys_GetTime());
return S_OK;
}
VOID MainGame::Cleanup()
{
CGsGame::Cleanup();
}
VOID MainGame::ReleaseSource()
{
// m_ani_select_unit.ReleaseSource();
// m_ani_light_shadow.ReleaseSource();
// m_ani_dreamland.ReleaseSource();
// m_ani_test.ReleaseSource();
m_tex_game_msg.ReleaseObjects();
m_world.ReleaseSource();
CGsGame::ReleaseSource();
}
HRESULT MainGame::RestoreSource()
{
// m_ani_select_unit.RestoreSource();
// m_ani_light_shadow.RestoreSource();
// m_ani_dreamland.RestoreSource();
// m_ani_test.RestoreSource();
m_ani_light_shadow.GetTextureGroup()->SetBasePoint(64,64);
m_tex_game_msg.RestoreObjects();
m_world.RestoreSource();
return CGsGame::RestoreSource();
}
BOOL MainGame::InitGame()
{
// std::string str = CGsFunc::GetGsApp()->GetAppPath(NULL);
// str += "\\server.ini";
// if(FALSE==LoadConfig())
// return FALSE;
m_ani_select_unit.SetGsEngine(m_pEngine);
m_ani_select_unit.Create("ani\\select_4");
m_ani_light_shadow.SetGsEngine(m_pEngine);
m_ani_light_shadow.Create("particle.bmp");
m_ani_light_shadow.GetTextureGroup()->SetBasePoint(64,64);
m_ani_dreamland.SetGsEngine(m_pEngine);
// m_ani_dreamland.Create("land.jpg");//"animation\\effect\\caust");
m_ani_dreamland.Create("land_grass.txg");
m_ani_dreamland.SetCache(0);
// m_ani_magic_skill.SetGsEngine(m_pEngine);
// m_ani_magic_skill.Create("magic\\icon\\small.txg");
//m_ani_magic_skill.SetCache(0);
m_ani_dreamland.Play();
// m_bk_music.SetStreamSource("music\\battle_5.mp3");
m_bk_music.SetLooping(FALSE);
// m_bk_music.Play();
m_magic_list[0].type = 2001;
m_magic_list[0].use = 0;
m_magic_list[0].icon.SetGsEngine(m_pEngine);
m_magic_list[0].icon.Create("magic\\icon\\small.txg,18");
m_magic_list[1].use = 0;
m_magic_list[1].type = 2002;
m_magic_list[1].icon.SetGsEngine(m_pEngine);
m_magic_list[1].icon.Create("magic\\icon\\death.txg,3");
m_magic_list[2].type = 2003;
m_magic_list[2].use = 0;
m_magic_list[2].icon.SetGsEngine(m_pEngine);
m_magic_list[2].icon.Create("magic\\icon\\small.txg,11");
m_magic_list[3].type = 2004;
m_magic_list[3].use = 0;
m_magic_list[3].icon.SetGsEngine(m_pEngine);
m_magic_list[3].icon.Create("magic\\icon\\small.txg,31");
m_magic_list[4].type = 2051;
m_magic_list[4].use = 0;
m_magic_list[4].icon.SetGsEngine(m_pEngine);
m_magic_list[4].icon.Create("magic\\icon\\small.txg,5");
m_magic_list[5].type = 2052;
m_magic_list[5].use = 0;
m_magic_list[5].icon.SetGsEngine(m_pEngine);
m_magic_list[5].icon.Create("magic\\icon\\small.txg,15");
m_magic_list[6].type = 2053;
m_magic_list[6].use = 0;
m_magic_list[6].icon.SetGsEngine(m_pEngine);
m_magic_list[6].icon.Create("magic\\icon\\small.txg,10");
m_magic_list[7].type = 2054;
m_magic_list[7].use = 0;
m_magic_list[7].icon.SetGsEngine(m_pEngine);
m_magic_list[7].icon.Create("magic\\icon\\small.txg,1");
if(!IsReady())
{
return FALSE;
}
// Login();
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_want_unit_light = g_config.GetBOOL("EFFECT", "want_unit_light", "false");
// m_is_show_fps = g_config.GetBOOL("MAIN", "show_fps");
return TRUE;
}
Game_Unit* MainGame::GetControlUnit()
{
GM_Object* pObj = m_world.GetObject(m_id_player);
Game_Unit* pUnit = (Game_Unit*)pObj;//dynamic_cast<GM_Unit*>(pObj);
return pUnit;
}
BOOL MainGame::StartGame()
{
// BOOL bRet = m_world.CreateWorld("image\\jpeg\\map.JPG");
// m_world.SetDrawGridFlag(DRAW_GRID_FRAME|DRAW_GRID_OBJECT);
BOOL bRet = m_world.CreateWorld(4000,4000);
m_tex_game_msg.CreateEx(512, 256);
GetMainUI()->Create("ui\\main.ini");
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;
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 *strSpeek)
{
Game_Unit* pUnit = (Game_Unit*)m_world.GetObject(uid_speeker);
if(pUnit)
{
pUnit->SetSpeekText(strSpeek);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -