CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
RenderingSystem.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
10#include "Forward.hpp"
11
13
16
23
25
26namespace CeresEngine {
27
28 // clang-format off
31 Light,
32 Camera,
36 >;
37 // clang-format on
38
40 class CE_SCRIPT_EXPORT() RenderingSystem final : public System<RenderingSystem, RenderingSystemEntitySet> {
41 private:
44
47
50
53 template<typename Entity, typename RendererObject> using EntityMap = HashMap<Entity, RendererObject*, std::hash<Entity>>;
54
57
60
63
66
69
70 public:
72 explicit RenderingSystem(Renderer& renderer);
73
76
79
80 public:
82 void attached(EntityManager& entityManager, SystemManager& systemManager) override;
83
85 void detached(EntityManager& entityManager, SystemManager& systemManager) override;
86
88 void update(double time) override;
89
91 [[nodiscard]] SystemOrder getOrder() const noexcept final { return 100; }
92
93 public:
95 [[nodiscard]] Renderer& getRenderer() const noexcept { return mRenderer; }
96
98 [[nodiscard]] Scene* getScene() const noexcept { return mScene; }
99
101 [[nodiscard]] RendererScene* getRendererScene() const noexcept { return mRendererScene; }
102
103 private:
104#define CE_RENDERING_SYSTEM_ENTITY_SYNC(T) \
105 void didAdd(const T& entity) noexcept final; \
106 void didRemove(const T& entity) noexcept final; \
107 void didChange(const T& entity, const EntityChangeSet& changeSet) noexcept final;
113#undef CE_RENDERING_SYSTEM_ENTITY_SYNC
114 };
115
116} // namespace CeresEngine
#define CE_SCRIPT_EXPORT(...)
The CE_SCRIPT_EXPORT macro marks a class or method as exportable and available in scripting environme...
Definition Macros.hpp:247
#define CE_RENDERING_SYSTEM_ENTITY_SYNC(T)
Definition RenderingSystem.hpp:104
Definition Camera.hpp:247
Definition EntityManager.hpp:49
The Environment object is a mixin entity from a Scene that holds the environment to be rendered on th...
Definition Environment.hpp:58
A scene light.
Definition Light.hpp:275
Definition Renderable.hpp:109
The CeresEngine renderer.
Definition Renderer.hpp:35
A class that represents a scene inside the renderer.
Definition RendererScene.hpp:34
A system that connects the rendering system to the CeresEngine renderer.
Definition RenderingSystem.hpp:40
RendererScene * mRendererScene
The renderer scene, created from the regular scene.
Definition RenderingSystem.hpp:49
Scene * getScene() const noexcept
The scene that owns the rendering system.
Definition RenderingSystem.hpp:98
Scene * mScene
The scene that owns the rendering system.
Definition RenderingSystem.hpp:46
RenderingSystem(Renderer &renderer)
Creates a new rendering system instance.
Renderer & getRenderer() const noexcept
The currently active renderer instance.
Definition RenderingSystem.hpp:95
EntityMap< Renderable, RendererRenderable > mRenderables
A list of renderables currently registered with the renderer.
Definition RenderingSystem.hpp:62
RenderingSystem & operator=(const RenderingSystem &)=delete
EntityMap< TerrainRenderable, RendererTerrain > mTerrains
A list of terrains currently registered with the renderer.
Definition RenderingSystem.hpp:65
~RenderingSystem() final
Destroys the rendering system instance.
EntityMap< Light, RendererLight > mLights
A list of lights currently registered with the renderer.
Definition RenderingSystem.hpp:59
Renderer & mRenderer
The currently active renderer instance.
Definition RenderingSystem.hpp:43
EntityMap< Environment, RendererEnvironment > mEnvironments
A list of environments currently registered with the renderer.
Definition RenderingSystem.hpp:68
RenderingSystem(const RenderingSystem &)=delete
RendererScene * getRendererScene() const noexcept
The renderer scene, created from the regular scene.
Definition RenderingSystem.hpp:101
EntityMap< Camera, RendererCamera > mCameras
A list of cameras currently registered with the renderer.
Definition RenderingSystem.hpp:56
HashMap< Entity, RendererObject *, std::hash< Entity > > EntityMap
A map that stores a renderer-specific object pointer indexed by an entity.
Definition RenderingSystem.hpp:53
A resource that stores scene information.
Definition Scene.hpp:83
A system is a special kind of service that is managed internally by the SystemManager.
Definition System.hpp:168
The system manager is responsible for keeping track and dispatching updates to all attached systems.
Definition SystemManager.hpp:22
The Terrain object.
Definition TerrainRenderable.hpp:62
Definition Application.hpp:19
int SystemOrder
A signed numeric type that represents the order in which a system should be updated by the SystemMana...
Definition System.hpp:31
std::unordered_map< Key, T, Hash, KeyEqual, ScopedAllocatorAdaptor< StdAllocator< Pair< const Key, T >, RawAllocator > > > HashMap
HashMap is an associative container that contains key-value pairs with unique keys.
Definition Map.hpp:33
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
Definition Entity.hpp:756