3#include "Systems/ComponentSystem.h"
5#include "Components/Core/TransformComponent.h"
7#include <glm/gtc/quaternion.hpp>
8#include <glm/gtx/transform.hpp>
40 void handleOriginUpdate(
class Context* context);
43 void update(
class Context * context)
override;
47 auto offset = component.
parent ? glm::vec3(0, 0, 0) : glm::vec3(component.
coordinates - origin);
50 getLocalTransform(&component) = glm::translate(glm::mat4(1.f), offset) * component.
transform;
52 getLocalTransform(&component) = glm::translate(glm::mat4(1.f), offset + component.
position) *
53 glm::mat4_cast(component.
rotation) * glm::scale(component.
scale);
67 getData<TransformState>(&component).cached =
false;
69 updateLocalTransform(component);
70 updateLocalToWorldTransform(component,
true);
74 void setOrigin(
const glm::dvec3& newOrigin) { originUpdate = newOrigin; }
81 return getData<WorldTransform>(component);
84 glm::mat4 & getLocalTransform(
const TransformComponent * component)
86 return getData<LocalTransform>(component);
89 void setTransform(TransformComponent * component, glm::mat4 transformMatrix)
91 getLocalToWorld(component) = transformMatrix;
93 component->unsetFlag(ComponentModel::ComponentFlags::Changed);
96 void copyTransform(
const TransformComponent * source, TransformComponent * destination)
98 setTransform(destination, getLocalToWorld(source));
101 bool hasChanged(
const TransformComponent * component)
103 return getData<TransformState>(component).changed;
106 void updateLocalToWorldTransform(
const TransformComponent & component,
bool dirty =
false);
108 inline glm::vec3 engineFromWorldCoords(glm::dvec3 c) {
return glm::vec3(c - origin); }
109 inline glm::dvec3 worldFromEngineCoords(glm::vec3 c) {
return origin + glm::dvec3(c); }
112 glm::dvec3 origin = glm::dvec3(0.0);
113 glm::dvec3 originUpdate = glm::dvec3(0.0);
Component system template with multiple parallel structures per component stored in separate pools si...
A Context instance contains all the services, systems and runtime components needed to use Cogs.
Base allocator implementation.
Contains all Cogs related functionality.
ComponentIndex SizeType
Type used to track the size of pools.