Merge lp:~widelands-dev/widelands/observer_building_spaces into lp:widelands

Proposed by Martin Schmidt
Status: Merged
Merged at revision: 7404
Proposed branch: lp:~widelands-dev/widelands/observer_building_spaces
Merge into: lp:widelands
Diff against target: 329 lines (+71/-79)
6 files modified
src/wui/interactive_gamebase.cc (+43/-2)
src/wui/interactive_gamebase.h (+5/-1)
src/wui/interactive_player.cc (+5/-60)
src/wui/interactive_player.h (+1/-4)
src/wui/interactive_spectator.cc (+16/-10)
src/wui/interactive_spectator.h (+1/-2)
To merge this branch: bzr merge lp:~widelands-dev/widelands/observer_building_spaces
Reviewer Review Type Date Requested Status
SirVer Approve
Review via email: mp+249764@code.launchpad.net

Description of the change

move of toogle buildhelp to the base class of player and spectator

To post a comment you must log in.
Revision history for this message
SirVer (sirver) wrote :

lgtm.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/wui/interactive_gamebase.cc'
2--- src/wui/interactive_gamebase.cc 2014-12-06 12:22:35 +0000
3+++ src/wui/interactive_gamebase.cc 2015-02-14 22:40:35 +0000
4@@ -29,6 +29,7 @@
5 #include "logic/findbob.h"
6 #include "logic/game.h"
7 #include "logic/game_controller.h"
8+#include "logic/map.h"
9 #include "logic/player.h"
10 #include "logic/ship.h"
11 #include "profile/profile.h"
12@@ -59,8 +60,18 @@
13 (global_s.get_string("building_tooltip_format", "%r")),
14 m_chatenabled(chatenabled),
15 m_multiplayer(multiplayer),
16- m_playertype(pt)
17-{}
18+ m_playertype(pt),
19+
20+#define INIT_BTN(picture, name, tooltip) \
21+ TOOLBAR_BUTTON_COMMON_PARAMETERS(name), \
22+ g_gr->images().get("pics/" picture ".png"), \
23+ tooltip \
24+
25+ m_toggle_buildhelp
26+ (INIT_BTN("menu_toggle_buildhelp", "buildhelp", _("Show Building Spaces (on/off)")))
27+{
28+ m_toggle_buildhelp.sigclicked.connect(boost::bind(&InteractiveGameBase::toggle_buildhelp, this));
29+}
30
31 /// \return a pointer to the running \ref Game instance.
32 Widelands::Game * InteractiveGameBase::get_game() const
33@@ -119,6 +130,36 @@
34
35
36 /**
37+ * Called for every game after loading (from a savegame or just from a map
38+ * during single/multiplayer/scenario).
39+ */
40+void InteractiveGameBase::postload() {
41+ Widelands::Map & map = egbase().map();
42+ OverlayManager & overlay_manager = map.overlay_manager();
43+ overlay_manager.show_buildhelp(false);
44+ overlay_manager.register_overlay_callback_function
45+ (boost::bind(&InteractiveGameBase::calculate_buildcaps, this, _1));
46+
47+ // Connect buildhelp button to reflect build help state. Needs to be
48+ // done here rather than in the constructor as the map is not present then.
49+ // This code assumes that the InteractivePlayer object lives longer than
50+ // the overlay_manager. Otherwise remove the hook in the deconstructor.
51+ egbase().map().overlay_manager().onBuildHelpToggle =
52+ boost::bind(&UI::Button::set_perm_pressed, &m_toggle_buildhelp, _1);
53+ m_toggle_buildhelp.set_perm_pressed(buildhelp());
54+
55+ // Recalc whole map for changed owner stuff
56+ map.recalc_whole_map(egbase().world());
57+
58+ // Close game-relevant UI windows (but keep main menu open)
59+ delete m_fieldaction.window;
60+ m_fieldaction.window = nullptr;
61+
62+ hide_minimap();
63+}
64+
65+
66+/**
67 * See if we can reasonably open a ship window at the current selection position.
68 * If so, do it and return true; otherwise, return false.
69 */
70
71=== modified file 'src/wui/interactive_gamebase.h'
72--- src/wui/interactive_gamebase.h 2014-11-30 12:23:45 +0000
73+++ src/wui/interactive_gamebase.h 2015-02-14 22:40:35 +0000
74@@ -82,9 +82,11 @@
75 bool is_multiplayer() {return m_multiplayer;}
76
77 void show_game_summary();
78-
79+ void postload() override;
80+ void start() override {};
81 protected:
82 void draw_overlay(RenderTarget &) override;
83+ virtual int32_t calculate_buildcaps(const Widelands::TCoords<Widelands::FCoords> c) =0;
84
85 GameMainMenuWindows m_mainm_windows;
86 ChatProvider * m_chatProvider;
87@@ -96,6 +98,8 @@
88 PlayerType m_playertype;
89 UI::UniqueWindow::Registry m_fieldaction;
90 UI::UniqueWindow::Registry m_game_summary;
91+
92+ UI::Button m_toggle_buildhelp;
93 };
94
95 #endif // end of include guard: WL_WUI_INTERACTIVE_GAMEBASE_H
96
97=== modified file 'src/wui/interactive_player.cc'
98--- src/wui/interactive_player.cc 2014-12-08 11:08:38 +0000
99+++ src/wui/interactive_player.cc 2015-02-14 22:40:35 +0000
100@@ -61,18 +61,6 @@
101 using Widelands::Building;
102 using Widelands::Map;
103
104-namespace {
105-
106-// This function is the callback for recalculation of field overlays
107-int32_t int_player_overlay_callback_function
108- (Widelands::TCoords<Widelands::FCoords> const c, InteractivePlayer& iap)
109-{
110- assert(iap.get_player());
111- return iap.get_player()->get_buildcaps(c);
112-}
113-
114-} // namespace
115-
116 InteractivePlayer::InteractivePlayer
117 (Widelands::Game & _game,
118 Section & global_s,
119@@ -84,7 +72,6 @@
120 m_flag_to_connect(Widelands::Coords::null()),
121
122 // Chat is different, as m_chatProvider needs to be checked when toggling
123-// Buildhelp is different as it does not toggle a UniqueWindow
124 // Minimap is different as it warps and stuff
125
126 #define INIT_BTN_this(picture, name, tooltip) \
127@@ -114,9 +101,6 @@
128 m_toggle_minimap
129 (INIT_BTN_this
130 ("menu_toggle_minimap", "minimap", _("Minimap"))),
131-m_toggle_buildhelp
132- (INIT_BTN_this
133- ("menu_toggle_buildhelp", "buildhelp", _("Show Building Spaces (on/off)"))),
134 m_toggle_message_menu
135 (INIT_BTN
136 ("menu_toggle_oldmessage_menu", "messages", _("Messages"))),
137@@ -135,8 +119,6 @@
138 (boost::bind(&UI::UniqueWindow::Registry::toggle, boost::ref(m_objectives)));
139 m_toggle_minimap.sigclicked.connect
140 (boost::bind(&InteractivePlayer::toggle_minimap, this));
141- m_toggle_buildhelp.sigclicked.connect
142- (boost::bind(&InteractivePlayer::toggle_buildhelp, this));
143 m_toggle_message_menu.sigclicked.connect
144 (boost::bind(&UI::UniqueWindow::Registry::toggle, boost::ref(m_message_menu)));
145 m_toggle_help.sigclicked.connect
146@@ -206,17 +188,6 @@
147 DEINIT_BTN_HOOKS(m_message_menu, m_toggle_message_menu)
148 }
149
150-
151-/*
152-===============
153-Called just before the game starts, after postload, init and gfxload
154-===============
155-*/
156-void InteractivePlayer::start()
157-{
158- postload();
159-}
160-
161 void InteractivePlayer::think()
162 {
163 InteractiveBase::think();
164@@ -267,37 +238,6 @@
165 }
166
167
168-/**
169- * Called for every game after loading (from a savegame or just from a map
170- * during single/multiplayer/scenario).
171- */
172-void InteractivePlayer::postload()
173-{
174- Map & map = egbase().map();
175- OverlayManager & overlay_manager = map.overlay_manager();
176- overlay_manager.show_buildhelp(false);
177- overlay_manager.register_overlay_callback_function
178- (boost::bind(&int_player_overlay_callback_function, _1, boost::ref(*this)));
179-
180- // Connect buildhelp button to reflect build help state. Needs to be
181- // done here rather than in the constructor as the map is not present then.
182- // This code assumes that the InteractivePlayer object lives longer than
183- // the overlay_manager. Otherwise remove the hook in the deconstructor.
184- egbase().map().overlay_manager().onBuildHelpToggle =
185- boost::bind(&UI::Button::set_perm_pressed, &m_toggle_buildhelp, _1);
186- m_toggle_buildhelp.set_perm_pressed(buildhelp());
187-
188- // Recalc whole map for changed owner stuff
189- map.recalc_whole_map(egbase().world());
190-
191- // Close game-relevant UI windows (but keep main menu open)
192- delete m_fieldaction.window;
193- m_fieldaction.window = nullptr;
194-
195- hide_minimap();
196-}
197-
198-
199 void InteractivePlayer::popup_message
200 (Widelands::MessageId const id, const Widelands::Message & message)
201 {
202@@ -328,6 +268,11 @@
203 return m_player_number;
204 }
205
206+int32_t InteractivePlayer::calculate_buildcaps(const Widelands::TCoords<Widelands::FCoords> c) {
207+ assert(get_player());
208+ return get_player()->get_buildcaps(c);
209+}
210+
211
212 /// Player has clicked on the given node; bring up the context menu.
213 void InteractivePlayer::node_action()
214
215=== modified file 'src/wui/interactive_player.h'
216--- src/wui/interactive_player.h 2014-10-14 06:30:20 +0000
217+++ src/wui/interactive_player.h 2015-02-14 22:40:35 +0000
218@@ -51,8 +51,6 @@
219
220 ~InteractivePlayer();
221
222- void start() override;
223-
224 void toggle_chat ();
225
226 bool can_see(Widelands::PlayerNumber) const override;
227@@ -77,13 +75,13 @@
228 // For load
229 void cleanup_for_load() override;
230 void think() override;
231- void postload() override;
232
233 void set_flag_to_connect(Widelands::Coords const location) {
234 m_flag_to_connect = location;
235 }
236
237 void popup_message(Widelands::MessageId, const Widelands::Message &);
238+ int32_t calculate_buildcaps(const Widelands::TCoords<Widelands::FCoords> c) override;
239
240 private:
241 void cmdSwitchPlayer(const std::vector<std::string> & args);
242@@ -97,7 +95,6 @@
243 UI::Button m_toggle_statistics_menu;
244 UI::Button m_toggle_objectives;
245 UI::Button m_toggle_minimap;
246- UI::Button m_toggle_buildhelp;
247 UI::Button m_toggle_message_menu;
248 UI::Button m_toggle_help;
249
250
251=== modified file 'src/wui/interactive_spectator.cc'
252--- src/wui/interactive_spectator.cc 2014-12-03 08:14:35 +0000
253+++ src/wui/interactive_spectator.cc 2015-02-14 22:40:35 +0000
254@@ -24,6 +24,7 @@
255 #include "chat/chat.h"
256 #include "graphic/graphic.h"
257 #include "logic/game_controller.h"
258+#include "logic/player.h"
259 #include "ui_basic/editbox.h"
260 #include "ui_basic/multilinetextarea.h"
261 #include "ui_basic/textarea.h"
262@@ -75,6 +76,7 @@
263 m_toolbar.add(&m_toggle_options_menu, UI::Box::AlignLeft);
264 m_toolbar.add(&m_toggle_statistics, UI::Box::AlignLeft);
265 m_toolbar.add(&m_toggle_minimap, UI::Box::AlignLeft);
266+ m_toolbar.add(&m_toggle_buildhelp, UI::Box::AlignLeft);
267 m_toolbar.add(&m_toggle_chat, UI::Box::AlignLeft);
268
269 // TODO(unknown): instead of making unneeded buttons invisible after generation,
270@@ -140,17 +142,17 @@
271 }
272
273
274-/**
275- * Called just before the game starts, after postload, init and gfxload
276- */
277-void InteractiveSpectator::start()
278-{
279- Widelands::Map & map = game().map();
280- OverlayManager & overlay_manager = map.overlay_manager();
281- overlay_manager.show_buildhelp(false);
282+int32_t InteractiveSpectator::calculate_buildcaps(const Widelands::TCoords<Widelands::FCoords> c) {
283+ const Widelands::PlayerNumber nr_players = game().map().get_nrplayers();
284+
285+ iterate_players_existing(p, nr_players, game(), player) {
286+ const Widelands::NodeCaps nc = player->get_buildcaps(c);
287+ if( nc > Widelands::NodeCaps::CAPS_NONE ) {
288+ return nc;
289+ }
290+ }
291
292- // Recalc whole map for changed owner stuff
293- map.recalc_whole_map(game().world());
294+ return Widelands::NodeCaps::CAPS_NONE;
295 }
296
297
298@@ -245,6 +247,10 @@
299 {
300 if (down)
301 switch (code.sym) {
302+ case SDLK_SPACE:
303+ toggle_buildhelp();
304+ return true;
305+
306 case SDLK_m:
307 toggle_minimap();
308 return true;
309
310=== modified file 'src/wui/interactive_spectator.h'
311--- src/wui/interactive_spectator.h 2014-10-14 06:30:20 +0000
312+++ src/wui/interactive_spectator.h 2015-02-14 22:40:35 +0000
313@@ -40,8 +40,6 @@
314
315 ~InteractiveSpectator();
316
317- void start() override;
318-
319 Widelands::Player * get_player() const override;
320
321 bool handle_key(bool down, SDL_Keysym) override;
322@@ -52,6 +50,7 @@
323 void toggle_statistics();
324 void exit_btn();
325 void save_btn();
326+ int32_t calculate_buildcaps(const Widelands::TCoords<Widelands::FCoords> ) override;
327 bool can_see(Widelands::PlayerNumber) const override;
328 bool can_act(Widelands::PlayerNumber) const override;
329 Widelands::PlayerNumber player_number() const override;

Subscribers

People subscribed via source and target branches

to status/vote changes: