widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #03643
[Merge] lp:~martinschmidt/widelands/observer_building_spaces into lp:widelands
Martin Schmidt has proposed merging lp:~martinschmidt/widelands/observer_building_spaces into lp:widelands.
Requested reviews:
Widelands Developers (widelands-dev)
Related bugs:
Bug #1419537 in widelands: "Allow Observers to show building spaces"
https://bugs.launchpad.net/widelands/+bug/1419537
For more details, see:
https://code.launchpad.net/~martinschmidt/widelands/observer_building_spaces/+merge/249558
Allow observers to see builing spaces of all players
--
Your team Widelands Developers is requested to review the proposed merge of lp:~martinschmidt/widelands/observer_building_spaces into lp:widelands.
=== modified file 'src/wui/interactive_spectator.cc'
--- src/wui/interactive_spectator.cc 2014-12-03 08:14:35 +0000
+++ src/wui/interactive_spectator.cc 2015-02-12 19:10:45 +0000
@@ -24,6 +24,7 @@
#include "chat/chat.h"
#include "graphic/graphic.h"
#include "logic/game_controller.h"
+#include "logic/player.h"
#include "ui_basic/editbox.h"
#include "ui_basic/multilinetextarea.h"
#include "ui_basic/textarea.h"
@@ -34,6 +35,28 @@
#include "wui/game_options_menu.h"
#include "wui/general_statistics_menu.h"
+
+namespace {
+
+// This function is the callback for recalculation of field overlays for
+// spectators (iteration over all players and first match returned)
+int32_t all_player_overlay_callback_function
+ (Widelands::TCoords<Widelands::FCoords> const c, const Widelands::Game& game)
+{
+ Widelands::PlayerNumber const nr_players = game.map().get_nrplayers();
+
+ iterate_players_existing(p, nr_players, game, player) {
+ Widelands::NodeCaps nc = player->get_buildcaps(c);
+ if( nc > Widelands::NodeCaps::CAPS_NONE ){
+ return nc;
+ }
+ }
+
+ return Widelands::NodeCaps::CAPS_NONE;
+}
+
+}
+
/**
* Setup the replay UI for the given game.
*/
@@ -58,7 +81,11 @@
m_toggle_statistics
(INIT_BTN("menu_general_stats", "general_stats", _("Statistics"))),
m_toggle_minimap
- (INIT_BTN("menu_toggle_minimap", "minimap", _("Minimap")))
+ (INIT_BTN("menu_toggle_minimap", "minimap", _("Minimap"))),
+ m_toggle_buildhelp
+ (INIT_BTN("menu_toggle_buildhelp", "buildhelp", _("Show Building Spaces (on/off)"))),
+ m_showbuildhelp(false)
+
{
m_toggle_chat.sigclicked.connect(boost::bind(&InteractiveSpectator::toggle_chat, this));
m_exit.sigclicked.connect(boost::bind(&InteractiveSpectator::exit_btn, this));
@@ -66,6 +93,7 @@
m_toggle_options_menu.sigclicked.connect(boost::bind(&InteractiveSpectator::toggle_options_menu, this));
m_toggle_statistics.sigclicked.connect(boost::bind(&InteractiveSpectator::toggle_statistics, this));
m_toggle_minimap.sigclicked.connect(boost::bind(&InteractiveSpectator::toggle_minimap, this));
+ m_toggle_buildhelp.sigclicked.connect(boost::bind(&InteractiveSpectator::toggle_buildhelp, this));
m_toolbar.set_layout_toplevel(true);
if (!is_multiplayer()) {
@@ -75,6 +103,7 @@
m_toolbar.add(&m_toggle_options_menu, UI::Box::AlignLeft);
m_toolbar.add(&m_toggle_statistics, UI::Box::AlignLeft);
m_toolbar.add(&m_toggle_minimap, UI::Box::AlignLeft);
+ m_toolbar.add(&m_toggle_buildhelp, UI::Box::AlignLeft);
m_toolbar.add(&m_toggle_chat, UI::Box::AlignLeft);
// TODO(unknown): instead of making unneeded buttons invisible after generation,
@@ -148,6 +177,8 @@
Widelands::Map & map = game().map();
OverlayManager & overlay_manager = map.overlay_manager();
overlay_manager.show_buildhelp(false);
+ overlay_manager.register_overlay_callback_function
+ (boost::bind(&all_player_overlay_callback_function, _1, boost::ref(game()) ));
// Recalc whole map for changed owner stuff
map.recalc_whole_map(game().world());
@@ -205,6 +236,15 @@
}
+void InteractiveSpectator::toggle_buildhelp(){
+ m_showbuildhelp = !m_showbuildhelp;
+ Widelands::Map & map = game().map();
+ OverlayManager & overlay_manager = map.overlay_manager();
+ overlay_manager.show_buildhelp(m_showbuildhelp);
+ m_toggle_buildhelp.set_perm_pressed(m_showbuildhelp);
+}
+
+
bool InteractiveSpectator::can_see(Widelands::PlayerNumber) const
{
return true;
@@ -245,6 +285,10 @@
{
if (down)
switch (code.sym) {
+ case SDLK_SPACE:
+ toggle_buildhelp();
+ return true;
+
case SDLK_m:
toggle_minimap();
return true;
=== modified file 'src/wui/interactive_spectator.h'
--- src/wui/interactive_spectator.h 2014-10-14 06:30:20 +0000
+++ src/wui/interactive_spectator.h 2015-02-12 19:10:45 +0000
@@ -50,6 +50,7 @@
void toggle_chat();
void toggle_options_menu();
void toggle_statistics();
+ void toggle_buildhelp();
void exit_btn();
void save_btn();
bool can_see(Widelands::PlayerNumber) const override;
@@ -64,10 +65,13 @@
UI::Button m_toggle_options_menu;
UI::Button m_toggle_statistics;
UI::Button m_toggle_minimap;
+ UI::Button m_toggle_buildhelp;
UI::UniqueWindow::Registry m_chat;
UI::UniqueWindow::Registry m_options;
+
+ bool m_showbuildhelp;
};