The Battle for Wesnoth  1.15.1+dev
component.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2009 - 2018 by Yurii Chernyi <terraninfo@terraninfo.net>
3  Part of the Battle for Wesnoth Project https://www.wesnoth.org/
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY.
11 
12  See the COPYING file for more details.
13 */
14 
15 /**
16  * @file
17  * A component of the AI framework
18  */
19 
20 #pragma once
21 
22 class config;
23 
24 #include <iostream>
25 #include <map>
26 #include <memory>
27 #include <string>
28 #include <vector>
29 
30 //============================================================================
31 namespace ai {
32 
33 struct path_element {
35  : property()
36  , id()
37  , position(0)
38  {
39  }
40 
41  std::string property;
42  std::string id;
43  int position;
44 };
45 
47 typedef std::shared_ptr<base_property_handler> property_handler_ptr;
48 typedef std::map<std::string,property_handler_ptr> property_handler_map;
49 
50 class component {
51 public:
53  : property_handlers_()
54  {
55  }
56 
57  virtual std::string get_id() const = 0;
58  virtual std::string get_name() const = 0;
59  virtual std::string get_engine() const = 0;
60  virtual ~component() {}
61  virtual component* get_child(const path_element &child);
62  virtual std::vector<component*> get_children(const std::string &type);
63  virtual std::vector<std::string> get_children_types();
64  virtual bool change_child(const path_element &child, const config &cfg);
65  virtual bool add_child(const path_element &child, const config &cfg);
66  virtual bool delete_child(const path_element &child);
67 
68  property_handler_map& property_handlers();
69 
70 private:
71  property_handler_map property_handlers_;
72 };
73 
75 public:
76  static bool add_component(component *root, const std::string &path, const config &cfg);
77  static bool change_component(component *root, const std::string &path, const config &cfg);
78  static bool delete_component(component *root, const std::string &path);
79  static std::string print_component_tree(component *root, const std::string &path);
80 
81  static component* get_component(component *root, const std::string &path);
82 };
83 
84 
85 } //end of namespace ai
86 
87 std::ostream &operator<<(std::ostream &o, const ai::path_element &e);
property_handler_map property_handlers_
Definition: component.hpp:71
std::ostream & operator<<(std::ostream &s, const ai::candidate_action &ca)
Definition: rca.cpp:123
A small explanation about what&#39;s going on here: Each action has access to two game_info objects First...
Definition: actions.cpp:58
std::string path
Definition: game_config.cpp:39
std::string property
Definition: component.hpp:41
std::string id
Definition: component.hpp:42
const config & get_child(const std::string &key)
Definition: general.cpp:215
std::map< std::string, property_handler_ptr > property_handler_map
Definition: component.hpp:48
#define e
std::shared_ptr< base_property_handler > property_handler_ptr
Definition: component.hpp:46
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:92
virtual ~component()
Definition: component.hpp:60
HOTKEY_COMMAND get_id(const std::string &command)
returns get_hotkey_command(command).id
static ai::engine_lua & get_engine(lua_State *L)
Definition: core.cpp:121