← Back to team overview

widelands-dev team mailing list archive

[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;
 };