Engine²
Open-source game engine written in C++.
Loading...
Searching...
No Matches
AUIContext.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <RmlUi/Core.h>
4#include <memory>
5#include <string>
6#include <type_traits>
7
8#include "RmlUi/Core/RenderInterface.h"
9#include "RmlUi/Core/SystemInterface.h"
10#include "core/Core.hpp"
12#include "utils/IRenderer.hpp"
13
14template <typename T>
15concept CSystemInterface = std::is_base_of_v<Rml::SystemInterface, T>;
16
17template <typename T>
18concept CRenderInterface = std::is_base_of_v<Rml::RenderInterface, T> && requires(Engine::Core &core) { T(core); };
19
20namespace Rmlui::Resource {
22 public:
23 template <CSystemInterface TSystemInterface, CRenderInterface TRenderInterface> void Init(Engine::Core &core)
24 {
25 if (_systemInterface != nullptr || _renderInterface != nullptr)
26 {
27 throw Exception::CreateRmlContextError("The Rmlui context has already been initialized");
28 }
29 _systemInterface = std::make_unique<TSystemInterface>();
30 _renderInterface = std::make_unique<TRenderInterface>(core);
31 _setup(core);
32 }
33
34 virtual ~AUIContext() = default;
35 AUIContext() = default;
36
37 AUIContext(const AUIContext &) = delete;
38 AUIContext &operator=(const AUIContext &) = delete;
39 AUIContext(AUIContext &&) noexcept = default;
40 AUIContext &operator=(AUIContext &&) noexcept = default;
41
42 virtual void UpdateMouseMoveEvent(Engine::Core &core) = 0;
43 virtual void Destroy(Engine::Core &core) = 0;
44 virtual void Update(Engine::Core &core) = 0;
45 virtual void Render(Engine::Core &core) = 0;
46
47 virtual void SetFont(const std::string &fontPath) = 0;
48 virtual void LoadDocument(const std::string &docPath) = 0;
49 [[nodiscard]] virtual const std::string &GetTitle() const = 0;
50
51 virtual bool ProcessKey(int key, int action, int mods) = 0;
52 virtual bool ProcessText(unsigned int codepoint) = 0;
53 virtual bool ProcessMouseMove(double x, double y, int mods) = 0;
54 virtual bool ProcessMouseButton(int button, int action, int mods) = 0;
55 virtual bool ProcessMouseWheel(double xoffset, double yoffset, int mods) = 0;
56
57 protected:
58 Rml::SystemInterface *GetSystemInterface() { return _systemInterface.get(); }
59 const Rml::SystemInterface *GetSystemInterface() const { return _systemInterface.get(); }
62
63 virtual void _setup(Engine::Core &core) = 0;
64
65 private:
66 std::unique_ptr<Rml::SystemInterface> _systemInterface;
67 std::unique_ptr<Rmlui::Utils::IRenderer> _renderInterface;
68};
69} // namespace Rmlui::Resource
The core is the place where all the data of the engine is stored. It contains the registry (entities)...
Definition Core.hpp:33
Definition CreateRmlContextError.hpp:7
virtual void Update(Engine::Core &core)=0
AUIContext & operator=(const AUIContext &)=delete
AUIContext(AUIContext &&) noexcept=default
virtual bool ProcessText(unsigned int codepoint)=0
virtual void Render(Engine::Core &core)=0
virtual ~AUIContext()=default
virtual void Destroy(Engine::Core &core)=0
virtual bool ProcessKey(int key, int action, int mods)=0
Rml::SystemInterface * GetSystemInterface()
Definition AUIContext.hpp:58
AUIContext(const AUIContext &)=delete
std::unique_ptr< Rml::SystemInterface > _systemInterface
Definition AUIContext.hpp:66
virtual bool ProcessMouseWheel(double xoffset, double yoffset, int mods)=0
virtual void _setup(Engine::Core &core)=0
const Rml::SystemInterface * GetSystemInterface() const
Definition AUIContext.hpp:59
virtual bool ProcessMouseButton(int button, int action, int mods)=0
void Init(Engine::Core &core)
Definition AUIContext.hpp:23
virtual void SetFont(const std::string &fontPath)=0
virtual void LoadDocument(const std::string &docPath)=0
Rmlui::Utils::IRenderer * GetRenderInterface()
Definition AUIContext.hpp:60
virtual const std::string & GetTitle() const =0
virtual bool ProcessMouseMove(double x, double y, int mods)=0
virtual void UpdateMouseMoveEvent(Engine::Core &core)=0
std::unique_ptr< Rmlui::Utils::IRenderer > _renderInterface
Definition AUIContext.hpp:67
const Rmlui::Utils::IRenderer * GetRenderInterface() const
Definition AUIContext.hpp:61
Definition IRenderer.hpp:7
Definition AUIContext.hpp:18
Definition AUIContext.hpp:15
Definition Core.hpp:17
Definition AUIContext.hpp:20