Cogs.Core
OverlaySystem.cpp
1#include "OverlaySystem.h"
2
3#include "Context.h"
4
5#include "Systems/Core/SpriteRenderSystem.h"
6
7#include "Systems/Core/TransformSystem.h"
8
9#include <glm/gtx/matrix_query.hpp>
10
12{
13 auto sprites = context->spriteRenderSystem;
14
15 for (const auto & overlay : pool) {
16 if (!overlay.image) continue;
17
18 auto spriteRenderer = overlay.getComponent<SpriteRenderComponent>();
19
20 if (!spriteRenderer->isVisible()) continue;
21
22 auto permutation = SpriteRenderSystem::getPermutation(overlay.positionMode, overlay.sizeMode);
23
24 const bool transformImage = !glm::isIdentity(overlay.imageTransform, glm::epsilon<float>());
25
26 if (transformImage) {
27 static thread_local std::string p = permutation.to_string() + "ImageTransform";
28
29 permutation = p;
30 }
31
32 const auto transform = overlay.getComponent<TransformComponent>();
33 glm::vec3 position = glm::vec3(transform->coordinates) + transform->position;
34
35 auto batch = sprites->begin(DefaultSpriteMaterial, permutation, overlay.image, overlay.color);
36 batch->positionMode = overlay.positionMode;
37 sprites->addSprite(spriteRenderer, glm::vec3(position.x, position.y, -1), overlay.size * 0.5f, overlay.size, glm::vec4(0, 0, 1, 1));
38 batch->depth = position.z;
39 batch->blendMode = overlay.blendMode;
40
41 if (transformImage) {
42 batch->material->setMat4Property(batch->material->material->getMat4Key("imageTransform"), overlay.imageTransform);
43 }
44 }
45}
46
Context * context
Pointer to the Context instance the system lives in.
void update()
Updates the system state to that of the current frame.
ComponentPool< OverlayComponent > pool
Pool of components managed by the system.
A Context instance contains all the services, systems and runtime components needed to use Cogs.
Definition: Context.h:83
Defines a 4x4 transformation matrix for the entity and a global offset for root entities.
glm::vec3 position
Local position relative to the global coordinates, or the parent coordinate system if the parent fiel...