1
0

BiomeVisualiser: Added zooming using the 1 - 8 keys.

This commit is contained in:
Matyas Dolak 2014-01-10 11:55:43 +01:00
parent 00af5d4d6e
commit 8104f611f1
6 changed files with 76 additions and 20 deletions

View File

@ -1,3 +1,4 @@
Debug/ Debug/
logs/ logs/
Release/ Release/
Release profiled/

View File

@ -40,10 +40,10 @@ bool cBiomeRenderer::Render(cPixmap & a_Pixmap)
int Hei = a_Pixmap.GetHeight(); int Hei = a_Pixmap.GetHeight();
// Hint the approximate view area to the biome source so that it can adjust its caches: // Hint the approximate view area to the biome source so that it can adjust its caches:
int MinBlockX = ( - m_OriginX) / m_Zoom; int MinBlockX = ( - m_OriginX) * m_Zoom;
int MaxBlockX = (Wid - m_OriginX) / m_Zoom; int MaxBlockX = (Wid - m_OriginX) * m_Zoom;
int MinBlockZ = ( - m_OriginY) / m_Zoom; int MinBlockZ = ( - m_OriginY) * m_Zoom;
int MaxBlockZ = (Hei - m_OriginY) / m_Zoom; int MaxBlockZ = (Hei - m_OriginY) * m_Zoom;
m_Cache.HintViewArea(MinBlockX / 16 - 1, MaxBlockX / 16 + 1, MinBlockZ / 16 - 1, MaxBlockZ / 16 + 1); m_Cache.HintViewArea(MinBlockX / 16 - 1, MaxBlockX / 16 + 1, MinBlockZ / 16 - 1, MaxBlockZ / 16 + 1);
// Hold one current chunk of biome data: // Hold one current chunk of biome data:
@ -55,12 +55,12 @@ bool cBiomeRenderer::Render(cPixmap & a_Pixmap)
for (int y = 0; y < Hei; y++) for (int y = 0; y < Hei; y++)
{ {
int BlockZ = (y - m_OriginY) / m_Zoom; int BlockZ = (y - m_OriginY) * m_Zoom;
int ChunkZ = (BlockZ >= 0) ? (BlockZ / 16) : ((BlockZ + 1) / 16 - 1); int ChunkZ = (BlockZ >= 0) ? (BlockZ / 16) : ((BlockZ + 1) / 16 - 1);
int RelZ = BlockZ - ChunkZ * 16; int RelZ = BlockZ - ChunkZ * 16;
for (int x = 0; x < Wid; x++) for (int x = 0; x < Wid; x++)
{ {
int BlockX = (x - m_OriginX) / m_Zoom; int BlockX = (x - m_OriginX) * m_Zoom;
int ChunkX = (BlockX >= 0) ? (BlockX / 16) : ((BlockX + 1) / 16 - 1); int ChunkX = (BlockX >= 0) ? (BlockX / 16) : ((BlockX + 1) / 16 - 1);
int RelX = BlockX - ChunkX * 16; int RelX = BlockX - ChunkX * 16;
if ((ChunkZ != CurChunkZ) || (ChunkX != CurChunkX)) if ((ChunkZ != CurChunkZ) || (ChunkX != CurChunkX))

View File

@ -37,6 +37,11 @@ public:
void MoveViewBy(int a_OffsX, int a_OffsY); void MoveViewBy(int a_OffsX, int a_OffsY);
void SetZoom(int a_NewZoom)
{
m_Zoom = a_NewZoom;
}
protected: protected:
cBiomeCache m_Cache; cBiomeCache m_Cache;

View File

@ -67,10 +67,34 @@ void cBiomeViewWnd::InitBiomeView(void)
void cBiomeViewWnd::SetZoom(int a_NewZoom)
{
m_Renderer.SetZoom(a_NewZoom);
Redraw();
}
void cBiomeViewWnd::Redraw(void)
{
if (m_Renderer.Render(m_Pixmap))
{
SetTimer(m_Wnd, TIMER_RERENDER, 200, NULL);
}
InvalidateRect(m_Wnd, NULL, FALSE);
}
LRESULT cBiomeViewWnd::WndProc(HWND a_Wnd, UINT a_Msg, WPARAM wParam, LPARAM lParam) LRESULT cBiomeViewWnd::WndProc(HWND a_Wnd, UINT a_Msg, WPARAM wParam, LPARAM lParam)
{ {
switch (a_Msg) switch (a_Msg)
{ {
case WM_CHAR: return OnChar (wParam, lParam);
case WM_CLOSE: return OnClose (); case WM_CLOSE: return OnClose ();
case WM_COMMAND: return OnCommand (wParam, lParam); case WM_COMMAND: return OnCommand (wParam, lParam);
case WM_LBUTTONDOWN: return OnLButtonDown(wParam, lParam); case WM_LBUTTONDOWN: return OnLButtonDown(wParam, lParam);
@ -86,6 +110,32 @@ LRESULT cBiomeViewWnd::WndProc(HWND a_Wnd, UINT a_Msg, WPARAM wParam, LPARAM lPa
LRESULT cBiomeViewWnd::OnChar(WPARAM wParam, LPARAM lParam)
{
switch (wParam)
{
case '1': SetZoom(1); break;
case '2': SetZoom(2); break;
case '3': SetZoom(3); break;
case '4': SetZoom(4); break;
case '5': SetZoom(5); break;
case '6': SetZoom(6); break;
case '7': SetZoom(7); break;
case '8': SetZoom(8); break;
case 27:
{
// Esc pressed, exit
PostQuitMessage(0);
break;
}
}
return 0;
}
LRESULT cBiomeViewWnd::OnClose(void) LRESULT cBiomeViewWnd::OnClose(void)
{ {
PostQuitMessage(0); PostQuitMessage(0);
@ -126,12 +176,8 @@ LRESULT cBiomeViewWnd::OnMouseMove(WPARAM wParam, LPARAM lParam)
POINT pnt; POINT pnt;
GetCursorPos(&pnt); GetCursorPos(&pnt);
m_Renderer.MoveViewBy(pnt.x - m_MouseDown.x, pnt.y - m_MouseDown.y); m_Renderer.MoveViewBy(pnt.x - m_MouseDown.x, pnt.y - m_MouseDown.y);
if (m_Renderer.Render(m_Pixmap))
{
SetTimer(m_Wnd, TIMER_RERENDER, 200, NULL);
}
m_MouseDown = pnt; m_MouseDown = pnt;
InvalidateRect(m_Wnd, NULL, FALSE); Redraw();
return 0; return 0;
} }

View File

@ -48,9 +48,13 @@ protected:
void InitBiomeView(void); void InitBiomeView(void);
void SetZoom(int a_NewZoom);
void Redraw(void);
LRESULT WndProc(HWND a_Wnd, UINT a_Msg, WPARAM wParam, LPARAM lParam); LRESULT WndProc(HWND a_Wnd, UINT a_Msg, WPARAM wParam, LPARAM lParam);
// Message handlers: // Message handlers:
LRESULT OnChar (WPARAM wParam, LPARAM lParam);
LRESULT OnClose (void); LRESULT OnClose (void);
LRESULT OnCommand (WPARAM wParam, LPARAM lParam); LRESULT OnCommand (WPARAM wParam, LPARAM lParam);
LRESULT OnLButtonDown(WPARAM wParam, LPARAM lParam); LRESULT OnLButtonDown(WPARAM wParam, LPARAM lParam);

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="windows-1250"?> <?xml version="1.0" encoding="windows-1250"?>
<VisualStudioProject <VisualStudioProject
ProjectType="Visual C++" ProjectType="Visual C++"
Version="9,00" Version="9.00"
Name="BiomeVisualiser" Name="BiomeVisualiser"
ProjectGUID="{6DF3D88B-AD47-45B6-B831-1BDE74F86B5C}" ProjectGUID="{6DF3D88B-AD47-45B6-B831-1BDE74F86B5C}"
RootNamespace="BiomeVisualiser" RootNamespace="BiomeVisualiser"
@ -272,6 +272,10 @@
RelativePath=".\BiomeColors.cpp" RelativePath=".\BiomeColors.cpp"
> >
</File> </File>
<File
RelativePath=".\BiomeColors.h"
>
</File>
<File <File
RelativePath=".\BiomeRenderer.cpp" RelativePath=".\BiomeRenderer.cpp"
> >
@ -501,10 +505,6 @@
</Filter> </Filter>
</Filter> </Filter>
</Filter> </Filter>
<File
RelativePath=".\BiomeColors.h"
>
</File>
</Files> </Files>
<Globals> <Globals>
</Globals> </Globals>