diff --git a/source/glest_game/graphics/renderer.cpp b/source/glest_game/graphics/renderer.cpp index 3cab56f3..3ffc799e 100644 --- a/source/glest_game/graphics/renderer.cpp +++ b/source/glest_game/graphics/renderer.cpp @@ -3858,4 +3858,201 @@ VisibleQuadContainerCache & Renderer::getQuadCache( bool updateOnDirtyFrame, return quadCache; } +void Renderer::renderMapPreview( const MapPreview *map, bool renderAll, + int screenPosX, int screenPosY) { + float alt=0; + float showWater=0; + int renderMapHeight=64; + int renderMapWidth=64; + float cellSize=2; + float playerCrossSize=2; + float clientW=renderMapWidth*cellSize; + float clientH=renderMapHeight*cellSize;; + + const Metrics &metrics= Metrics::getInstance(); + + // stretch small maps to 128x128 + if(map->getW() < map->getH()) { + cellSize = cellSize * renderMapHeight / map->getH(); + } + else { + cellSize = cellSize * renderMapWidth / map->getW(); + } + + assertGl(); + + glFrontFace(GL_CW); + glEnable(GL_CULL_FACE); + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + + glLoadIdentity(); + // glViewport(screenPosX, screenPosY, sizeH,sizeW); + // glOrtho(0, clientW, 0, clientH, -1, 1); + glOrtho(0, metrics.getVirtualW(), 0, metrics.getVirtualH(), 0, 1); + + glMatrixMode(GL_MODELVIEW); + + glPushMatrix(); + glLoadIdentity(); + glTranslatef(static_cast(screenPosX),static_cast(screenPosY)-clientH,0.0f); + + glPushAttrib(GL_CURRENT_BIT); + //glTranslatef(static_cast(x), static_cast(y), 0.0f); + glLineWidth(1); + //glClear(GL_COLOR_BUFFER_BIT); + glColor3f(0, 0, 0); + + for (int j = 0; j < map->getH(); j++) { + for (int i = 0; i < map->getW(); i++) { + //surface + alt = map->getHeight(i, j) / 20.f; + showWater = map->getWaterLevel()/ 20.f - alt; + showWater = (showWater > 0)? showWater:0; + Vec3f surfColor; + switch (map->getSurface(i, j)) { + case st_Grass: surfColor = Vec3f(0.0, 0.8f * alt, 0.f + showWater); break; + case st_Secondary_Grass: surfColor = Vec3f(0.4f * alt, 0.6f * alt, 0.f + showWater); break; + case st_Road: surfColor = Vec3f(0.6f * alt, 0.3f * alt, 0.f + showWater); break; + case st_Stone: surfColor = Vec3f(0.7f * alt, 0.7f * alt, 0.7f * alt + showWater); break; + case st_Ground: surfColor = Vec3f(0.7f * alt, 0.5f * alt, 0.3f * alt + showWater); break; + } + + glColor3fv(surfColor.ptr()); + + glBegin(GL_TRIANGLE_STRIP); + glVertex2f(i * cellSize, clientH - j * cellSize - cellSize); + glVertex2f(i * cellSize, clientH - j * cellSize); + glVertex2f(i * cellSize + cellSize, clientH - j * cellSize - cellSize); + glVertex2f(i * cellSize + cellSize, clientH - j * cellSize); + glEnd(); + + //objects + if(renderAll == true) { + switch (map->getObject(i, j)) { + case 0: glColor3f(0.f, 0.f, 0.f); break; + case 1: glColor3f(1.f, 0.f, 0.f); break; + case 2: glColor3f(1.f, 1.f, 1.f); break; + case 3: glColor3f(0.5f, 0.5f, 1.f); break; + case 4: glColor3f(0.f, 0.f, 1.f); break; + case 5: glColor3f(0.5f, 0.5f, 0.5f); break; + case 6: glColor3f(1.f, 0.8f, 0.5f); break; + case 7: glColor3f(0.f, 1.f, 1.f); break; + case 8: glColor3f(0.7f, 0.1f, 0.3f); break; + case 9: glColor3f(0.5f, 1.f, 0.1f); break; + case 10: glColor3f(1.f, 0.2f, 0.8f); break;// we don't render unvisible blocking objects + } + + if ( renderAll && (map->getObject(i, j) != 0) && (map->getObject(i, j) != 10) ){ + glPointSize(cellSize / 2.f); + glBegin(GL_POINTS); + glVertex2i(i * cellSize + cellSize / 2, clientH - j * cellSize - cellSize / 2); + glEnd(); + } + } + +// bool found = false; + + //height lines +// if (!found) { + + //left + if (i > 0 && map->getHeight(i - 1, j) > map->getHeight(i, j)) { + glColor3fv((surfColor*0.5f).ptr()); + glBegin(GL_LINES); + glVertex2f(i * cellSize, clientH - (j + 1) * cellSize); + glVertex2f(i * cellSize, clientH - j * cellSize); + glEnd(); + } + //down + if (j > 0 && map->getHeight(i, j - 1) > map->getHeight(i, j)) { + glColor3fv((surfColor*0.5f).ptr()); + glBegin(GL_LINES); + glVertex2f(i * cellSize, clientH - j * cellSize); + glVertex2f((i + 1) * cellSize, clientH - j * cellSize); + glEnd(); + } + + + //left + if (i > 0 && map->getHeight(i - 1, j) < map->getHeight(i, j)) { + glColor3fv((surfColor*2.f).ptr()); + glBegin(GL_LINES); + glVertex2f(i * cellSize, clientH - (j + 1) * cellSize); + glVertex2f(i * cellSize, clientH - j * cellSize); + glEnd(); + } + if (j > 0 && map->getHeight(i, j - 1) < map->getHeight(i, j)) { + glColor3fv((surfColor*2.f).ptr()); + glBegin(GL_LINES); + glVertex2f(i * cellSize, clientH - j * cellSize); + glVertex2f((i + 1) * cellSize, clientH - j * cellSize); + glEnd(); + } +// } + + //resources + if(renderAll == true) { + switch (map->getResource(i, j)) { + case 1: glColor3f(1.f, 1.f, 0.f); break; + case 2: glColor3f(0.5f, 0.5f, 0.5f); break; + case 3: glColor3f(1.f, 0.f, 0.f); break; + case 4: glColor3f(0.f, 0.f, 1.f); break; + case 5: glColor3f(0.5f, 0.5f, 1.f); break; + } + + if (renderAll && map->getResource(i, j) != 0) { + glBegin(GL_LINES); + glVertex2f(i * cellSize, clientH - j * cellSize - cellSize); + glVertex2f(i * cellSize + cellSize, clientH - j * cellSize); + glVertex2f(i * cellSize, clientH - j * cellSize); + glVertex2f(i * cellSize + cellSize, clientH - j * cellSize - cellSize); + glEnd(); + } + } + } + + } + + + //start locations + glLineWidth(3); + + // force playerCrossSize to be at least of size 4 + if(cellSize<4) + playerCrossSize=4; + else + playerCrossSize=cellSize; + + for (int i = 0; i < map->getMaxFactions(); i++) { + switch (i) { + case 0: glColor3f(1.f, 0.f, 0.f); break; + case 1: glColor3f(0.f, 0.f, 1.f); break; + case 2: glColor3f(0.f, 1.f, 0.f); break; + case 3: glColor3f(1.f, 1.f, 0.f); break; + case 4: glColor3f(1.f, 1.f, 1.f); break; + case 5: glColor3f(0.f, 1.f, 0.8f); break; + case 6: glColor3f(1.f, 0.5f, 0.f); break; + case 7: glColor3f(1.f, 0.5f, 1.f); break; + } + glBegin(GL_LINES); + glVertex2f((map->getStartLocationX(i) - 1) * cellSize, clientH - (map->getStartLocationY(i) - 1) * cellSize); + glVertex2f((map->getStartLocationX(i) + 1) * cellSize + playerCrossSize, clientH - (map->getStartLocationY(i) + 1) * cellSize - playerCrossSize); + glVertex2f((map->getStartLocationX(i) - 1) * cellSize, clientH - (map->getStartLocationY(i) + 1) * cellSize - playerCrossSize); + glVertex2f((map->getStartLocationX(i) + 1) * cellSize + playerCrossSize, clientH - (map->getStartLocationY(i) - 1) * cellSize); + glEnd(); + } + + glPopMatrix(); + glPopAttrib(); + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + + //glViewport(0, 0, 0, 0); + + assertGl(); +} + + }}//end namespace diff --git a/source/glest_game/graphics/renderer.h b/source/glest_game/graphics/renderer.h index 0020c150..c82b4d28 100644 --- a/source/glest_game/graphics/renderer.h +++ b/source/glest_game/graphics/renderer.h @@ -328,6 +328,7 @@ public: void renderMinimap(); void renderDisplay(); void renderMenuBackground(const MenuBackground *menuBackground); + void renderMapPreview(const MapPreview *map, bool renderAll, int screenX, int screenY); //computing bool computePosition(const Vec2i &screenPos, Vec2i &worldPos); diff --git a/source/glest_game/menu/menu_state_connected_game.cpp b/source/glest_game/menu/menu_state_connected_game.cpp index fbb73726..57979cc5 100644 --- a/source/glest_game/menu/menu_state_connected_game.cpp +++ b/source/glest_game/menu/menu_state_connected_game.cpp @@ -576,8 +576,7 @@ void MenuStateConnectedGame::render() { renderer.renderMouse2d(mouseX, mouseY, mouse2dAnim); bool renderAll = (listBoxFogOfWar.getSelectedItemIndex() == 1); - const Metrics &metrics= Metrics::getInstance(); - renderer.renderMapPreview(&mapPreview, renderAll, 10, 350,metrics.getVirtualW(),metrics.getVirtualH()); + renderer.renderMapPreview(&mapPreview, renderAll, 10, 350); } renderer.renderChatManager(&chatManager); renderer.renderConsole(&console,showFullConsole,true); diff --git a/source/glest_game/menu/menu_state_custom_game.cpp b/source/glest_game/menu/menu_state_custom_game.cpp index d40dc228..bc3a6a95 100644 --- a/source/glest_game/menu/menu_state_custom_game.cpp +++ b/source/glest_game/menu/menu_state_custom_game.cpp @@ -1105,8 +1105,7 @@ void MenuStateCustomGame::render() { renderer.renderMouse2d(mouseX, mouseY, mouse2dAnim); bool renderAll = (listBoxFogOfWar.getSelectedItemIndex() == 1); - const Metrics &metrics= Metrics::getInstance(); - renderer.renderMapPreview(&mapPreview, renderAll, 10, 350,metrics.getVirtualW(),metrics.getVirtualH()); + renderer.renderMapPreview(&mapPreview, renderAll, 10, 350); } renderer.renderChatManager(&chatManager); diff --git a/source/shared_lib/include/graphics/gl/base_renderer.h b/source/shared_lib/include/graphics/gl/base_renderer.h index b0836e14..d391dba4 100644 --- a/source/shared_lib/include/graphics/gl/base_renderer.h +++ b/source/shared_lib/include/graphics/gl/base_renderer.h @@ -28,7 +28,6 @@ public: virtual void initMapSurface(int clientW, int clientH); virtual void renderMap(MapPreview *map, int x, int y, int clientW, int clientH, int cellSize); - virtual void renderMapPreview(const MapPreview *map, bool renderAll, int screenX, int screenY, int sizeW, int sizeH); }; }} // end namespace diff --git a/source/shared_lib/include/graphics/graphics_interface.h b/source/shared_lib/include/graphics/graphics_interface.h index 712fc948..81c406c4 100644 --- a/source/shared_lib/include/graphics/graphics_interface.h +++ b/source/shared_lib/include/graphics/graphics_interface.h @@ -42,7 +42,6 @@ class RendererMapInterface { public: virtual void initMapSurface(int clientW, int clientH) = 0; virtual void renderMap(MapPreview *map, int x, int y, int clientW, int clientH, int cellSize) = 0; - virtual void renderMapPreview(const MapPreview *map, bool renderAll, int screenX, int screenY, int sizeW, int sizeH) = 0; }; // ===================================================== diff --git a/source/shared_lib/sources/graphics/gl/base_renderer.cpp b/source/shared_lib/sources/graphics/gl/base_renderer.cpp index 92460670..bb0dfb14 100644 --- a/source/shared_lib/sources/graphics/gl/base_renderer.cpp +++ b/source/shared_lib/sources/graphics/gl/base_renderer.cpp @@ -190,196 +190,5 @@ void BaseRenderer::renderMap(MapPreview *map, int x, int y, assertGl(); } -void BaseRenderer::renderMapPreview( const MapPreview *map, bool renderAll, - int screenX, int screenY, int sizeW, int sizeH) { - float alt=0; - float showWater=0; - int renderMapHeight=64; - int renderMapWidth=64; - float clientW=256; - float clientH=256; - float cellSize=2; - float playerCrossSize=2; - - // stretch small maps to 128x128 - if(map->getW() < map->getH()) { - cellSize = cellSize * renderMapHeight / map->getH(); - } - else { - cellSize = cellSize * renderMapWidth / map->getW(); - } - - assertGl(); - - glFrontFace(GL_CW); - glEnable(GL_CULL_FACE); - - glMatrixMode(GL_PROJECTION); - - glLoadIdentity(); - - // glViewport(screenX, screenY, sizeH,sizeW); - // glOrtho(0, clientW, 0, clientH, -1, 1); - glOrtho(0, sizeW, 0, sizeH, 0, 1); - - //glMatrixMode(GL_MODELVIEW); - - glPushMatrix(); - - glPushAttrib(GL_CURRENT_BIT); - - //glTranslatef(static_cast(x), static_cast(y), 0.0f); - glLineWidth(1); - //glClear(GL_COLOR_BUFFER_BIT); - glColor3f(0, 0, 0); - - for (int j = 0; j < map->getH(); j++) { - for (int i = 0; i < map->getW(); i++) { - //surface - alt = map->getHeight(i, j) / 20.f; - showWater = map->getWaterLevel()/ 20.f - alt; - showWater = (showWater > 0)? showWater:0; - Vec3f surfColor; - switch (map->getSurface(i, j)) { - case st_Grass: surfColor = Vec3f(0.0, 0.8f * alt, 0.f + showWater); break; - case st_Secondary_Grass: surfColor = Vec3f(0.4f * alt, 0.6f * alt, 0.f + showWater); break; - case st_Road: surfColor = Vec3f(0.6f * alt, 0.3f * alt, 0.f + showWater); break; - case st_Stone: surfColor = Vec3f(0.7f * alt, 0.7f * alt, 0.7f * alt + showWater); break; - case st_Ground: surfColor = Vec3f(0.7f * alt, 0.5f * alt, 0.3f * alt + showWater); break; - } - - glColor3fv(surfColor.ptr()); - - glBegin(GL_TRIANGLE_STRIP); - glVertex2f(i * cellSize, clientH - j * cellSize - cellSize); - glVertex2f(i * cellSize, clientH - j * cellSize); - glVertex2f(i * cellSize + cellSize, clientH - j * cellSize - cellSize); - glVertex2f(i * cellSize + cellSize, clientH - j * cellSize); - glEnd(); - - //objects - if(renderAll == true) { - switch (map->getObject(i, j)) { - case 0: glColor3f(0.f, 0.f, 0.f); break; - case 1: glColor3f(1.f, 0.f, 0.f); break; - case 2: glColor3f(1.f, 1.f, 1.f); break; - case 3: glColor3f(0.5f, 0.5f, 1.f); break; - case 4: glColor3f(0.f, 0.f, 1.f); break; - case 5: glColor3f(0.5f, 0.5f, 0.5f); break; - case 6: glColor3f(1.f, 0.8f, 0.5f); break; - case 7: glColor3f(0.f, 1.f, 1.f); break; - case 8: glColor3f(0.7f, 0.1f, 0.3f); break; - case 9: glColor3f(0.5f, 1.f, 0.1f); break; - case 10: glColor3f(1.f, 0.2f, 0.8f); break;// we don't render unvisible blocking objects - } - - if ( renderAll && (map->getObject(i, j) != 0) && (map->getObject(i, j) != 10) ){ - glPointSize(cellSize / 2.f); - glBegin(GL_POINTS); - glVertex2i(i * cellSize + cellSize / 2, clientH - j * cellSize - cellSize / 2); - glEnd(); - } - } - -// bool found = false; - - //height lines -// if (!found) { - - //left - if (i > 0 && map->getHeight(i - 1, j) > map->getHeight(i, j)) { - glColor3fv((surfColor*0.5f).ptr()); - glBegin(GL_LINES); - glVertex2f(i * cellSize, clientH - (j + 1) * cellSize); - glVertex2f(i * cellSize, clientH - j * cellSize); - glEnd(); - } - //down - if (j > 0 && map->getHeight(i, j - 1) > map->getHeight(i, j)) { - glColor3fv((surfColor*0.5f).ptr()); - glBegin(GL_LINES); - glVertex2f(i * cellSize, clientH - j * cellSize); - glVertex2f((i + 1) * cellSize, clientH - j * cellSize); - glEnd(); - } - - - //left - if (i > 0 && map->getHeight(i - 1, j) < map->getHeight(i, j)) { - glColor3fv((surfColor*2.f).ptr()); - glBegin(GL_LINES); - glVertex2f(i * cellSize, clientH - (j + 1) * cellSize); - glVertex2f(i * cellSize, clientH - j * cellSize); - glEnd(); - } - if (j > 0 && map->getHeight(i, j - 1) < map->getHeight(i, j)) { - glColor3fv((surfColor*2.f).ptr()); - glBegin(GL_LINES); - glVertex2f(i * cellSize, clientH - j * cellSize); - glVertex2f((i + 1) * cellSize, clientH - j * cellSize); - glEnd(); - } -// } - - //resources - if(renderAll == true) { - switch (map->getResource(i, j)) { - case 1: glColor3f(1.f, 1.f, 0.f); break; - case 2: glColor3f(0.5f, 0.5f, 0.5f); break; - case 3: glColor3f(1.f, 0.f, 0.f); break; - case 4: glColor3f(0.f, 0.f, 1.f); break; - case 5: glColor3f(0.5f, 0.5f, 1.f); break; - } - - if (renderAll && map->getResource(i, j) != 0) { - glBegin(GL_LINES); - glVertex2f(i * cellSize, clientH - j * cellSize - cellSize); - glVertex2f(i * cellSize + cellSize, clientH - j * cellSize); - glVertex2f(i * cellSize, clientH - j * cellSize); - glVertex2f(i * cellSize + cellSize, clientH - j * cellSize - cellSize); - glEnd(); - } - } - } - - } - - - //start locations - glLineWidth(3); - - // force playerCrossSize to be at least of size 4 - if(cellSize<4) - playerCrossSize=4; - else - playerCrossSize=cellSize; - - for (int i = 0; i < map->getMaxFactions(); i++) { - switch (i) { - case 0: glColor3f(1.f, 0.f, 0.f); break; - case 1: glColor3f(0.f, 0.f, 1.f); break; - case 2: glColor3f(0.f, 1.f, 0.f); break; - case 3: glColor3f(1.f, 1.f, 0.f); break; - case 4: glColor3f(1.f, 1.f, 1.f); break; - case 5: glColor3f(0.f, 1.f, 0.8f); break; - case 6: glColor3f(1.f, 0.5f, 0.f); break; - case 7: glColor3f(1.f, 0.5f, 1.f); break; - } - glBegin(GL_LINES); - glVertex2f((map->getStartLocationX(i) - 1) * cellSize, clientH - (map->getStartLocationY(i) - 1) * cellSize); - glVertex2f((map->getStartLocationX(i) + 1) * cellSize + playerCrossSize, clientH - (map->getStartLocationY(i) + 1) * cellSize - playerCrossSize); - glVertex2f((map->getStartLocationX(i) - 1) * cellSize, clientH - (map->getStartLocationY(i) + 1) * cellSize - playerCrossSize); - glVertex2f((map->getStartLocationX(i) + 1) * cellSize + playerCrossSize, clientH - (map->getStartLocationY(i) - 1) * cellSize); - glEnd(); - } - - glPopMatrix(); - glPopAttrib(); - - //glViewport(0, 0, 0, 0); - - assertGl(); -} - }} // end namespace