The Battle for Wesnoth 1.21.0-dev
 
Loading...
Searching...
No Matches
rca.hpp
Go to the documentation of this file.
1/*
2 Copyright (C) 2009 - 2025
3 by Yurii Chernyi <terraninfo@terraninfo.net>
4 Part of the Battle for Wesnoth Project https://www.wesnoth.org/
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY.
12
13 See the COPYING file for more details.
14*/
15
16/**
17 * @file
18 * candidate action framework
19 */
20
21#pragma once
22
25#include "units/filter.hpp"
26
27//============================================================================
28namespace ai {
29
30class candidate_action : public virtual rca_context_proxy, public component {
31public:
32 //this is a score guaranteed to be <=0, thus candidate action with this score will not be selected for execution
33 static const double BAD_SCORE;
34
35 //this is a score guaranteed to be very high, higher than any 'normal' candidate action score
36 static const double HIGH_SCORE;
37
38 candidate_action( rca_context &context, const config &cfg );
39
40 /**
41 * Destructor
42 */
43 virtual ~candidate_action();
44
45 /**
46 * Evaluate the candidate action, resetting the internal state of the action
47 * @return the score
48 * @retval >0 if the action is good
49 * @retval <=0 if the action is not good
50 */
51 virtual double evaluate() = 0;
52
53 /**
54 * Execute the candidate action
55 */
56 virtual void execute() = 0;
57
58 /**
59 * Is this candidate action enabled ?
60 */
61 bool is_enabled() const;
62
63 /**
64 * Enable the candidate action
65 */
66 void enable();
67
68 /**
69 * Disable the candidate action
70 */
71 void disable();
72
73 /**
74 * Get the usual score of the candidate action without re-evaluation
75 */
76 double get_score() const;
77
78 /**
79 * Get the upper bound of the score of the candidate action without re-evaluation
80 */
81 double get_max_score() const;
82
83 /**
84 * Get the unit filter for allowed units for this candidate action
85 */
86 std::shared_ptr<unit_filter> get_filter_own() const;
87
88 /**
89 * Flag indicating whether unit may be used by this candidate action
90 */
91 bool is_allowed_unit(const unit& u) const;
92
93 /**
94 * Get the name of the candidate action (useful for debug purposes)
95 */
96 virtual std::string get_name() const
97 { return name_; }
98
99 /**
100 * Get the type of the candidate action (useful for debug purposes)
101 */
102 const std::string& get_type() const;
103
104 virtual std::string get_id() const
105 { return id_; }
106
107 virtual std::string get_engine() const
108 { return engine_; }
109
110 int get_recursion_count() const;
111
112 /**
113 * serialize
114 */
115 virtual config to_config() const;
116
117 virtual void set_to_be_removed();
118
119 virtual bool to_be_removed();
120
121private:
122
124
126
127 std::string engine_;
128
129 double score_;
130
132
133 std::shared_ptr<unit_filter> filter_own_;
134
135 std::string id_;
136
137 std::string name_;
138
139 std::string type_;
140
142
143};
144
145typedef std::shared_ptr<candidate_action> candidate_action_ptr;
146
147
149 bool is_duplicate(const std::string &name);
150public:
151 typedef std::shared_ptr< candidate_action_factory > factory_ptr;
152 typedef std::map<std::string, factory_ptr> factory_map;
153 typedef std::pair<const std::string, factory_ptr> factory_map_pair;
154
156 static factory_map *candidate_action_factories;
157 if (candidate_action_factories==nullptr) {
158 candidate_action_factories = new factory_map;
159 }
160 return *candidate_action_factories;
161 }
162
164
165 candidate_action_factory( const std::string &name )
166 {
167 if (is_duplicate(name)) {
168 return;
169 }
170 factory_ptr ptr_to_this(this);
171 get_list().emplace(name,ptr_to_this);
172 }
173
175};
176
177template<class CANDIDATE_ACTION>
179public:
180 register_candidate_action_factory( const std::string &name )
182 {
183 }
184
186 return std::make_shared<CANDIDATE_ACTION>(ai, cfg);
187 }
188};
189
190//============================================================================
191
192std::ostream &operator<<(std::ostream &s, const ai::candidate_action& ca);
193
194} //end of namespace ai
std::map< std::string, factory_ptr > factory_map
Definition rca.hpp:152
virtual candidate_action_ptr get_new_instance(rca_context &context, const config &cfg)=0
std::pair< const std::string, factory_ptr > factory_map_pair
Definition rca.hpp:153
bool is_duplicate(const std::string &name)
Definition rca.cpp:128
candidate_action_factory(const std::string &name)
Definition rca.hpp:165
virtual ~candidate_action_factory()
Definition rca.hpp:174
static factory_map & get_list()
Definition rca.hpp:155
std::shared_ptr< candidate_action_factory > factory_ptr
Definition rca.hpp:151
void enable()
Enable the candidate action.
Definition rca.cpp:58
std::shared_ptr< unit_filter > filter_own_
Definition rca.hpp:133
virtual void set_to_be_removed()
Definition rca.cpp:117
std::string name_
Definition rca.hpp:137
void disable()
Disable the candidate action.
Definition rca.cpp:68
virtual std::string get_id() const
Definition rca.hpp:104
virtual ~candidate_action()
Destructor.
Definition rca.cpp:49
virtual bool to_be_removed()
Definition rca.cpp:122
static const double HIGH_SCORE
Definition rca.hpp:36
virtual std::string get_engine() const
Definition rca.hpp:107
static const double BAD_SCORE
Definition rca.hpp:33
bool is_enabled() const
Is this candidate action enabled ?
Definition rca.cpp:53
int get_recursion_count() const
Get the value of the recursion counter.
Definition rca.cpp:63
std::string type_
Definition rca.hpp:139
virtual std::string get_name() const
Get the name of the candidate action (useful for debug purposes)
Definition rca.hpp:96
recursion_counter recursion_counter_
Definition rca.hpp:123
const std::string & get_type() const
Get the type of the candidate action (useful for debug purposes)
Definition rca.cpp:96
bool is_allowed_unit(const unit &u) const
Flag indicating whether unit may be used by this candidate action.
Definition rca.cpp:88
std::string engine_
Definition rca.hpp:127
virtual double evaluate()=0
Evaluate the candidate action, resetting the internal state of the action.
virtual void execute()=0
Execute the candidate action.
double get_max_score() const
Get the upper bound of the score of the candidate action without re-evaluation.
Definition rca.cpp:78
virtual config to_config() const
serialize
Definition rca.cpp:101
double get_score() const
Get the usual score of the candidate action without re-evaluation.
Definition rca.cpp:73
std::shared_ptr< unit_filter > get_filter_own() const
Get the unit filter for allowed units for this candidate action.
Definition rca.cpp:83
std::string id_
Definition rca.hpp:135
register_candidate_action_factory(const std::string &name)
Definition rca.hpp:180
virtual candidate_action_ptr get_new_instance(rca_context &ai, const config &cfg)
Definition rca.hpp:185
A config object defines a single node in a WML file, with access to child nodes.
Definition config.hpp:157
This class represents a single unit of a specific type.
Definition unit.hpp:39
A component of the AI framework.
Composite AI contexts.
const config * cfg
A small explanation about what's going on here: Each action has access to two game_info objects First...
Definition actions.cpp:59
std::shared_ptr< candidate_action > candidate_action_ptr
Definition rca.hpp:145
std::ostream & operator<<(std::ostream &s, const ai::candidate_action &ca)
Definition rca.cpp:139
static map_location::direction s