Author: tschmitz
Date: Fri Aug 19 22:58:08 2011
New Revision: 50856
URL: http://svn.gna.org/viewcvs/wesnoth?rev=50856&view=rev
Log:
Fixed recruit bug from multi-turn moves commit.
Modified:
trunk/src/whiteboard/manager.cpp
trunk/src/whiteboard/recall.hpp
trunk/src/whiteboard/recruit.hpp
trunk/src/whiteboard/utility.cpp
trunk/src/whiteboard/utility.hpp
trunk/src/whiteboard/validate_visitor.cpp
Modified: trunk/src/whiteboard/manager.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/manager.cpp?rev=50856&r1=50855&r2=50856&view=diff
==============================================================================
--- trunk/src/whiteboard/manager.cpp (original)
+++ trunk/src/whiteboard/manager.cpp Fri Aug 19 22:58:08 2011
@@ -282,7 +282,10 @@
{update_plan_hiding(viewer_team());}
void manager::on_viewer_change(size_t team_index)
- {update_plan_hiding(team_index);}
+{
+ if(!wait_for_side_init_)
+ update_plan_hiding(team_index);
+}
void manager::on_change_controller(int side, team& t)
{
@@ -743,9 +746,12 @@
else
{
side_actions& sa = *viewer_actions();
- size_t turn = sa.num_turns();
- if(turn > 0)
- --turn;
+ unit* recruiter;
+ { wb::scoped_planned_unit_map raii;
+ recruiter =
find_recruiter(side_num-1,recruit_hex);
+ } // end planned unit map scope
+ assert(recruiter);
+ size_t turn = sa.get_turn_num_of(*recruiter);
sa.queue_recruit(turn,name,recruit_hex);
created_planned_recruit = true;
Modified: trunk/src/whiteboard/recall.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/recall.hpp?rev=50856&r1=50855&r2=50856&view=diff
==============================================================================
--- trunk/src/whiteboard/recall.hpp (original)
+++ trunk/src/whiteboard/recall.hpp Fri Aug 19 22:58:08 2011
@@ -56,8 +56,8 @@
*/
virtual map_location get_numbering_hex() const { return recall_hex_; }
- /** For recall actions, always returns NULL. */
- virtual unit* get_unit() const { return NULL; }
+ /** @return pointer to a copy of the recall unit. */
+ virtual unit* get_unit() const { return temp_unit_; }
map_location const get_recall_hex() const { return recall_hex_; }
Modified: trunk/src/whiteboard/recruit.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/recruit.hpp?rev=50856&r1=50855&r2=50856&view=diff
==============================================================================
--- trunk/src/whiteboard/recruit.hpp (original)
+++ trunk/src/whiteboard/recruit.hpp Fri Aug 19 22:58:08 2011
@@ -60,8 +60,8 @@
*/
virtual map_location get_numbering_hex() const { return recruit_hex_; }
- /** For recruit actions, always returns NULL. */
- virtual unit* get_unit() const { return NULL; }
+ /** @return pointer to a fake unit representing the one that will
eventually be recruited. */
+ virtual unit* get_unit() const { return temp_unit_; }
map_location const get_recruit_hex() const { return recruit_hex_; }
Modified: trunk/src/whiteboard/utility.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/utility.cpp?rev=50856&r1=50855&r2=50856&view=diff
==============================================================================
--- trunk/src/whiteboard/utility.cpp (original)
+++ trunk/src/whiteboard/utility.cpp Fri Aug 19 22:58:08 2011
@@ -88,6 +88,24 @@
return NULL;
}
+unit* find_recruiter(size_t team_index, map_location const& hex)
+{
+ gamemap& map = *resources::game_map;
+
+ if(!map.on_board(hex))
+ return NULL;
+
+ if(!map.is_castle(hex))
+ return NULL;
+
+ foreach(unit& u, *resources::units)
+ if(u.can_recruit()
+ && u.side() == static_cast<int>(team_index+1)
+ && can_recruit_on(map,u.get_location(),hex))
+ return &u;
+ return NULL;
+}
+
unit* future_visible_unit(map_location hex, int viewer_side)
{
scoped_planned_unit_map planned_unit_map;
Modified: trunk/src/whiteboard/utility.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/utility.hpp?rev=50856&r1=50855&r2=50856&view=diff
==============================================================================
--- trunk/src/whiteboard/utility.hpp (original)
+++ trunk/src/whiteboard/utility.hpp Fri Aug 19 22:58:08 2011
@@ -51,6 +51,12 @@
*/
unit const* find_backup_leader(unit const& leader);
+/**
+ * @return a leader from the specified team who can recruit on the specified
hex
+ * @retval NULL if no such leader has been found
+ */
+unit* find_recruiter(size_t team_index, map_location const&);
+
/// Applies the future unit map and @return a pointer to the unit at hex
/// @retval NULL if none is visible to the specified viewer side
unit* future_visible_unit(map_location hex, int viewer_side =
wb::viewer_side());
Modified: trunk/src/whiteboard/validate_visitor.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/whiteboard/validate_visitor.cpp?rev=50856&r1=50855&r2=50856&view=diff
==============================================================================
--- trunk/src/whiteboard/validate_visitor.cpp (original)
+++ trunk/src/whiteboard/validate_visitor.cpp Fri Aug 19 22:58:08 2011
@@ -245,6 +245,12 @@
LOG_WB << "Recruit set as invalid, team doesn't have enough
gold.\n";
recruit->set_valid(false);
}
+ //Check that there is a leader available to recruit this unit
+ if(recruit->is_valid() &&
!find_recruiter(recruit->team_index(),recruit->get_recruit_hex()))
+ {
+ LOG_WB << "Recruit set as invalid, no leader can recruit this
unit.\n";
+ recruit->set_valid(false);
+ }
if(!recruit->is_valid())
{
@@ -288,6 +294,13 @@
LOG_WB << "Recall set as invalid, team doesn't have enough
gold.\n";
recall->set_valid(false);
}
+ //Check that there is a leader available to recall this unit
+ if(recall->is_valid() &&
find_recruiter(recall->team_index(),recall->get_recall_hex()))
+ {
+ LOG_WB << "Recall set as invalid, no leader can recall this
unit.\n";
+ recall->set_valid(false);
+ }
+
if(!recall->is_valid())
{
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits