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