MVSim
Lightweight simulator for 2.5D vehicles and robots
WorldElementBase.h
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2026 Jose Luis Blanco Claraco |
5  | Copyright (C) 2017 Borys Tymchenko (Odessa Polytechnic University) |
6  | Distributed under 3-clause BSD License |
7  | See COPYING |
8  +-------------------------------------------------------------------------+ */
9 
10 #pragma once
11 
12 #include <mvsim/ClassFactory.h>
13 #include <mvsim/Simulable.h>
14 #include <mvsim/VisualObject.h>
15 
16 namespace mvsim
17 {
27 class WorldElementBase : public VisualObject, public Simulable
28 {
29  public:
30  using Ptr = std::shared_ptr<WorldElementBase>;
31 
32  WorldElementBase(World* parent) : VisualObject(parent), Simulable(parent) {}
33  virtual ~WorldElementBase() {}
34 
35  WorldElementBase(const WorldElementBase&) = delete;
37  WorldElementBase& operator=(const WorldElementBase&) = delete;
38  WorldElementBase& operator=(WorldElementBase&&) = delete;
39 
45  static Ptr factory(
46  World* parent, const rapidxml::xml_node<char>* xml_node, const char* class_name = nullptr);
47 
48  virtual void loadConfigFrom(const rapidxml::xml_node<char>* root) = 0;
49 
50  virtual std::optional<std::any> queryProperty(
51  [[maybe_unused]] const std::string& propertyName,
52  [[maybe_unused]] const mrpt::math::TPoint3D& worldXYZ) const
53  {
54  return {};
55  }
56 
57  protected:
58 };
59 
60 // Class factory:
61 using TClassFactory_worldElements =
62  ClassFactory<WorldElementBase, World*, const rapidxml::xml_node<char>*>;
63 
64 extern TClassFactory_worldElements classFactory_worldElements;
65 
66 #define DECLARES_REGISTER_WORLD_ELEMENT(CLASS_NAME) \
67  DECLARES_REGISTER_CLASS2(CLASS_NAME, WorldElementBase, World*, const rapidxml::xml_node<char>*)
68 
69 #define REGISTER_WORLD_ELEMENT(TEXTUAL_NAME, CLASS_NAME) \
70  REGISTER_CLASS2( \
71  TClassFactory_worldElements, classFactory_worldElements, TEXTUAL_NAME, CLASS_NAME)
72 } // namespace mvsim
Definition: Simulable.h:40
Definition: VisualObject.h:36
Definition: WorldElementBase.h:28
static Ptr factory(World *parent, const rapidxml::xml_node< char > *xml_node, const char *class_name=nullptr)
Definition: World.h:132