Author: crab
Date: Sat May 2 03:04:19 2009
New Revision: 35406
URL: http://svn.gna.org/viewcvs/wesnoth?rev=35406&view=rev
Log:
Swapped places of ai_interface and ai_readwrite_context in ai superclass
hierarchy. This will allow to make the ai module interface more independent
from the ai module implementation and reduce compile times. For now, only
ai/ai_manager.hpp (class managing the ai lifecycle), ai/ai_interface.hpp
(individual ai contract) ai/game_info.hpp (information about the game state
passed to the ai), ai/testing.hpp (ai/testing log domain) are exposed to the
rest of the game, taking transitive includes into account )
Modified:
trunk/src/ai/ai.cpp
trunk/src/ai/ai.hpp
trunk/src/ai/ai2.hpp
trunk/src/ai/ai_actions.hpp
trunk/src/ai/ai_dfool.hpp
trunk/src/ai/ai_interface.cpp
trunk/src/ai/ai_interface.hpp
trunk/src/ai/ai_manager.hpp
trunk/src/ai/contexts.cpp
trunk/src/ai/contexts.hpp
trunk/src/ai/formula_ai.cpp
trunk/src/ai/formula_ai.hpp
trunk/src/ai/game_info.cpp
trunk/src/ai/testing.cpp
trunk/src/game_events.cpp
Modified: trunk/src/ai/ai.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai.cpp (original)
+++ trunk/src/ai/ai.cpp Sat May 2 03:04:19 2009
@@ -46,7 +46,7 @@
typedef util::array<map_location,6> adjacent_tiles_array;
-idle_ai::idle_ai(int side, bool master) : ai_interface(side,master)
+idle_ai::idle_ai(int side, bool master) : ai_readwrite_context(side,master)
{
}
@@ -61,9 +61,9 @@
/** Sample ai, with simple strategy. */
-class sample_ai : public ai_interface {
+class sample_ai : public ai_readwrite_context {
public:
- sample_ai(int side, bool master) : ai_interface(side,master) {}
+ sample_ai(int side, bool master) : ai_readwrite_context(side,master) {}
void play_turn() {
game_events::fire("ai turn");
@@ -193,7 +193,7 @@
};
ai::ai(int side, bool master) :
- ai_interface(side,master),
+ ai_readwrite_context(side,master),
defensive_position_cache_(),
threats_found_(false),
attacks_(),
@@ -1906,19 +1906,6 @@
return attack_depth_;
}
-variant ai_interface::get_value(const std::string& key) const
-{
- if(key == "map") {
- return variant(new gamemap_callable(get_info().map));
- }
- return variant();
-}
-
-void ai_interface::get_inputs(std::vector<game_logic::formula_input>* inputs)
const
-{
- using game_logic::FORMULA_READ_ONLY;
- inputs->push_back(game_logic::formula_input("map", FORMULA_READ_ONLY));
-}
variant ai::attack_analysis::get_value(const std::string& key) const
{
Modified: trunk/src/ai/ai.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai.hpp (original)
+++ trunk/src/ai/ai.hpp Sat May 2 03:04:19 2009
@@ -20,20 +20,20 @@
#include "../global.hpp"
#include "../actions.hpp"
-#include "ai_interface.hpp"
+#include "contexts.hpp"
#include "../formula_callable.hpp"
class formula_ai;
/** A trivial ai that sits around doing absolutely nothing. */
-class idle_ai : public ai_interface {
+class idle_ai : public ai_readwrite_context {
public:
idle_ai(int side, bool master);
void play_turn();
virtual std::string describe_self();
};
-class ai : public ai_interface {
+class ai : public ai_readwrite_context {
public:
ai(int side, bool master);
Modified: trunk/src/ai/ai2.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai2.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai2.hpp (original)
+++ trunk/src/ai/ai2.hpp Sat May 2 03:04:19 2009
@@ -20,12 +20,12 @@
#ifndef AI_AI2_HPP_INCLUDED
#define AI_AI2_HPP_INCLUDED
-#include "ai_interface.hpp"
+#include "contexts.hpp"
-class ai2 : public ai_interface
+class ai2 : public ai_readwrite_context
{
public:
- ai2(int side, bool master) : ai_interface(side, master)
+ ai2(int side, bool master) : ai_readwrite_context(side, master)
{}
virtual ~ai2() {}
virtual void play_turn() {}
Modified: trunk/src/ai/ai_actions.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai_actions.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai_actions.hpp (original)
+++ trunk/src/ai/ai_actions.hpp Sat May 2 03:04:19 2009
@@ -25,7 +25,7 @@
#include "game_info.hpp"
#include "../map.hpp"
#include "../map_location.hpp"
-#include "pathfind.hpp"
+#include "../pathfind.hpp"
#include "../team.hpp"
#include <memory>
Modified: trunk/src/ai/ai_dfool.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai_dfool.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai_dfool.hpp (original)
+++ trunk/src/ai/ai_dfool.hpp Sat May 2 03:04:19 2009
@@ -22,7 +22,7 @@
#include "../global.hpp"
-#include "ai_interface.hpp"
+#include "contexts.hpp"
#include "../map_location.hpp"
#include "../unit_map.hpp"
#include "../unit.hpp"
@@ -98,9 +98,9 @@
* does not target units that it has not "seen",
* and does not make decisions based on unseen units.
*/
- class dfool_ai : public ai_interface {
+ class dfool_ai : public ai_readwrite_context {
public:
- dfool_ai(int side, bool master) : ai_interface(side, master),
unit_memory_(current_team().ai_memory()){}
+ dfool_ai(int side, bool master) : ai_readwrite_context(side, master),
unit_memory_(current_team().ai_memory()){}
void play_turn();
virtual std::string describe_self();
private:
Modified: trunk/src/ai/ai_interface.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai_interface.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai_interface.cpp (original)
+++ trunk/src/ai/ai_interface.cpp Sat May 2 03:04:19 2009
@@ -17,11 +17,13 @@
* @file ai/ai_interface.cpp
*/
-#include "ai_actions.hpp"
#include "ai_interface.hpp"
-#include "ai_manager.hpp"
// =======================================================================
//
// =======================================================================
+std::string ai_interface::describe_self() const
+{
+ return "? [ai]";
+}
Modified: trunk/src/ai/ai_interface.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai_interface.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai_interface.hpp (original)
+++ trunk/src/ai/ai_interface.hpp Sat May 2 03:04:19 2009
@@ -20,16 +20,33 @@
#ifndef AI_AI_INTERFACE_HPP_INCLUDED
#define AI_AI_INTERFACE_HPP_INCLUDED
-#include "contexts.hpp"
#include "../formula_callable.hpp"
-class ai_interface : public game_logic::formula_callable, public
ai_readwrite_context {
+class side_context {
+public:
+
+ side_context(unsigned int side) : side_(side) {}
+
+ virtual ~side_context() {}
+
+ /** get the 1-based side number which is controlled by this AI */
+ unsigned int get_side() const { return side_;}
+
+ /** Set the side */
+ virtual void set_side(unsigned int side) { side_ = side; }
+
+private:
+ unsigned int side_;
+
+};
+
+
+class ai_interface : public side_context {
public:
/**
* The constructor.
*/
- ai_interface(int side, bool master) : ai_readwrite_context(side,master)
{
- add_ref(); //this class shouldn't be reference counted.
+ ai_interface(unsigned int side, bool master) : side_context(side),
master_(master) {
}
virtual ~ai_interface() {}
@@ -46,9 +63,18 @@
virtual void new_turn() {
}
-protected:
- virtual void get_inputs(std::vector<game_logic::formula_input>* inputs)
const;
- virtual variant get_value(const std::string& key) const;
+ /** get the 'master' flag of the AI. 'master' AI is the top-level-AI. */
+ bool get_master() const { return master_;}
+
+ /** Evaluate */
+ virtual std::string evaluate(const std::string& /*str*/)
+ { return "evaluate command not implemented by this AI";
}
+
+ /** Describe self*/
+ virtual std::string describe_self() const;
+
+private:
+ bool master_;
};
#endif
Modified: trunk/src/ai/ai_manager.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai_manager.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai_manager.hpp (original)
+++ trunk/src/ai/ai_manager.hpp Sat May 2 03:04:19 2009
@@ -26,6 +26,7 @@
#include "../global.hpp"
#include "ai_interface.hpp"
+#include "game_info.hpp"
#include <map>
#include <stack>
#include <vector>
Modified: trunk/src/ai/contexts.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/contexts.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/contexts.cpp (original)
+++ trunk/src/ai/contexts.cpp Sat May 2 03:04:19 2009
@@ -21,7 +21,12 @@
#include "contexts.hpp"
#include "ai_actions.hpp"
#include "ai_manager.hpp"
+#include "../callable_objects.hpp"
#include "../dialogs.hpp"
+#include "../formula.hpp"
+#include "../formula_callable.hpp"
+#include "../formula_function.hpp"
+#include "../formula_fwd.hpp"
#include "../game_end_exceptions.hpp"
#include "../game_events.hpp"
#include "../game_preferences.hpp"
@@ -40,10 +45,6 @@
// =======================================================================
//
// =======================================================================
-std::string ai_readonly_context::describe_self() const
-{
- return "? [ai]";
-}
void ai_readonly_context::raise_user_interact() const
@@ -539,3 +540,17 @@
check_victory(get_info().state,get_info().units,get_info().teams,
get_info().disp);
raise_enemy_attacked();
}
+
+variant ai_readonly_context::get_value(const std::string& key) const
+{
+ if(key == "map") {
+ return variant(new gamemap_callable(get_info().map));
+ }
+ return variant();
+}
+
+void ai_readonly_context::get_inputs(std::vector<game_logic::formula_input>*
inputs) const
+{
+ using game_logic::FORMULA_READ_ONLY;
+ inputs->push_back(game_logic::formula_input("map", FORMULA_READ_ONLY));
+}
Modified: trunk/src/ai/contexts.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/contexts.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/contexts.hpp (original)
+++ trunk/src/ai/contexts.hpp Sat May 2 03:04:19 2009
@@ -24,10 +24,11 @@
class game_display;
class gamemap;
-#include "game_display.hpp"
+#include "ai_interface.hpp"
#include "game_info.hpp"
+#include "../game_display.hpp"
+#include "../gamestatus.hpp"
#include "../pathfind.hpp"
-#include "../gamestatus.hpp"
#include "../playturn.hpp"
class ai_attack_result;
@@ -35,7 +36,7 @@
class ai_recruit_result;
class ai_stopunit_result;
-class ai_readonly_context {
+class ai_readonly_context: public game_logic::formula_callable, public
ai_interface {
public:
/** A convenient typedef for the often used 'location' object. */
typedef map_location location;
@@ -46,19 +47,11 @@
/** The standard way in which a map of possible movement routes to
location is recorded*/
typedef std::map<location,paths> moves_map;
- /** get the 'master' flag of the AI. 'master' AI is the top-level-AI. */
- bool get_master() const { return master_;}
-
- /** get the 1-based side number which is controlled by this AI */
- unsigned int get_side() const { return side_;}
-
- /** Set the side */
- virtual void set_side(unsigned int side) { side_ = side; }
-
/**
* The constructor.
*/
- ai_readonly_context(unsigned int side, bool master) : side_(side),
master_(master){
+ ai_readonly_context(unsigned int side, bool master) :
ai_interface(side,master) {
+ add_ref(); //this class shouldn't be reference counted.
}
virtual ~ai_readonly_context() {}
@@ -71,8 +64,6 @@
/** Display a debug message as a chat message. */
void log_message(const std::string& msg);
- /** Describe self*/
- virtual std::string describe_self() const;
/**
* Check if it is possible to attack enemy defender using our unit
attacker from attackers current location,
@@ -176,9 +167,10 @@
*/
void raise_user_interact() const;
-private:
- unsigned int side_;
- bool master_;
+ virtual void get_inputs(std::vector<game_logic::formula_input>* inputs)
const;
+
+ virtual variant get_value(const std::string& key) const;
+
};
class ai_readwrite_context : public ai_readonly_context {
@@ -277,9 +269,6 @@
*/
map_location move_unit_partial(map_location from, map_location to,
std::map<map_location,paths>& possible_moves);
- /** Evaluate */
- virtual std::string evaluate(const std::string& /*str*/)
- { return "evaluate command not implemented by this AI";
}
/**
* Recruit a unit. It will recruit the unit with the given name,
Modified: trunk/src/ai/formula_ai.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/formula_ai.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/formula_ai.cpp (original)
+++ trunk/src/ai/formula_ai.cpp Sat May 2 03:04:19 2009
@@ -2492,7 +2492,7 @@
return villages_from_set(get_info().map.villages(),
¤t_team().villages());
}
- return ai_interface::get_value(key);
+ return ai_readonly_context::get_value(key);
}
void formula_ai::get_inputs(std::vector<formula_input>* inputs) const
@@ -2522,7 +2522,7 @@
inputs->push_back(game_logic::formula_input("villages_of_side",
FORMULA_READ_ONLY));
inputs->push_back(game_logic::formula_input("enemy_and_unowned_villages",
FORMULA_READ_ONLY));
- ai_interface::get_inputs(inputs);
+ ai_readonly_context::get_inputs(inputs);
}
variant formula_ai::get_keeps() const
Modified: trunk/src/ai/formula_ai.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/formula_ai.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/formula_ai.hpp (original)
+++ trunk/src/ai/formula_ai.hpp Sat May 2 03:04:19 2009
@@ -22,7 +22,6 @@
#define AI_FORMULA_AI_HPP_INCLUDED
#include "ai.hpp"
-#include "ai_interface.hpp"
#include "../callable_objects.hpp"
#include "../formula.hpp"
#include "../formula_fwd.hpp"
Modified: trunk/src/ai/game_info.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/game_info.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/game_info.cpp (original)
+++ trunk/src/ai/game_info.cpp Sat May 2 03:04:19 2009
@@ -22,4 +22,3 @@
// =======================================================================
//
// =======================================================================
-
Modified: trunk/src/ai/testing.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/testing.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/testing.cpp (original)
+++ trunk/src/ai/testing.cpp Sat May 2 03:04:19 2009
@@ -16,7 +16,6 @@
* Gather statistics important for AI testing and output them
* @file ai/testing.cpp
*/
-#include "ai_interface.hpp"
#include "ai_manager.hpp"
#include "testing.hpp"
#include "../log.hpp"
Modified: trunk/src/game_events.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game_events.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/game_events.cpp (original)
+++ trunk/src/game_events.cpp Sat May 2 03:04:19 2009
@@ -24,6 +24,7 @@
#include "dialogs.hpp"
#include "foreach.hpp"
#include "game_end_exceptions.hpp"
+#include "game_display.hpp"
#include "game_events.hpp"
#include "game_preferences.hpp"
#include "gettext.hpp"
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits