Author: dhains
Date: Sat Jun 14 23:24:59 2008
New Revision: 27182

URL: http://svn.gna.org/viewcvs/wesnoth?rev=27182&view=rev
Log:
Persistant AI changes:
* added singleton ai manager class 
* removed info updates from new_turn() (should not be needed unless any of the 
objects referenced in the info struct are deleted and re-created mid scenario) 

Modified:
    trunk/data/scenario-formula.cfg
    trunk/src/ai.cpp
    trunk/src/ai.hpp
    trunk/src/ai_interface.hpp
    trunk/src/formula_ai.cpp
    trunk/src/formula_ai.hpp

Modified: trunk/data/scenario-formula.cfg
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/data/scenario-formula.cfg?rev=27182&r1=27181&r2=27182&view=diff
==============================================================================
--- trunk/data/scenario-formula.cfg (original)
+++ trunk/data/scenario-formula.cfg Sat Jun 14 23:24:59 2008
@@ -4,8 +4,8 @@
 [test]
     name="Test scenario"
     map_data="
-border_size=1
-usage=map
+       border_size=1
+       usage=map
 
 Hh          , Hh          , Gg          , Wwf         , Wwf         , Gs^Fp    
   , Mm          , Hh          , Gg          , Gs^Fp       , Gg          , Hh   
       , Gg          , Mm          , Hh          , Mm          , Wwf         , 
Wwf         , Hh          , Gs^Fp       , Hh          , Mm          , Mm        
  
 Hh          , Hh          , Gg^Ve       , Wwf         , Wwf         , Gs^Fp    
   , Mm          , Hh          , Gg          , Gs^Fp       , Gg          , Hh   
       , Gg          , Mm          , Hh          , Mm          , Wwf         , 
Wwf         , Hh          , Gs^Fp       , Hh          , Mm          , Mm        
  
@@ -51,6 +51,7 @@
 
     [side]
         #controller=human
+               name=FormulaAI
         type=Dark Sorcerer
         side=2
         canrecruit=1

Modified: trunk/src/ai.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai.cpp?rev=27182&r1=27181&r2=27182&view=diff
==============================================================================
--- trunk/src/ai.cpp (original)
+++ trunk/src/ai.cpp Sat Jun 14 23:24:59 2008
@@ -252,17 +252,11 @@
        attack_depth_(0)
 {}
 
-void ai::new_turn(info& info) 
-{
-       ai_interface::new_turn(info);
+void ai::new_turn() 
+{
        defensive_position_cache_.clear();
        threats_found_ = false;
        attacks_.clear();
-       map_ = info.map;
-       units_ = info.units;
-       teams_ = info.teams;
-       team_num_ = info.team_num;
-       state_ = info.state;
        consider_combat_ = true;
        additional_targets_.clear();
        unit_movement_scores_.clear();
@@ -272,6 +266,7 @@
        avoid_.clear();
        unit_stats_cache_.clear();
        attack_depth_ = 0;
+       ai_interface::new_turn();
 }
 
 bool ai::recruit_usage(const std::string& usage)
@@ -2371,3 +2366,18 @@
        inputs->push_back(formula_input("uses_leader", FORMULA_READ_ONLY));
        inputs->push_back(formula_input("is_surrounded", FORMULA_READ_ONLY));
 }
+
+std::map<std::string, boost::shared_ptr<ai_interface> > ai_manager::ais = 
std::map<std::string, boost::shared_ptr<ai_interface> >();
+
+boost::shared_ptr<ai_interface> ai_manager::get_ai(ai_interface::info& 
ai_info, std::string ai_key, std::string ai_algo) {
+       ai_map::const_iterator itor = ais.find(ai_key);
+       if(itor == ais.end()) {
+               boost::shared_ptr<ai_interface> new_ai(create_ai(ai_algo, 
ai_info));
+               ai_map::value_type new_ai_pair(ai_key, new_ai);
+               itor = ais.insert(new_ai_pair).first;
+       } else {
+               itor->second->new_turn();
+       }
+       return itor->second;
+}
+

Modified: trunk/src/ai.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai.hpp?rev=27182&r1=27181&r2=27182&view=diff
==============================================================================
--- trunk/src/ai.hpp (original)
+++ trunk/src/ai.hpp Sat Jun 14 23:24:59 2008
@@ -31,7 +31,7 @@
        virtual ~ai() {}
 
        virtual void play_turn();
-       virtual void new_turn(info& info);
+       virtual void new_turn();
 
        struct target {
                enum TYPE { VILLAGE, LEADER, EXPLICIT, THREAT, BATTLE_AID, 
MASS, SUPPORT };
@@ -326,4 +326,15 @@
                const std::multimap<gamemap::location,gamemap::location>& 
enemy_dstsrc) const;
 };
 
+class ai_manager {
+
+       typedef std::map<std::string, boost::shared_ptr<ai_interface> > ai_map;
+
+       public: 
+               static boost::shared_ptr<ai_interface> 
get_ai(ai_interface::info&, std::string, std::string);
+
+       private:
+               static ai_map ais;
+};
+
 #endif

Modified: trunk/src/ai_interface.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai_interface.hpp?rev=27182&r1=27181&r2=27182&view=diff
==============================================================================
--- trunk/src/ai_interface.hpp (original)
+++ trunk/src/ai_interface.hpp Sat Jun 14 23:24:59 2008
@@ -86,14 +86,8 @@
 
        //! Function called when a a new turn is played 
        //! Derived persistant AIs should call this function each turn (expect 
first)
-       virtual void new_turn(info& i) {
+       virtual void new_turn() {
                last_interact_ = 0;
-               info_.map = i.map;
-               info_.units = i.units;
-               info_.teams = i.teams;
-               info_.team_num = i.team_num;
-               info_.state = i.state;
-               info_.game_state_ = i.game_state_;
        }
 
        //! Return a reference to the 'team' object for the AI.

Modified: trunk/src/formula_ai.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/formula_ai.cpp?rev=27182&r1=27181&r2=27182&view=diff
==============================================================================
--- trunk/src/formula_ai.cpp (original)
+++ trunk/src/formula_ai.cpp Sat Jun 14 23:24:59 2008
@@ -943,6 +943,12 @@
        vars_.add_ref();
 }
 
+void formula_ai::new_turn() 
+{
+       move_maps_valid_ = false;
+
+       ai::new_turn();
+}
 void formula_ai::play_turn()
 {
        ai_function_symbol_table function_table(*this);

Modified: trunk/src/formula_ai.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/formula_ai.hpp?rev=27182&r1=27181&r2=27182&view=diff
==============================================================================
--- trunk/src/formula_ai.hpp (original)
+++ trunk/src/formula_ai.hpp Sat Jun 14 23:24:59 2008
@@ -28,6 +28,7 @@
 public:
        explicit formula_ai(info& i);
        virtual void play_turn();
+       virtual void new_turn();
 
        using ai_interface::get_info;
        using ai_interface::current_team;


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to