From: <geo...@us...> - 2008-08-31 07:23:40
|
Revision: 2679 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2679&view=rev Author: geoffthemedio Date: 2008-08-31 07:23:49 +0000 (Sun, 31 Aug 2008) Log Message: ----------- Improved starlane resource-sharing route colouring to respond immediately to being toggled on/off, rather than requiring a turn-end to take effect as was the case previously. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2008-08-31 05:17:09 UTC (rev 2678) +++ trunk/FreeOrion/UI/MapWnd.cpp 2008-08-31 07:23:49 UTC (rev 2679) @@ -798,8 +798,7 @@ const System* start_system = systems[i]; SystemIcon* icon = new SystemIcon(this, 0, 0, 10, start_system->ID()); { - // See note above texture coords for why we're making coordinate - // sets that are 2x too big. + // See note above texture coords for why we're making coordinate sets that are 2x too big. const System& system = icon->GetSystem(); double icon_size = ClientUI::SystemIconSize(); double icon_ul_x = system.X() - icon_size; @@ -849,7 +848,7 @@ //Logger().debugStream() << " considering lanes from " << start_system->Name() << " (id: " << start_system->ID() << ")"; - // gaseous substance around system + // gaseous substance around system if (boost::shared_ptr<GG::Texture> gaseous_texture = ClientUI::GetClientUI()->GetModuloTexture(ClientUI::ArtDir() / "galaxy_decoration", "gaseous", start_system->ID())) { glBindTexture(GL_TEXTURE_2D, gaseous_texture->OpenGLId()); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); @@ -912,20 +911,18 @@ GG::Clr lane_colour = UNOWNED_STARLANE_GRAY_CLR; // default colour if no empires transfer - if (GetOptionsDB().Get<bool>("UI.resource-starlane-colouring")) { - for (EmpireManager::iterator empire_it = manager.begin(); empire_it != manager.end(); ++empire_it) { - empire = empire_it->second; - const std::set<std::pair<int, int> >& resource_supply_lanes = empire->ResourceSupplyStarlaneTraversals(); + for (EmpireManager::iterator empire_it = manager.begin(); empire_it != manager.end(); ++empire_it) { + empire = empire_it->second; + const std::set<std::pair<int, int> >& resource_supply_lanes = empire->ResourceSupplyStarlaneTraversals(); - std::pair<int, int> lane_forward = std::make_pair(start_system->ID(), dest_system->ID()); - std::pair<int, int> lane_backward = std::make_pair(dest_system->ID(), start_system->ID()); + std::pair<int, int> lane_forward = std::make_pair(start_system->ID(), dest_system->ID()); + std::pair<int, int> lane_backward = std::make_pair(dest_system->ID(), start_system->ID()); - // see if this lane exists in this empire's supply propegation lanes set. either direction accepted. - if (resource_supply_lanes.find(lane_forward) != resource_supply_lanes.end() || resource_supply_lanes.find(lane_backward) != resource_supply_lanes.end()) { - lane_colour = empire->Color(); - //Logger().debugStream() << "selected colour of empire " << empire->Name() << " for this full lane"; - break; - } + // see if this lane exists in this empire's supply propegation lanes set. either direction accepted. + if (resource_supply_lanes.find(lane_forward) != resource_supply_lanes.end() || resource_supply_lanes.find(lane_backward) != resource_supply_lanes.end()) { + lane_colour = empire->Color(); + //Logger().debugStream() << "selected colour of empire " << empire->Name() << " for this full lane"; + break; } } @@ -947,8 +944,6 @@ // render half-starlane from the current start_system to the current dest_system? - if (!GetOptionsDB().Get<bool>("UI.resource-starlane-colouring")) - continue; // check that this lane isn't already going to be rendered. skip it if it is. if (rendered_half_starlanes.find(std::make_pair(start_system->ID(), dest_system->ID())) == rendered_half_starlanes.end()) { @@ -1963,24 +1958,37 @@ { glDisableClientState(GL_TEXTURE_COORD_ARRAY); - if (m_starlane_vertices.m_name && m_starlane_colors.m_name) { - glLineStipple(1, 0xffff); + bool coloured = GetOptionsDB().Get<bool>("UI.resource-starlane-colouring"); + + if (m_starlane_vertices.m_name && (m_starlane_colors.m_name || !coloured)) { + glLineStipple(1, 0xffff); // solid line / no stipple glLineWidth(GetOptionsDB().Get<double>("UI.starlane-thickness")); - glEnableClientState(GL_COLOR_ARRAY); + + if (coloured) + glEnableClientState(GL_COLOR_ARRAY); + else + glColor(UNOWNED_STARLANE_GRAY_CLR); + #ifdef FREEORION_WIN32 glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_starlane_vertices.m_name); #else glBindBuffer(GL_ARRAY_BUFFER, m_starlane_vertices.m_name); #endif glVertexPointer(2, GL_FLOAT, 0, 0); + + if (coloured) { #ifdef FREEORION_WIN32 - glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_starlane_colors.m_name); + glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_starlane_colors.m_name); #else - glBindBuffer(GL_ARRAY_BUFFER, m_starlane_colors.m_name); + glBindBuffer(GL_ARRAY_BUFFER, m_starlane_colors.m_name); #endif - glColorPointer(4, GL_UNSIGNED_BYTE, 0, 0); + glColorPointer(4, GL_UNSIGNED_BYTE, 0, 0); + } + glDrawArrays(GL_LINES, 0, m_starlane_vertices.m_size); - glDisableClientState(GL_COLOR_ARRAY); + + if (coloured) + glDisableClientState(GL_COLOR_ARRAY); } if (m_starlane_fleet_supply_vertices.m_name && m_starlane_fleet_supply_colors.m_name && GetOptionsDB().Get<bool>("UI.fleet-supply-lines")) { |
From: <geo...@us...> - 2008-12-14 05:37:02
|
Revision: 2702 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2702&view=rev Author: geoffthemedio Date: 2008-12-14 05:37:00 +0000 (Sun, 14 Dec 2008) Log Message: ----------- Updated my recent MapWnd RemoveAccelerators changes for recent GG change Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2008-12-14 00:50:23 UTC (rev 2701) +++ trunk/FreeOrion/UI/MapWnd.cpp 2008-12-14 05:37:00 UTC (rev 2702) @@ -2976,9 +2976,9 @@ void MapWnd::RemoveAccelerators() { - GG::GUI::const_accel_iterator i = GG::GUI::GetGUI()->accel_begin(); + GG::GUI::accel_iterator i = GG::GUI::GetGUI()->accel_begin(); while (i != GG::GUI::GetGUI()->accel_end()) { - GG::GUI::GetGUI()->RemoveAccelerator(i->first, i->second); + GG::GUI::GetGUI()->RemoveAccelerator(i); i = GG::GUI::GetGUI()->accel_begin(); } m_disabled_accels_list.clear(); |
From: <geo...@us...> - 2009-01-03 23:19:14
|
Revision: 2719 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2719&view=rev Author: geoffthemedio Date: 2009-01-03 23:19:11 +0000 (Sat, 03 Jan 2009) Log Message: ----------- Added some debug output to MapWnd::InitTurn to help localize where any crashes in that function are occurring. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-01-03 11:53:04 UTC (rev 2718) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-01-03 23:19:11 UTC (rev 2719) @@ -665,6 +665,8 @@ void MapWnd::InitTurn(int turn_number) { + Logger().debugStream() << "Initializing turn " << turn_number; + SetAccelerators(); Universe& universe = GetUniverse(); @@ -753,7 +755,7 @@ std::set<std::pair<int, int> > rendered_starlanes; // stored by inserting return value of UnorderedIntPair so different orders of system ids don't create duplicates std::set<std::pair<int, int> > rendered_half_starlanes; // stored as unaltered pairs, so that a each direction of traversal can be shown separately - //Logger().debugStream() << "====ADDING STARLANES===="; + Logger().debugStream() << "ADDING STARLANES"; std::vector<System*> systems = universe.FindObjects<System>(); for (unsigned int i = 0; i < systems.size(); ++i) { @@ -1111,6 +1113,7 @@ m_research_wnd->Update(); m_production_wnd->Update(); + Logger().debugStream() << "Turn initialization graphic buffer clearing"; // clear out all the old buffers for (std::map<boost::shared_ptr<GG::Texture>, GLBuffer>::const_iterator it = m_star_core_quad_vertices.begin(); it != m_star_core_quad_vertices.end(); @@ -1191,6 +1194,7 @@ } + Logger().debugStream() << "Turn initialization new graphic buffer creation"; // create new buffers for (std::map<boost::shared_ptr<GG::Texture>, std::vector<float> >::const_iterator it = raw_star_core_quad_vertices.begin(); |
From: <geo...@us...> - 2009-01-04 00:21:23
|
Revision: 2720 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2720&view=rev Author: geoffthemedio Date: 2009-01-04 00:21:20 +0000 (Sun, 04 Jan 2009) Log Message: ----------- Fixed bug where map sidepanel could still be open under production sidepanel Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-01-03 23:19:11 UTC (rev 2719) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-01-04 00:21:20 UTC (rev 2720) @@ -2493,6 +2493,8 @@ HideSitRep(); HideResearch(); HideDesign(); + m_side_panel->Hide(); + DetachChild(m_side_panel); // show the production window m_production_wnd->Show(); |
From: <geo...@us...> - 2009-01-17 10:45:20
|
Revision: 2761 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2761&view=rev Author: geoffthemedio Date: 2009-01-17 10:45:16 +0000 (Sat, 17 Jan 2009) Log Message: ----------- Added check of OpenGL version before code that tends to crash when version is less than required for the build in use (1.5 or 2.0 depending whether USE_GL_BIND_BUFFER_ARB is set). Logger output notes that code may or will probably crash depending on extracted version number. standard error output indicates probable crash and reason. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-01-17 07:17:18 UTC (rev 2760) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-01-17 10:45:16 UTC (rev 2761) @@ -97,6 +97,36 @@ return std::make_pair(std::min(one, two), std::max(one, two)); } + + static bool checked_gl_version_already = false; + void CheckGLVersion() { + // only execute once + if (checked_gl_version_already) + return; + else + checked_gl_version_already = true; + + // get OpenGL version string and parse to get version number + const GLubyte* gl_version = glGetString(GL_VERSION); + std::string gl_version_string = boost::lexical_cast<std::string>(gl_version); + Logger().debugStream() << "OpenGL version string: " << boost::lexical_cast<std::string>(gl_version); + + float version_number = 0.0; + std::istringstream iss(gl_version_string); + iss >> version_number; + + Logger().debugStream() << "extracted version number: " << boost::lexical_cast<std::string>(version_number); + + if (version_number < 1.5) { + Logger().errorStream() << "OpenGL version number less than 1.5. FreeOrion requires OpenGL 1.5. The following code should crash."; + std::cerr << "OpenGL version number" << boost::lexical_cast<std::string>(version_number) << " is less than 1.5." << std::endl; + std::cerr << "FreeOrion requires OpenGL 1.5. The following code will likely crash." << std::endl; + } else if (version_number < 2.0) { + Logger().debugStream() << "OpenGL version number less than 2.0. FreeOrion requires OpenGL 2.0 unless specially compiled. The following code may crash."; + } + } + + // disambiguate overloaded function with a function pointer void (MapWnd::*SetFleetMovementLineFunc)(const Fleet*) = &MapWnd::SetFleetMovementLine; @@ -1105,6 +1135,11 @@ m_production_wnd->Update(); Logger().debugStream() << "Turn initialization graphic buffer clearing"; + + + CheckGLVersion(); + + // clear out all the old buffers for (std::map<boost::shared_ptr<GG::Texture>, GLBuffer>::const_iterator it = m_star_core_quad_vertices.begin(); it != m_star_core_quad_vertices.end(); |
From: <geo...@us...> - 2009-02-23 17:27:11
|
Revision: 2868 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2868&view=rev Author: geoffthemedio Date: 2009-02-23 17:27:07 +0000 (Mon, 23 Feb 2009) Log Message: ----------- Fixed some issues with galaxy gas rendering Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-02-23 15:39:43 UTC (rev 2867) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-02-23 17:27:07 UTC (rev 2868) @@ -601,11 +601,14 @@ } } - // this gets cleared here instead of with the movement line stuff because that would clear some movement lines that come from the SystemIcons below + + // this gets cleared here instead of with the movement line stuff because that would + // clear some movement lines that come from the SystemIcons below m_fleet_lines.clear(); ClearProjectedFleetMovementLines(); - // systems and starlanes + + // set up system icon textures and starlane rendering for (std::map<int, SystemIcon*>::iterator it = m_system_icons.begin(); it != m_system_icons.end(); ++it) DeleteChild(it->second); m_system_icons.clear(); @@ -622,7 +625,7 @@ std::set<std::pair<int, int> > rendered_starlanes; // stored by inserting return value of UnorderedIntPair so different orders of system ids don't create duplicates std::set<std::pair<int, int> > rendered_half_starlanes; // stored as unaltered pairs, so that a each direction of traversal can be shown separately - Logger().debugStream() << "ADDING STARLANES"; + Logger().debugStream() << "ADDING STARLANES, SYSTEM TETURES AND GALAXY GAS"; const GG::Clr UNOWNED_LANE_COLOUR = GetOptionsDB().Get<StreamableColor>("UI.unowned-starlane-colour").ToClr(); std::vector<System*> systems = universe.FindObjects<System>(); @@ -690,25 +693,49 @@ const double ROTATION = start_system->ID() * 27.0; // arbitrary rotation in radians ("27.0" is just a number that produces pleasing results) const double COS_THETA = std::cos(ROTATION); const double SIN_THETA = std::sin(ROTATION); - // This rotates the upper left and lower right corners CCW ROTATION - // radians, around start_system. The initial upper left and lower - // right corners are (-GAS_SIZE, -GAS_SIZE) and (GAS_SIZE, - // GAS_SIZE), in map coordinates respectively. See note above - // texture coords for why we're making coordinate sets that are 2x - // too big. - double gas_ul_x = start_system->X() + COS_THETA * -GAS_SIZE + SIN_THETA * GAS_SIZE; - double gas_ul_y = start_system->Y() - -SIN_THETA * -GAS_SIZE + COS_THETA * GAS_SIZE; - double gas_lr_x = start_system->X() + COS_THETA * GAS_SIZE + SIN_THETA * -GAS_SIZE; - double gas_lr_y = start_system->Y() - -SIN_THETA * GAS_SIZE + COS_THETA * -GAS_SIZE; + + // Components of corner points of a quad + const double X1 = 1.0, Y1 = 1.0; // upper right corner (X1, Y1) + const double X2 = -1.0, Y2 = 1.0; // upper left corner (X2, Y2) + const double X3 = -1.0, Y3 = -1.0; // lower left corner (X3, Y3) + const double X4 = 1.0, Y4 = -1.0; // lower right corner (X4, Y4) + + // Calculate rotated corner point components after CCW ROTATION radians around origin. + const double X1r = COS_THETA*X1 + SIN_THETA*Y1; + const double Y1r = -SIN_THETA*X1 + COS_THETA*Y1; + const double X2r = COS_THETA*X2 + SIN_THETA*Y2; + const double Y2r = -SIN_THETA*X2 + COS_THETA*Y2; + const double X3r = COS_THETA*X3 + SIN_THETA*Y3; + const double Y3r = -SIN_THETA*X3 + COS_THETA*Y3; + const double X4r = COS_THETA*X4 + SIN_THETA*Y4; + const double Y4r = -SIN_THETA*X4 + COS_THETA*Y4; + + // Multiply all coords by GAS_SIZE to get relative scaled rotated quad corner components + // See note above texture coords for why we're making coordinate sets that are 2x too big. + + // add to system position to get translated scaled rotated quad corner + const double GAS_X1 = start_system->X() + (X1r * GAS_SIZE); + const double GAS_Y1 = start_system->Y() + (Y1r * GAS_SIZE); + const double GAS_X2 = start_system->X() + (X2r * GAS_SIZE); + const double GAS_Y2 = start_system->Y() + (Y2r * GAS_SIZE); + const double GAS_X3 = start_system->X() + (X3r * GAS_SIZE); + const double GAS_Y3 = start_system->Y() + (Y3r * GAS_SIZE); + const double GAS_X4 = start_system->X() + (X4r * GAS_SIZE); + const double GAS_Y4 = start_system->Y() + (Y4r * GAS_SIZE); + std::vector<float>& gas_vertices = raw_galaxy_gas_quad_vertices[gaseous_texture]; - gas_vertices.push_back(gas_lr_x); - gas_vertices.push_back(gas_ul_y); - gas_vertices.push_back(gas_ul_x); - gas_vertices.push_back(gas_ul_y); - gas_vertices.push_back(gas_ul_x); - gas_vertices.push_back(gas_lr_y); - gas_vertices.push_back(gas_lr_x); - gas_vertices.push_back(gas_lr_y); + // rotated upper right + gas_vertices.push_back(GAS_X1); + gas_vertices.push_back(GAS_Y1); + // rotated upper left + gas_vertices.push_back(GAS_X2); + gas_vertices.push_back(GAS_Y2); + // rotated lower left + gas_vertices.push_back(GAS_X3); + gas_vertices.push_back(GAS_Y3); + // rotated lower right + gas_vertices.push_back(GAS_X4); + gas_vertices.push_back(GAS_Y4); } // system's starlanes |
From: <geo...@us...> - 2009-04-12 13:20:10
|
Revision: 2978 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2978&view=rev Author: geoffthemedio Date: 2009-04-12 13:20:08 +0000 (Sun, 12 Apr 2009) Log Message: ----------- Tweaked appearance of ETA indicators consistent with eleazar's later forum mockups Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-04-12 12:14:11 UTC (rev 2977) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-04-12 13:20:08 UTC (rev 2978) @@ -2617,8 +2617,7 @@ return; // nothing to draw. - const double MARKER_HALF_SIZE = 11; - const double MARKER_INNER_INSET = 2; + const double MARKER_HALF_SIZE = 9; const int MARKER_PTS = ClientUI::Pts(); boost::shared_ptr<GG::Font> font = ClientUI::GetBoldFont(MARKER_PTS); const double TWO_PI = 2.0*3.1415926536; @@ -2631,34 +2630,33 @@ if (!vert.show_eta) continue; - glDisable(GL_TEXTURE_2D); + // draw background disc in empire colour, or passed-in colour GG::Pt marker_centre = ScreenCoordsFromUniversePosition(vert.x, vert.y); - // draw background disc - if (clr == GG::CLR_ZERO) { - glColor(GG::CLR_WHITE); - } else { - glColor(move_line.colour); - } - GG::Pt ul = marker_centre - GG::Pt(GG::X(MARKER_HALF_SIZE), GG::Y(MARKER_HALF_SIZE)); - GG::Pt lr = marker_centre + GG::Pt(GG::X(MARKER_HALF_SIZE), GG::Y(MARKER_HALF_SIZE)); - CircleArc(ul, lr, 0.0, TWO_PI, true); - - // draw (empire-colour?) main disc if (clr == GG::CLR_ZERO) glColor(move_line.colour); else glColor(clr); - ul += GG::Pt(GG::X(MARKER_INNER_INSET), GG::Y(MARKER_INNER_INSET)); - lr -= GG::Pt(GG::X(MARKER_INNER_INSET), GG::Y(MARKER_INNER_INSET)); - CircleArc(ul, lr, 0.0, TWO_PI, true); + GG::Pt ul = marker_centre - GG::Pt(GG::X(MARKER_HALF_SIZE), GG::Y(MARKER_HALF_SIZE)); + GG::Pt lr = marker_centre + GG::Pt(GG::X(MARKER_HALF_SIZE), GG::Y(MARKER_HALF_SIZE)); + + glDisable(GL_TEXTURE_2D); + CircleArc(ul, lr, 0.0, TWO_PI, true); glEnable(GL_TEXTURE_2D); - // render black ETA number - glColor(GG::CLR_BLACK); + + // render ETA number in white with black shadows std::string text = boost::lexical_cast<std::string>(vert.eta); + + glColor(GG::CLR_BLACK); + font->RenderText(ul + GG::Pt(-GG::X1, GG::Y0), lr + GG::Pt(-GG::X1, GG::Y0), text, flags); + font->RenderText(ul + GG::Pt( GG::X1, GG::Y0), lr + GG::Pt( GG::X1, GG::Y0), text, flags); + font->RenderText(ul + GG::Pt( GG::X0, -GG::Y1), lr + GG::Pt( GG::X0, -GG::Y1), text, flags); + font->RenderText(ul + GG::Pt( GG::X0, GG::Y1), lr + GG::Pt( GG::X0, GG::Y1), text, flags); + + glColor(GG::CLR_WHITE); font->RenderText(ul, lr, text, flags); } glPopMatrix(); |
From: <tz...@us...> - 2009-04-13 02:18:02
|
Revision: 2981 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2981&view=rev Author: tzlaine Date: 2009-04-13 02:17:52 +0000 (Mon, 13 Apr 2009) Log Message: ----------- Fixed the use of move_line_dot_texture in MapWnd.cpp. It was being initialized at static initialization time, but was relying on values from the OptionsDB, which is also initialized at static initialization time, but in different files, leading to undefined behavior. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-04-12 20:57:48 UTC (rev 2980) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-04-13 02:17:52 UTC (rev 2981) @@ -205,8 +205,7 @@ /* Updated each frame to shift rendered posistion of dots that are drawn to show * fleet move lines. */ - static double move_line_animation_shift = 0.0; // in pixels - static boost::shared_ptr<GG::Texture> move_line_dot_texture = ClientUI::GetTexture(ClientUI::ArtDir() / "misc" / "move_line_dot.png"); + double move_line_animation_shift = 0.0; // in pixels } @@ -961,10 +960,6 @@ CheckGLVersion(); Universe& universe = GetUniverse(); - // (re)load fleet move line dot texture - move_line_dot_texture = ClientUI::GetTexture(ClientUI::ArtDir() / "misc" / "move_line_dot.png"); - - // adjust size of map window for universe and application size Resize(GG::Pt(static_cast<GG::X>(Universe::UniverseWidth() * ZOOM_MAX + GG::GUI::GetGUI()->AppWidth() * 1.5), static_cast<GG::Y>(Universe::UniverseWidth() * ZOOM_MAX + GG::GUI::GetGUI()->AppHeight() * 1.5))); @@ -2569,6 +2564,8 @@ glColor(clr); } + boost::shared_ptr<GG::Texture> move_line_dot_texture = + ClientUI::GetTexture(ClientUI::ArtDir() / "misc" / "move_line_dot.png"); GG::Pt texture_half_size = GG::Pt(GG::X(move_line_dot_texture->DefaultWidth() / 2), GG::Y(move_line_dot_texture->DefaultHeight() / 2)); const int MOVE_LINE_DOT_SPACING = GetOptionsDB().Get<int>("UI.fleet-supply-line-dot-spacing"); |
From: <geo...@us...> - 2009-04-26 00:24:11
|
Revision: 3005 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3005&view=rev Author: geoffthemedio Date: 2009-04-26 00:24:08 +0000 (Sun, 26 Apr 2009) Log Message: ----------- Fixed crash when enabling use of scanline shader that wasn't enabled at the start of the turn, so wasn't initialized Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-04-25 19:04:11 UTC (rev 3004) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-04-26 00:24:08 UTC (rev 3005) @@ -2475,7 +2475,7 @@ glEnd(); } - if (fog_scanlines) { + if (fog_scanlines && m_scanline_shader) { const System& system = icon->GetSystem(); if (!empire->HasExploredSystem(system.ID())) { m_scanline_shader->Use(); |
From: <geo...@us...> - 2009-05-02 19:09:44
|
Revision: 3010 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3010&view=rev Author: geoffthemedio Date: 2009-05-02 19:09:34 +0000 (Sat, 02 May 2009) Log Message: ----------- Reset line thickness after rendering system circles, so that other windows that assume the thickness is 1.0 aren't affected Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-05-01 21:54:14 UTC (rev 3009) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-05-02 19:09:34 UTC (rev 3010) @@ -2490,6 +2490,7 @@ glDisable(GL_LINE_SMOOTH); glEnable(GL_TEXTURE_2D); glPopMatrix(); + glLineWidth(1.0); } } |
From: <tz...@us...> - 2009-08-15 16:44:57
|
Revision: 3120 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3120&view=rev Author: tzlaine Date: 2009-08-15 16:44:48 +0000 (Sat, 15 Aug 2009) Log Message: ----------- Made the motion of the fleet movement dots smoother. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-08-15 03:38:29 UTC (rev 3119) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-08-15 16:44:48 UTC (rev 3120) @@ -2746,10 +2746,23 @@ // increment along line, rendering dots, until end of line segment is passed while (offset < length) { // find position of dot from initial vertex position, offset length and unit vectors - GG::Pt centre = GG::Pt(vert1Pt.x + GG::X(offset * uVecX), vert1Pt.y + GG::Y(offset * uVecY)); + std::pair<double, double> ul(Value(vert1Pt.x) + offset * uVecX, + Value(vert1Pt.y) + offset * uVecY); - // blit texture (appropriately coloured) into place, shifted up and left so dot is centred on desired position - move_line_dot_texture->OrthoBlit(centre); + // blit texture (appropriately coloured) into place + glBindTexture(GL_TEXTURE_2D, move_line_dot_texture->OpenGLId()); + const GLfloat* tex_coords = move_line_dot_texture->DefaultTexCoords(); + glBegin(GL_TRIANGLE_STRIP); + glTexCoord2f(tex_coords[0], tex_coords[1]); + glVertex2f(ul.first, ul.second); + glTexCoord2f(tex_coords[2], tex_coords[1]); + glVertex2f(ul.first + Value(move_line_dot_texture->DefaultWidth()), ul.second); + glTexCoord2f(tex_coords[0], tex_coords[3]); + glVertex2f(ul.first, ul.second + Value(move_line_dot_texture->DefaultHeight())); + glTexCoord2f(tex_coords[2], tex_coords[3]); + glVertex2f(ul.first + Value(move_line_dot_texture->DefaultWidth()), + ul.second + Value(move_line_dot_texture->DefaultHeight())); + glEnd(); // move offset to that for next dot offset += MOVE_LINE_DOT_SPACING; |
From: <tz...@us...> - 2009-08-15 16:49:01
|
Revision: 3121 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3121&view=rev Author: tzlaine Date: 2009-08-15 16:48:54 +0000 (Sat, 15 Aug 2009) Log Message: ----------- Changed the render order of fog-of-war scanlines and system circles. Now, the scanlines don't write over the system circles. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-08-15 16:44:48 UTC (rev 3120) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-08-15 16:48:54 UTC (rev 3121) @@ -2581,13 +2581,6 @@ GG::Pt circle_ul = middle - circle_half_size; GG::Pt circle_lr = circle_ul + circle_size; - // render circles around systems that have at least one starlane, if circles are enabled. - if (circles && icon->GetSystem().Starlanes() > 0) { - glBegin(GL_LINE_STRIP); - CircleArc(circle_ul, circle_lr, 0.0, TWO_PI, false); - glEnd(); - } - if (fog_scanlines && m_scanline_shader) { const System& system = icon->GetSystem(); if (!empire->HasExploredSystem(system.ID())) { @@ -2597,6 +2590,13 @@ glUseProgram(0); } } + + // render circles around systems that have at least one starlane, if circles are enabled. + if (circles && icon->GetSystem().Starlanes() > 0) { + glBegin(GL_LINE_STRIP); + CircleArc(circle_ul, circle_lr, 0.0, TWO_PI, false); + glEnd(); + } } glDisable(GL_LINE_SMOOTH); |
From: <tz...@us...> - 2009-08-16 01:37:20
|
Revision: 3124 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3124&view=rev Author: tzlaine Date: 2009-08-16 01:37:13 +0000 (Sun, 16 Aug 2009) Log Message: ----------- Changed the starlane supply route dots so they only render in between system circles, like movement indicator lines. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-08-15 18:07:07 UTC (rev 3123) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-08-16 01:37:13 UTC (rev 3124) @@ -1426,12 +1426,12 @@ Empire* empire = it->second; const std::set<std::pair<int, int> >& fleet_supply_lanes = empire->FleetSupplyStarlaneTraversals(); for (std::set<std::pair<int, int> >::const_iterator lane_it = fleet_supply_lanes.begin(); lane_it != fleet_supply_lanes.end(); ++lane_it) { - const System* start_sys = universe.Object<System>(lane_it->first); - const System* end_sys = universe.Object<System>(lane_it->second); - raw_starlane_supply_vertices.push_back(start_sys->X()); - raw_starlane_supply_vertices.push_back(start_sys->Y()); - raw_starlane_supply_vertices.push_back(end_sys->X()); - raw_starlane_supply_vertices.push_back(end_sys->Y()); + std::pair<int, int> lane = UnorderedIntPair(lane_it->first, lane_it->second); + assert(m_starlane_endpoints[lane].X1 != UniverseObject::INVALID_POSITION); + raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].X1); + raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].Y1); + raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].X2); + raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].Y2); raw_starlane_supply_colors.push_back(empire->Color().r); raw_starlane_supply_colors.push_back(empire->Color().g); raw_starlane_supply_colors.push_back(empire->Color().b); |
From: <geo...@us...> - 2009-09-14 13:08:53
|
Revision: 3171 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3171&view=rev Author: geoffthemedio Date: 2009-09-14 13:08:42 +0000 (Mon, 14 Sep 2009) Log Message: ----------- Added crude but illustrative empire-coloured circles around objects to indicate the range of their detection for near-zero-stealth objects. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-09-14 12:26:46 UTC (rev 3170) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-09-14 13:08:42 UTC (rev 3171) @@ -815,6 +815,43 @@ RenderSystems(); RenderFleetMovementLines(); + + + // TEMP: Render visibility radii + const Universe& universe = GetUniverse(); + const double TWO_PI = 2.0*3.1415926536; + glPushMatrix(); + glLoadIdentity(); + for (Universe::const_iterator it = universe.begin(); it != universe.end(); ++it) { + if (const Meter* detection_meter = it->second->GetMeter(METER_DETECTION)) { + // draw background disc in empire colour, or passed-in colour + GG::Pt circle_centre = ScreenCoordsFromUniversePosition(it->second->X(), it->second->Y()); + + double radius = 10.0*detection_meter->Current()*ZoomFactor(); + if (radius < 20.0) continue; + + GG::Clr circle_colour = GG::CLR_WHITE; + const std::set<int>& owners = it->second->Owners(); + if (owners.size() == 1) + if (const Empire* empire = Empires().Lookup(*owners.begin())) + circle_colour = empire->Color(); + + glColor(circle_colour); + + GG::Pt ul = circle_centre - GG::Pt(GG::X(radius), GG::Y(radius)); + GG::Pt lr = circle_centre + GG::Pt(GG::X(radius), GG::Y(radius)); + + glDisable(GL_TEXTURE_2D); + glBegin(GL_LINE_STRIP); + CircleArc(ul, lr, 0.0, TWO_PI, false); + glEnd(); + glEnable(GL_TEXTURE_2D); + } + } + glPopMatrix(); + // END TEMP + + glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
From: <geo...@us...> - 2009-09-14 13:27:53
|
Revision: 3169 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3169&view=rev Author: geoffthemedio Date: 2009-09-14 12:22:27 +0000 (Mon, 14 Sep 2009) Log Message: ----------- Fixed potential crash that occurred whenever the human client was sent an empty universe and an attempt was made to set up rendering of an empty array of star vertices. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-09-14 08:49:14 UTC (rev 3168) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-09-14 12:22:27 UTC (rev 3169) @@ -1331,12 +1331,14 @@ // fill buffers with star textures - glGenBuffers(1, &m_star_texture_coords.m_name); - glBindBuffer(GL_ARRAY_BUFFER, m_star_texture_coords.m_name); - glBufferData(GL_ARRAY_BUFFER, - raw_star_texture_coords.size() * sizeof(float), - &raw_star_texture_coords[0], - GL_STATIC_DRAW); + if (!raw_star_texture_coords.empty()) { + glGenBuffers(1, &m_star_texture_coords.m_name); + glBindBuffer(GL_ARRAY_BUFFER, m_star_texture_coords.m_name); + glBufferData(GL_ARRAY_BUFFER, + raw_star_texture_coords.size() * sizeof(float), + &raw_star_texture_coords[0], + GL_STATIC_DRAW); + } m_star_texture_coords.m_size = raw_star_texture_coords.size() / 2; // cleanup |
From: <geo...@us...> - 2009-09-20 06:52:22
|
Revision: 3177 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3177&view=rev Author: geoffthemedio Date: 2009-09-20 06:52:14 +0000 (Sun, 20 Sep 2009) Log Message: ----------- Switched to simpler way to find fleet apparent position along starlane in case where starlane endpoints aren't known: use actual fleet position, rather than a complicated calculation that find's... the actual fleet position. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-09-20 06:48:05 UTC (rev 3176) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-09-20 06:52:14 UTC (rev 3177) @@ -2143,12 +2143,7 @@ // return actual position of fleet on starlane - ignore the distance // away from the star centre at which starlane endpoints should appear - double X1 = obj1->X(), Y1 = obj1->Y(), X2 = obj2->X(), Y2 = obj2->Y(), X = fleet->X(), Y = fleet->Y(); - - // get fractional distance along lane that fleet's universe position is - double dist = FractionalDistanceBetweenPoints(X1, Y1, X, Y, X2, Y2); - - return PositionFractionalAtDistanceBetweenPoints(X1, Y1, X2, Y2, dist); + return std::make_pair<double, double>(fleet->X(), fleet->Y()); } // return apparent position of fleet on starlane |
From: <geo...@us...> - 2009-10-16 07:49:13
|
Revision: 3213 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3213&view=rev Author: geoffthemedio Date: 2009-10-16 07:49:05 +0000 (Fri, 16 Oct 2009) Log Message: ----------- Fixed hiding of system names when zooming out far on galaxy map. Names were always being shown when changing the zoom level, and were dependent on the tiny fleet icon zoom threshold for (mistaken?) reason. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-10-16 07:41:41 UTC (rev 3212) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-10-16 07:49:05 UTC (rev 3213) @@ -2480,8 +2480,8 @@ ul_offset_y *= (ZoomFactor() / OLD_ZOOM); - // show / hide system names after zooming - if (ZoomFactor() < ClientUI::TinyFleetButtonZoomThreshold()) + // show or hide system names, depending on zoom. replicates code in MapWnd::Zoom + if (ZoomFactor() * ClientUI::Pts() < MIN_SYSTEM_NAME_SIZE) HideSystemNames(); else ShowSystemNames(); |
From: <geo...@us...> - 2009-10-17 03:25:57
|
Revision: 3216 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3216&view=rev Author: geoffthemedio Date: 2009-10-17 03:25:50 +0000 (Sat, 17 Oct 2009) Log Message: ----------- Fixed issue in MapWnd where fleets moving along not-visible starlanes weren't being shown in the correction position on the galaxy map. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-10-16 18:02:07 UTC (rev 3215) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-10-17 03:25:50 UTC (rev 3216) @@ -2121,6 +2121,10 @@ std::pair<double, double> MapWnd::MovingFleetMapPositionOnLane(const Fleet* fleet) const { + if (!fleet) { + return std::make_pair<double, double>(UniverseObject::INVALID_POSITION, UniverseObject::INVALID_POSITION); + } + // get endpoints of lane on screen, store in UnorderedIntPair which can be looked up in MapWnd's map of starlane endpoints int sys1_id = fleet->PreviousSystemID(), sys2_id = fleet->NextSystemID(); std::pair<int, int> lane = UnorderedIntPair(sys1_id, sys2_id); @@ -2128,17 +2132,7 @@ // get apparent positions of endpoints for this lane that have been pre-calculated std::map<std::pair<int, int>, LaneEndpoints>::const_iterator endpoints_it = m_starlane_endpoints.find(lane); if (endpoints_it == m_starlane_endpoints.end()) { - Logger().errorStream() << "MovingFleetMapPositionOnLane couldn't find lane for fleet. Using object positions"; - - const UniverseObject* obj1 = GetUniverse().Object(sys1_id); - const UniverseObject* obj2 = GetUniverse().Object(sys2_id); - - if (!obj1 || !obj2) { - Logger().errorStream() << "... and MovingFleetMapPositionOnLane couldn't even find objects with ids " << sys1_id << " and " << sys2_id << " to use instead!"; - // skip current fleetbutton if there are no endpoints available - return std::make_pair(UniverseObject::INVALID_POSITION, UniverseObject::INVALID_POSITION); - } - + // couldn't find an entry for the lane this fleet is one, so just // return actual position of fleet on starlane - ignore the distance // away from the star centre at which starlane endpoints should appear return std::make_pair<double, double>(fleet->X(), fleet->Y()); |
From: <tz...@us...> - 2009-10-21 05:46:19
|
Revision: 3232 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3232&view=rev Author: tzlaine Date: 2009-10-21 05:32:21 +0000 (Wed, 21 Oct 2009) Log Message: ----------- Added the use of the stencil buffer to prevent overdrawing of visibility radii. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-10-19 10:46:14 UTC (rev 3231) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-10-21 05:32:21 UTC (rev 3232) @@ -34,6 +34,7 @@ #include "../client/human/HumanClientApp.h" #include <boost/timer.hpp> +#include <boost/tuple/tuple.hpp> #include <GG/DrawUtil.h> #include <GG/MultiEdit.h> @@ -2148,7 +2149,6 @@ // determine fleets that need buttons so that fleets at the same location can // be grouped by empire owner and buttons created const Universe& universe = GetUniverse(); - const EmpireManager& empires = Empires(); // for each system, each empire's fleets that are ordered to move, but still at the system: "departing fleets" std::map<const System*, std::map<int, std::vector<const Fleet*> > > departing_fleets; @@ -2953,13 +2953,8 @@ } } - - const double TWO_PI = 2.0*3.1415926536; - glLineWidth(2.0); - glPushMatrix(); - glLoadIdentity(); - glEnable(GL_LINE_SMOOTH); - + std::vector<boost::tuple<GG::Pt, GG::Pt, GG::Clr> > circles; + circles.reserve(empire_position_max_detection_ranges.size()); for (std::map<std::pair<int, std::pair<double, double> >, double>::const_iterator it = empire_position_max_detection_ranges.begin(); it != empire_position_max_detection_ranges.end(); ++it) { @@ -2969,21 +2964,65 @@ GG::Pt circle_centre = ScreenCoordsFromUniversePosition(it->first.second.first, it->first.second.second); double radius = 10.0*it->second*ZoomFactor(); - if (radius < 20.0) continue; + if (radius < 20.0) + continue; GG::Pt ul = circle_centre - GG::Pt(GG::X(radius), GG::Y(radius)); GG::Pt lr = circle_centre + GG::Pt(GG::X(radius), GG::Y(radius)); - glColor(circle_colour); - glDisable(GL_TEXTURE_2D); - CircleArc(ul, lr, 0.0, TWO_PI, true); - CircleArc(ul, lr, 0.0, TWO_PI, false); - glEnable(GL_TEXTURE_2D); + circles.push_back(boost::make_tuple(ul, lr, circle_colour)); } } + +#define USE_STENCILS 1 + +#if USE_STENCILS + glClear(GL_STENCIL_BUFFER_BIT); + glPushAttrib(GL_ENABLE_BIT | GL_STENCIL_BUFFER_BIT); + glEnable(GL_STENCIL_TEST); +#endif + + const double TWO_PI = 2.0*3.1415926536; + glLineWidth(1.5); + glPushMatrix(); + glLoadIdentity(); + glEnable(GL_LINE_SMOOTH); + glDisable(GL_TEXTURE_2D); + + glStencilOp(GL_INCR, GL_INCR, GL_INCR); + glStencilFunc(GL_EQUAL, 0x0, 0x1); + + GG::Clr current_colour; + for (std::size_t i = 0; i < circles.size(); ++i) + { + if (!i || circles[i].get<2>() != current_colour) + glColor(current_colour = circles[i].get<2>()); + CircleArc(circles[i].get<0>(), circles[i].get<1>(), 0.0, TWO_PI, true); + } + + glStencilFunc(GL_EQUAL, 0x1, 0x1); + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + + const GG::Pt UNIT(GG::X1, GG::Y1); + for (std::size_t i = 0; i < circles.size(); ++i) + { + if (!i || circles[i].get<2>() != current_colour) + glColor(current_colour = circles[i].get<2>()); + CircleArc(circles[i].get<0>() + UNIT, circles[i].get<1>() - UNIT, 0.0, TWO_PI, false); + } + +#if !USE_STENCILS + glEnable(GL_TEXTURE_2D); glDisable(GL_LINE_SMOOTH); +#endif glPopMatrix(); glLineWidth(1.0); + +#if USE_STENCILS + glPopAttrib(); +#endif + +#undef USE_STENCILS } void MapWnd::CorrectMapPosition(GG::Pt &move_to_pt) |
From: <tz...@us...> - 2009-10-21 07:07:28
|
Revision: 3233 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3233&view=rev Author: tzlaine Date: 2009-10-21 07:07:21 +0000 (Wed, 21 Oct 2009) Log Message: ----------- Slightly improved the implementation of the previous commit. The visibility radii outlines now draw outside of the radii prper, instead of being clipped by them. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-10-21 05:32:21 UTC (rev 3232) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-10-21 07:07:21 UTC (rev 3233) @@ -2990,7 +2990,7 @@ glDisable(GL_TEXTURE_2D); glStencilOp(GL_INCR, GL_INCR, GL_INCR); - glStencilFunc(GL_EQUAL, 0x0, 0x1); + glStencilFunc(GL_EQUAL, 0x0, 0xf); GG::Clr current_colour; for (std::size_t i = 0; i < circles.size(); ++i) @@ -3000,7 +3000,7 @@ CircleArc(circles[i].get<0>(), circles[i].get<1>(), 0.0, TWO_PI, true); } - glStencilFunc(GL_EQUAL, 0x1, 0x1); + glStencilFunc(GL_GREATER, 0x2, 0xf); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); const GG::Pt UNIT(GG::X1, GG::Y1); |
From: <tz...@us...> - 2009-10-22 02:55:17
|
Revision: 3236 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3236&view=rev Author: tzlaine Date: 2009-10-22 02:55:11 +0000 (Thu, 22 Oct 2009) Log Message: ----------- Changed the visibility radii rendering code yet again. It now does what it used to do for all radii, but does it for each empire color. This prevents the odd interaction of shapes previously seen when empires had overlapping radii. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-10-21 18:40:52 UTC (rev 3235) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-10-22 02:55:11 UTC (rev 3236) @@ -34,7 +34,6 @@ #include "../client/human/HumanClientApp.h" #include <boost/timer.hpp> -#include <boost/tuple/tuple.hpp> #include <GG/DrawUtil.h> #include <GG/MultiEdit.h> @@ -59,6 +58,20 @@ const int MIN_SYSTEM_NAME_SIZE = 10; const int LAYOUT_MARGIN = 5; + struct ClrLess + { + bool operator()(const GG::Clr& rhs, const GG::Clr& lhs) + { + if (rhs.r != lhs.r) + return rhs.r < lhs.r; + if (rhs.g != lhs.g) + return rhs.g < lhs.g; + if (rhs.b != lhs.b) + return rhs.b < lhs.b; + return rhs.a < lhs.a; + } + }; + double ZoomScaleFactor(double steps_in) { if (steps_in > ZOOM_IN_MAX_STEPS) { Logger().errorStream() << "ZoomScaleFactor passed steps in (" << steps_in << ") higher than max (" << ZOOM_IN_MAX_STEPS << "), so using max"; @@ -2953,8 +2966,7 @@ } } - std::vector<boost::tuple<GG::Pt, GG::Pt, GG::Clr> > circles; - circles.reserve(empire_position_max_detection_ranges.size()); + std::map<GG::Clr, std::vector<std::pair<GG::Pt, GG::Pt> >, ClrLess> circles; for (std::map<std::pair<int, std::pair<double, double> >, double>::const_iterator it = empire_position_max_detection_ranges.begin(); it != empire_position_max_detection_ranges.end(); ++it) { @@ -2970,47 +2982,48 @@ GG::Pt ul = circle_centre - GG::Pt(GG::X(radius), GG::Y(radius)); GG::Pt lr = circle_centre + GG::Pt(GG::X(radius), GG::Y(radius)); - circles.push_back(boost::make_tuple(ul, lr, circle_colour)); + circles[circle_colour].push_back(std::make_pair(ul, lr)); } } #define USE_STENCILS 1 #if USE_STENCILS - glClear(GL_STENCIL_BUFFER_BIT); glPushAttrib(GL_ENABLE_BIT | GL_STENCIL_BUFFER_BIT); glEnable(GL_STENCIL_TEST); #endif const double TWO_PI = 2.0*3.1415926536; + const GG::Pt UNIT(GG::X1, GG::Y1); + glLineWidth(1.5); glPushMatrix(); glLoadIdentity(); glEnable(GL_LINE_SMOOTH); glDisable(GL_TEXTURE_2D); - glStencilOp(GL_INCR, GL_INCR, GL_INCR); - glStencilFunc(GL_EQUAL, 0x0, 0xf); - - GG::Clr current_colour; - for (std::size_t i = 0; i < circles.size(); ++i) - { - if (!i || circles[i].get<2>() != current_colour) - glColor(current_colour = circles[i].get<2>()); - CircleArc(circles[i].get<0>(), circles[i].get<1>(), 0.0, TWO_PI, true); + for (std::map<GG::Clr, std::vector<std::pair<GG::Pt, GG::Pt> > >::iterator it = circles.begin(); + it != circles.end(); + ++it) { + glClear(GL_STENCIL_BUFFER_BIT); + glStencilOp(GL_INCR, GL_INCR, GL_INCR); + glStencilFunc(GL_EQUAL, 0x0, 0xf); + glColor(it->first); + const std::vector<std::pair<GG::Pt, GG::Pt> >& circles_in_this_colour = it->second; + for (std::size_t i = 0; i < circles_in_this_colour.size(); ++i) + { + CircleArc(circles_in_this_colour[i].first, circles_in_this_colour[i].second, + 0.0, TWO_PI, true); + } + glStencilFunc(GL_GREATER, 0x2, 0xf); + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + for (std::size_t i = 0; i < circles_in_this_colour.size(); ++i) + { + CircleArc(circles_in_this_colour[i].first + UNIT, circles_in_this_colour[i].second - UNIT, + 0.0, TWO_PI, false); + } } - glStencilFunc(GL_GREATER, 0x2, 0xf); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - - const GG::Pt UNIT(GG::X1, GG::Y1); - for (std::size_t i = 0; i < circles.size(); ++i) - { - if (!i || circles[i].get<2>() != current_colour) - glColor(current_colour = circles[i].get<2>()); - CircleArc(circles[i].get<0>() + UNIT, circles[i].get<1>() - UNIT, 0.0, TWO_PI, false); - } - #if !USE_STENCILS glEnable(GL_TEXTURE_2D); glDisable(GL_LINE_SMOOTH); |
From: <geo...@us...> - 2009-10-23 00:56:28
|
Revision: 3237 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3237&view=rev Author: geoffthemedio Date: 2009-10-23 00:56:12 +0000 (Fri, 23 Oct 2009) Log Message: ----------- -Added more timing to MapWnd::InitTurn to isolate cause of long delays that occasionally occur -Tweaked recent changes to detection radii drawing to get rid of compile errors on MSVC Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-10-22 02:55:11 UTC (rev 3236) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-10-23 00:56:12 UTC (rev 3237) @@ -60,16 +60,16 @@ struct ClrLess { - bool operator()(const GG::Clr& rhs, const GG::Clr& lhs) - { - if (rhs.r != lhs.r) - return rhs.r < lhs.r; - if (rhs.g != lhs.g) - return rhs.g < lhs.g; - if (rhs.b != lhs.b) - return rhs.b < lhs.b; - return rhs.a < lhs.a; - } + bool operator()(const GG::Clr& rhs, const GG::Clr& lhs) const + { + if (rhs.r != lhs.r) + return rhs.r < lhs.r; + if (rhs.g != lhs.g) + return rhs.g < lhs.g; + if (rhs.b != lhs.b) + return rhs.b < lhs.b; + return rhs.a < lhs.a; + } }; double ZoomScaleFactor(double steps_in) { @@ -929,6 +929,7 @@ UpdateMeterEstimates(); + boost::timer timer; const std::map<int, std::set<int> > this_client_known_starlanes = empire->KnownStarlanes(); // get ids of systems partially or better visible to this empire. // TODO: make a UniverseObjectVisitor for objects visible to an empire at a specified visibility or greater @@ -939,7 +940,10 @@ if (universe.GetObjectVisibilityByEmpire(obj_id, empire->EmpireID()) >= VIS_PARTIAL_VISIBILITY) this_client_visible_systems.insert(obj_id); } + Logger().debugStream() << "MapWnd::InitTurn getting known starlanes and visible systems time: " << (timer.elapsed() * 1000.0); + + timer.restart(); // determine sytems where fleets can deliver supply, and groups of systems that can exchange resources for (EmpireManager::iterator it = manager.begin(); it != manager.end(); ++it) { Empire* empire2 = it->second; @@ -957,6 +961,7 @@ empire2->InitResourcePools(); } + Logger().debugStream() << "MapWnd::InitTurn resource pools init time: " << (timer.elapsed() * 1000.0); //// re-update meter estimates of ships after resource pools and fleet supply @@ -976,8 +981,8 @@ std::vector<const System*> systems = const_universe.FindObjects<System>(); for (std::vector<const System*>::const_iterator it = systems.begin(); it != systems.end(); ++it) { const System *system = *it; - m_system_fleet_insert_remove_signals[system->ID()].push_back(GG::Connect(system->FleetInsertedSignal, &MapWnd::FleetAddedOrRemoved, this)); - m_system_fleet_insert_remove_signals[system->ID()].push_back(GG::Connect(system->FleetRemovedSignal, &MapWnd::FleetAddedOrRemoved, this)); + m_system_fleet_insert_remove_signals[system->ID()].push_back(GG::Connect(system->FleetInsertedSignal, &MapWnd::FleetAddedOrRemoved, this)); + m_system_fleet_insert_remove_signals[system->ID()].push_back(GG::Connect(system->FleetRemovedSignal, &MapWnd::FleetAddedOrRemoved, this)); } RefreshFleetSignals(); @@ -1045,21 +1050,26 @@ m_toolbar->Show(); m_FPS->Show(); + + timer.restart(); for (EmpireManager::iterator it = manager.begin(); it != manager.end(); ++it) it->second->UpdateResourcePools(); + Logger().debugStream() << "MapWnd::InitTurn getting known starlanes and visible systems time: " << (timer.elapsed() * 1000.0); - boost::timer ui_refresh_timer; + timer.restart(); m_research_wnd->Refresh(); - Logger().debugStream() << "MapWnd::InitTurn research wnd refresh time: " << (ui_refresh_timer.elapsed() * 1000.0); + Logger().debugStream() << "MapWnd::InitTurn research wnd refresh time: " << (timer.elapsed() * 1000.0); - ui_refresh_timer.restart(); + + timer.restart(); SidePanel::Refresh(); // recreate contents of all SidePanels. ensures previous turn's objects and signals are disposed of - Logger().debugStream() << "MapWnd::InitTurn sidepanel refresh time: " << (ui_refresh_timer.elapsed() * 1000.0); + Logger().debugStream() << "MapWnd::InitTurn sidepanel refresh time: " << (timer.elapsed() * 1000.0); - ui_refresh_timer.restart(); + + timer.restart(); m_production_wnd->Refresh(); - Logger().debugStream() << "MapWnd::InitTurn m_production_wnd refresh time: " << (ui_refresh_timer.elapsed() * 1000.0); + Logger().debugStream() << "MapWnd::InitTurn m_production_wnd refresh time: " << (timer.elapsed() * 1000.0); // start first turn with player's system selected @@ -3002,7 +3012,7 @@ glEnable(GL_LINE_SMOOTH); glDisable(GL_TEXTURE_2D); - for (std::map<GG::Clr, std::vector<std::pair<GG::Pt, GG::Pt> > >::iterator it = circles.begin(); + for (std::map<GG::Clr, std::vector<std::pair<GG::Pt, GG::Pt> >, ClrLess>::iterator it = circles.begin(); it != circles.end(); ++it) { glClear(GL_STENCIL_BUFFER_BIT); |
From: <geo...@us...> - 2009-11-18 06:25:51
|
Revision: 3272 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3272&view=rev Author: geoffthemedio Date: 2009-11-18 06:25:34 +0000 (Wed, 18 Nov 2009) Log Message: ----------- Fixed bug where destroyed objects were contributing to displayed visibility radii Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-11-18 06:03:59 UTC (rev 3271) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-11-18 06:25:34 UTC (rev 3272) @@ -2981,10 +2981,19 @@ if (!GetOptionsDB().Get<bool>("UI.show-detection-range")) return; + int client_empire_id = HumanClientApp::GetApp()->EmpireID(); + const std::set<int>& known_destroyed_object_ids = GetUniverse().EmpireKnownDestroyedObjectIDs(client_empire_id); + const ObjectMap& known_objects = GetUniverse().EmpireKnownObjects(client_empire_id); + // for each map position and empire, find max value of detection range at that position std::map<std::pair<int, std::pair<double, double> >, double> empire_position_max_detection_ranges; - const ObjectMap& known_objects = GetUniverse().EmpireKnownObjects(HumanClientApp::GetApp()->EmpireID()); for (ObjectMap::const_iterator it = known_objects.const_begin(); it != known_objects.const_end(); ++it) { + // skip destroyed objects + int object_id = it->first; + if (known_destroyed_object_ids.find(object_id) != known_destroyed_object_ids.end()) + continue; + + // if this object has the largest yet checked visibility range at this location, update the location's range const UniverseObject* obj = it->second; if (const Meter* detection_meter = obj->GetMeter(METER_DETECTION)) { double X = obj->X(); @@ -2996,7 +3005,7 @@ std::pair<int, std::pair<double, double> > key = std::make_pair(*empire_it, std::make_pair(X, Y)); std::map<std::pair<int, std::pair<double, double> >, double>::iterator range_it = empire_position_max_detection_ranges.find(key); if (range_it != empire_position_max_detection_ranges.end()) { - if (range_it->second < D) range_it->second = D; // update existing entry + if (range_it->second < D) range_it->second = D; // update existing entry } else { empire_position_max_detection_ranges[key] = D; // add new entry to map } |
From: <on...@us...> - 2009-12-22 12:45:44
|
Revision: 3286 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3286&view=rev Author: ondrejr Date: 2009-12-22 12:45:27 +0000 (Tue, 22 Dec 2009) Log Message: ----------- fixed bug 2847212 by wrwrwr Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-11-23 14:45:40 UTC (rev 3285) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-12-22 12:45:27 UTC (rev 3286) @@ -1534,10 +1534,20 @@ for (std::set<std::pair<int, int> >::const_iterator lane_it = fleet_supply_lanes.begin(); lane_it != fleet_supply_lanes.end(); ++lane_it) { std::pair<int, int> lane = UnorderedIntPair(lane_it->first, lane_it->second); assert(m_starlane_endpoints[lane].X1 != UniverseObject::INVALID_POSITION); - raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].X1); - raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].Y1); - raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].X2); - raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].Y2); + + // coordinates map is oblivious to lane direction, so we need to take care of it here + if (lane_it->first == lane.first) { + raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].X1); + raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].Y1); + raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].X2); + raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].Y2); + } else { + raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].X2); + raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].Y2); + raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].X1); + raw_starlane_supply_vertices.push_back(m_starlane_endpoints[lane].Y1); + } + raw_starlane_supply_colors.push_back(empire->Color().r); raw_starlane_supply_colors.push_back(empire->Color().g); raw_starlane_supply_colors.push_back(empire->Color().b); |
From: <geo...@us...> - 2009-12-23 22:34:24
|
Revision: 3292 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3292&view=rev Author: geoffthemedio Date: 2009-12-23 22:34:17 +0000 (Wed, 23 Dec 2009) Log Message: ----------- Patch by wrwrwr for bug 2011896 - Collapsible items in side panel behave strangely Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-12-23 21:15:50 UTC (rev 3291) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-12-23 22:34:17 UTC (rev 3292) @@ -3628,6 +3628,10 @@ HideProduction(); else ShowProduction(); + + // make info panels in production/map window's side panel update their expand-collapse state + m_side_panel->Update(); + return true; } |