52 virtual void get_lua(lua_State* L)
const = 0;
69 virtual bool active()
const;
115 virtual const T&
get()
const 136 value_ = value_lua_->get();
143 return value_variant_;
147 if(
auto p = get_ptr()) {
150 }
else lua_pushnil(L);
167 value_ = value_lua_->get();
193 const std::string&
get_name()
const;
214 assert (c->get_id()== this->
get_name());
216 aspects_.emplace(this->
get_name(),c);
218 LOG_STREAM(
debug,
aspect::log()) <<
"typesafe_known_aspect [" << this->
get_name() <<
"] : while setting aspect, got null. this might be caused by invalid [aspect] WML";
224 std::shared_ptr< composite_aspect <T>>
c = std::dynamic_pointer_cast<
composite_aspect<T>>(where_);
226 assert (c->get_id()==this->
get_name());
230 LOG_STREAM(
debug,
aspect::log()) <<
"typesafe_known_aspect [" << this->
get_name() <<
"] : while adding facet to aspect, got null. this might be caused by target [aspect] being not composite";
255 _default[
"id"] =
"default_facet";
256 std::vector< aspect_ptr > default_aspects;
258 if (!default_aspects.empty()) {
261 c->parent_id_ = parent_id_;
267 std::function<void(typesafe_aspect_vector<T>&,
const config&)> factory_facets =
276 std::vector<aspect_ptr> facets_base;
281 c->parent_id_ = parent_id_;
291 this->value_ =
f->get_ptr();
297 this->value_ = default_->get_ptr();
309 cfg.
add_child(
"default",default_->to_config());
318 pos = facets_.size();
320 std::vector< aspect_ptr > facets;
326 c->parent_id_ = parent_id_;
328 facets_.insert(facets_.begin()+pos+j,
b);
336 bool b = !facets_.empty();
364 this->
name_ =
"standard_aspect";
366 LOG_STREAM(
debug,
aspect::log()) <<
"standard aspect has value: "<< std::endl << config_value_translator<T>::value_to_cfg(this->
get());
385 #ifdef USING_BOOST_VARIANT
386 :
public boost::static_visitor<std::string>
389 static std::string quote_string(
const std::string&
s);
393 std::string
operator()(
unsigned long long i)
const {
return std::to_string(i);}
394 std::string
operator()(
double i)
const {
return std::to_string(i);}
395 std::string
operator()(
const std::string& s)
const {
return quote_string(s);}
397 std::string
operator()(utils::monostate)
const {
return "nil";}
406 ,
handler_(), code_(), params_(cfg.child_or_empty(
"args"))
408 this->
name_ =
"lua_aspect";
411 code_ = cfg[
"code"].str();
430 handler_->handle(params_, empty_cfg,
true, this->value_lua_);
437 if (!params_.empty()) {
450 bool is_duplicate(
const std::string &name);
457 static factory_map *aspect_factories;
458 if (aspect_factories==
nullptr) {
459 aspect_factories =
new factory_map;
461 return *aspect_factories;
468 if (is_duplicate(name)) {
471 factory_ptr ptr_to_this(
this);
472 get_list().emplace(name,ptr_to_this);
478 template<
class ASPECT>
501 static factory_map *aspect_factories;
502 if (aspect_factories==
nullptr) {
503 aspect_factories =
new factory_map;
505 return *aspect_factories;
512 factory_ptr ptr_to_this(
this);
513 get_list().emplace(name,ptr_to_this);
519 template<
class ASPECT>
529 aspect_ptr a = std::make_shared<ASPECT>(context, cfg,
id, l_ctx);
static void parse_aspect_from_config(readonly_context &context, const config &cfg, const std::string &id, std::back_insert_iterator< std::vector< aspect_ptr >> b)
virtual void recalculate() const
static std::unique_ptr< class sdl_event_handler > handler_
std::string operator()(bool b) const
lua_aspect_factory(const std::string &name)
config & child(config_key_type key, int n=0)
Returns the nth child with the given key, or a reference to an invalid config if there is none...
bool invalidate_on_tod_change_
aspect_ptr get_new_instance(readonly_context &context, const config &cfg, const std::string &id)
std::string operator()(const std::string &s) const
std::string operator()(const t_string &s) const
virtual bool add_facet(int pos, const config &cfg)
virtual ~lua_aspect_factory()
std::map< std::string, factory_ptr > factory_map
virtual std::shared_ptr< wfl::variant > get_variant_ptr() const
static factory_map & get_list()
aspect_factory(const std::string &name)
bool has_attribute(config_key_type key) const
property_handler_map & property_handlers()
virtual void recalculate() const =0
typesafe_known_aspect(const std::string &name, typesafe_aspect_ptr< T > &where, aspect_map &aspects)
child_itors child_range(config_key_type key)
auto reversed_view(T &container)
void handle_generic_event(const std::string &)
virtual bool redeploy(const config &cfg, const std::string &id)
register_aspect_factory(const std::string &name)
virtual void add_facet(const std::string &id, const config &cfg) const override
std::shared_ptr< T > value_
#define LOG_STREAM(level, domain)
lua_aspect(readonly_context &context, const config &cfg, const std::string &id, std::shared_ptr< lua_ai_context > &l_ctx)
void get_lua(lua_State *L) const
Lua object(value) wrapper implementation.
virtual bool delete_all_facets()
virtual std::shared_ptr< T > get_ptr() const
std::shared_ptr< aspect > aspect_ptr
virtual std::string get_name() const
virtual void add_facet(const config &cfg)
virtual void get_lua(lua_State *L) const =0
std::shared_ptr< wfl::variant > value_variant_
A small explanation about what's going on here: Each action has access to two game_info objects First...
std::shared_ptr< typesafe_aspect< T > > typesafe_aspect_ptr
std::string operator()(double i) const
virtual config to_config() const
static lg::log_domain & log()
virtual std::string get_id() const
typesafe_aspect_ptr< T > & where_
virtual const wfl::variant & get_variant() const =0
typesafe_aspect(readonly_context &context, const config &cfg, const std::string &id)
virtual std::shared_ptr< wfl::variant > get_variant_ptr() const =0
virtual config to_config() const
virtual ~typesafe_aspect()
std::string operator()(int i) const
void create_facet(typesafe_aspect_vector< T > &facets, const config &cfg)
aspect(readonly_context &context, const config &cfg, const std::string &id)
bool invalidate_on_turn_start_
typesafe_aspect_ptr< T > default_
typesafe_aspect_vector< T > facets_
std::string id
Text to match against addon_info.tags()
static T cfg_to_value(const config &cfg)
std::shared_ptr< lua_object< T > > value_lua_
static map_location::DIRECTION s
virtual bool delete_all_facets()
std::string bool_string(const bool value)
Converts a bool value to 'true' or 'false'.
std::shared_ptr< lua_aspect_factory > factory_ptr
virtual bool active() const
config & add_child(config_key_type key)
std::shared_ptr< lua_ai_action_handler > handler_
std::pair< const std::string, factory_ptr > factory_map_pair
std::map< std::string, aspect_ptr > aspect_map
std::shared_ptr< aspect_factory > factory_ptr
virtual ~aspect_factory()
static void value_to_cfg(const T &value, config &cfg)
static factory_map & get_list()
Standard logging facilities (interface).
virtual std::string get_engine() const
game_lua_kernel * lua_kernel
register_lua_aspect_factory(const std::string &name)
static void register_facets_property(property_handler_map &property_handlers, const std::string &property, std::vector< std::shared_ptr< X >> &values, std::shared_ptr< X > &def, std::function< void(std::vector< std::shared_ptr< X >> &, const config &)> construction_factory)
std::pair< const std::string, factory_ptr > factory_map_pair
std::map< std::string, factory_ptr > factory_map
A config object defines a single node in a WML file, with access to child nodes.
const std::string & str() const
composite_aspect(readonly_context &context, const config &cfg, const std::string &id)
bool invalidate_on_gamestate_change_
standard_aspect(readonly_context &context, const config &cfg, const std::string &id)
std::string operator()(unsigned long long i) const
aspect_ptr get_new_instance(readonly_context &context, const config &cfg, const std::string &id, std::shared_ptr< lua_ai_context > &l_ctx)
virtual const wfl::variant & get_variant() const
std::string operator()(utils::monostate) const
std::vector< typesafe_aspect_ptr< T > > typesafe_aspect_vector