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