mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-18 00:07:56 +00:00

User input was ignored during the AI's turn, and after the Python AI won a game, no more python games could be played.
76 lines
2.9 KiB
C++
76 lines
2.9 KiB
C++
#ifndef AI_PYTHON_HPP_INCLUDED
|
|
#define AI_PYTHON_HPP_INCLUDED
|
|
|
|
#include "ai_interface.hpp"
|
|
#include "menu_events.hpp"
|
|
#include <Python.h>
|
|
|
|
typedef struct {
|
|
PyObject_HEAD
|
|
const unit_type* unit_type_;
|
|
} wesnoth_unittype;
|
|
|
|
typedef struct {
|
|
PyObject_HEAD
|
|
const team* team_;
|
|
} wesnoth_team;
|
|
|
|
typedef struct {
|
|
PyObject_HEAD
|
|
const unit* unit_;
|
|
} wesnoth_unit;
|
|
|
|
class python_ai : public ai_interface
|
|
{
|
|
public:
|
|
python_ai(ai_interface::info& info);
|
|
virtual ~python_ai();
|
|
virtual void play_turn();
|
|
|
|
static PyObject* wrapper_unit_movement_cost(wesnoth_unit*, PyObject* args);
|
|
static PyObject* wrapper_unit_defense_modifier(wesnoth_unit*, PyObject* args);
|
|
static PyObject* wrapper_unittype_movement_cost(wesnoth_unittype*, PyObject* args);
|
|
static PyObject* wrapper_unittype_defense_modifier(wesnoth_unittype*, PyObject* args);
|
|
|
|
static PyObject* wrapper_get_units(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_log_message(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_get_location(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_get_map(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_get_teams(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_get_current_team(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_get_src_dst(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_get_dst_src(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_get_enemy_src_dst(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_get_enemy_dst_src(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_move_unit(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_attack_unit(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_get_adjacent_tiles(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_recruit_unit(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_get_gamestatus(PyObject* self, PyObject* args);
|
|
static PyObject* wrapper_set_variable(PyObject*, PyObject* args);
|
|
static PyObject* wrapper_get_variable(PyObject*, PyObject* args);
|
|
|
|
static PyObject* unittype_advances_to( wesnoth_unittype* type, PyObject* args );
|
|
static PyObject* wrapper_team_recruits( wesnoth_team* team, PyObject* args );
|
|
static PyObject* wrapper_unit_find_path( wesnoth_unit* unit, PyObject* args );
|
|
static PyObject* wrapper_unit_attack_statistics(wesnoth_unit* unit, PyObject* args);
|
|
|
|
static void set_error(const char *fmt, ...);
|
|
|
|
static bool is_unit_valid(const unit* unit, bool do_set_error = true);
|
|
std::vector<team>& get_teams() { return get_info().teams; }
|
|
static std::vector<std::string> get_available_scripts();
|
|
protected:
|
|
static bool init_;
|
|
static PyObject* python_error_;
|
|
end_level_exception exception;
|
|
ai_interface::move_map src_dst_;
|
|
ai_interface::move_map dst_src_;
|
|
std::map<location,paths> possible_moves_;
|
|
ai_interface::move_map enemy_src_dst_;
|
|
ai_interface::move_map enemy_dst_src_;
|
|
std::map<location,paths> enemy_possible_moves_;
|
|
};
|
|
|
|
#endif
|