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

Reply via email to