📄 gm_ui_minimap.cpp
字号:
// GM_UI_MiniMap.cpp: implementation of the GM_UI_MiniMap class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GM_UI_MiniMap.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GM_UI_Minimap::GM_UI_Minimap(CGsUIPanel* pParent)
:CGsUIPanel(pParent),
m_MiniMap(pParent->GetGsEngine())
{
m_pWorld = NULL;
m_key_style = "minimap";
m_isVisible = true;
m_isEnable = true;
m_rcClient = GRECT(0,0,100,100);
m_rcHeader = m_rcClient;
m_rcMap = GRECT(0,0,0,0);
m_rcView = GRECT(0,0,0,0);
m_size_margin = 2;
m_panel_color = D3DRGBA(0.3F, 0.3F, 0.7F, 0.6F);
m_fScaleW = 0;
m_fScaleH = 0;
m_can_move = TRUE;
RestoreSource();
}
BOOL GM_UI_Minimap::SetUISize(LONG width, LONG height)
{
m_rcClient.right = m_rcClient.left + width;
m_rcClient.bottom = m_rcClient.top + height;
m_rcHeader = m_rcClient;
ReleaseSource();
return SUCCEEDED(RestoreSource());
}
GM_UI_Minimap::~GM_UI_Minimap()
{
}
VOID GM_UI_Minimap::ReleaseSource()
{
m_MiniMap.ReleaseObjects();
// return S_OK;
}
HRESULT GM_UI_Minimap::RestoreSource()
{
m_MiniMap.CreateEx(m_rcClient.width(),m_rcClient.height());
GRECT rc = GRECT(0,0,m_rcClient.width(),m_rcClient.height());
m_MiniMap.Clear(m_MiniMap.ConvertColor(m_panel_color), &rc);
OnInitWorld();
return S_OK;
}
LONG GM_UI_Minimap::OnUpdate()
{
return CGsUIPanel::OnUpdate();
}
HRESULT GM_UI_Minimap::OnDraw(GPOINT point)
{
HRESULT hr = CGsUIPanel::OnDraw(point);
if(FAILED(hr))
return hr;
hr = m_pEngine->Render_PaintFast(point.x, point.y, &m_MiniMap, m_isBackLayer ? 1.0f : 0.0f);
if(FAILED(hr))
return hr;
GRECT rc = m_rcView + point;
hr = m_pEngine->Render_DrawRect(&rc, false, D3DRGBA(0.1F, 0.1F, 0.9F, 0.8F), m_isBackLayer ? 1.0f : 0.0f);
return hr;
}
//VOID GM_UI_Minimap::OnTouch(BOOL bTouch)
//{
//}
//VOID GM_UI_Minimap::OnClick()
//{
//}
ID GM_UI_Minimap::OnMouseMove( UINT nFlags, GPOINT point )
{
if(is_point_in_rect(point, m_rcMap) && !m_isDrag)
{
switch(nFlags)
{
case MK_LBUTTON:
{
if(m_pWorld)
{
GPOINT pt = point - m_rcMap.top_left() - GPOINT(m_rcView.width()/2,m_rcView.height()/2);
m_pWorld->SetOriginal(pt.x*m_fScaleW, pt.y*m_fScaleH);
}
}
break;
case MK_RBUTTON:
break;
default:
break;
};
return m_ID;
}
return CGsUIPanel::OnMouseMove( nFlags, point );
}
ID GM_UI_Minimap::OnMouseWheel( UINT nFlags, short zDelta, GPOINT point )
{
if(is_point_in_rect(point, m_rcMap))
return m_ID;
return CGsUIPanel::OnMouseWheel( nFlags, zDelta, point );
}
ID GM_UI_Minimap::OnLButtonDown( UINT nFlags, GPOINT point )
{
if(is_point_in_rect(point, m_rcMap))
return m_ID;
return CGsUIPanel::OnLButtonDown( nFlags, point );
}
ID GM_UI_Minimap::OnLButtonUp( UINT nFlags, GPOINT point )
{
if(m_pWorld && is_point_in_rect(point, m_rcMap))
{
GPOINT pt = point - m_rcMap.top_left() - GPOINT(m_rcView.width()/2,m_rcView.height()/2);
m_pWorld->SetOriginal(pt.x*m_fScaleW, pt.y*m_fScaleH);
return m_ID;
}
return CGsUIPanel::OnLButtonUp( nFlags, point );
}
ID GM_UI_Minimap::OnLButtonDbClk( UINT nFlags, GPOINT point )
{
if(is_point_in_rect(point, m_rcMap))
return m_ID;
return CGsUIPanel::OnLButtonDbClk( nFlags, point );
}
ID GM_UI_Minimap::OnRButtonDown( UINT nFlags, GPOINT point )
{
if(is_point_in_rect(point, m_rcMap))
return m_ID;
return CGsUIPanel::OnRButtonDown( nFlags, point );
}
ID GM_UI_Minimap::OnRButtonUp( UINT nFlags, GPOINT point )
{
if(is_point_in_rect(point, m_rcMap))
return m_ID;
return CGsUIPanel::OnRButtonUp( nFlags, point );
}
ID GM_UI_Minimap::OnRButtonDbClk( UINT nFlags, GPOINT point )
{
return CGsUIPanel::OnRButtonDbClk( nFlags, point );
}
ID GM_UI_Minimap::OnChar( UINT nChar, UINT nRepCnt, UINT nFlags )
{
return CGsUIPanel::OnKeyUp(nChar, nRepCnt, nFlags);
}
ID GM_UI_Minimap::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
return CGsUIPanel::OnKeyUp(nChar, nRepCnt, nFlags);
}
ID GM_UI_Minimap::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
return CGsUIPanel::OnKeyUp(nChar, nRepCnt, nFlags);
}
VOID GM_UI_Minimap::OnNotify(ID ,KEY key)
{
return;
}
BOOL GM_UI_Minimap::OnInitWorld()
{
if(NULL==m_pWorld)
return FALSE;
LONG width = m_rcClient.width()-2*m_size_margin;//m_MiniMap.GetWidth();
LONG height = m_rcClient.height()-2*m_size_margin;//m_MiniMap.GetHeight();
if(width<=0 || height<=0 || m_pWorld->GetWidthPix()<=0 || m_pWorld->GetHeightPix()<=0)
return FALSE;
GRECT rcSrc(0,0,m_pWorld->GetWidthPix(), m_pWorld->GetHeightPix());
float sw = (float)m_pWorld->GetWidthPix()/(float)width;
float sh = (float)m_pWorld->GetHeightPix()/(float)height;
GRECT rcDest(m_size_margin,m_size_margin,m_size_margin,m_size_margin);
if(sw>sh)
{
rcDest.right += width;
LONG a = height-m_pWorld->GetHeightPix()/sw;
rcDest.top += a/2;
rcDest.bottom += height-a/2;
m_fScaleW = sw;
m_fScaleH = (float)m_pWorld->GetHeightPix()/(float)rcDest.height();
}
else
{
rcDest.bottom += height;
LONG a = width-m_pWorld->GetWidthPix()/sh;
rcDest.left += a/2;
rcDest.right += width-a/2;
m_fScaleW = (float)m_pWorld->GetWidthPix()/(float)rcDest.width();
m_fScaleH = sh;
}
m_rcMap = rcDest;
CGsTexture tex(m_pEngine);
tex.CreateEx(rcDest.width(), rcDest.height());
if(FAILED(tex.LoadFromSurface(NULL, m_pWorld->GetBackGroup()->GetCurrentFrame(), &rcSrc)))
{
return FALSE;
}
m_MiniMap.Blt(&rcDest, &tex, NULL);
// m_MiniMap.Blt(&rcDest, m_pWorld->GetBackGroup()->GetCurrentFrame(), NULL);
return TRUE;
}
VOID GM_UI_Minimap::SetPanelColor(D3DCOLOR color)
{
m_panel_color = color;
GRECT rc = GRECT(0,0,m_rcClient.width(),m_rcClient.height());
m_MiniMap.Clear(m_MiniMap.ConvertColor(m_panel_color), &rc);
OnInitWorld();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -