TazGraph Project v0.1.0
Loading...
Searching...
No Matches
TransformComponent.h
1#pragma once
2
3#include "../../../Components.h"
4
5class TransformComponent : public Component //transform as in graphics, we have rotation and scale
6{
7public:
8 glm::vec3 velocity = glm::vec3(0);
9 glm::vec3 rotation = { 0.0f,0.0f,0.0f };
10 glm::vec3 position = glm::vec3(0);
11 glm::vec3 size = glm::vec3(0);
12
13 glm::vec3 last_position = glm::vec3(0);
14 glm::vec3 last_size = glm::vec3(0);
15 glm::vec3 last_velocity = glm::vec3(0);
16
17
18 glm::vec3 bodyCenter = { 0.0f,0.0f,0.0f };
19
20 float scale = 1;
21
22 int speed = 1;
23
25 {
26 }
27
28 TransformComponent(float sc)
29 {
30 scale = sc;
31 }
32
33 TransformComponent(glm::vec2 m_position)
34 {
35 position.x = m_position.x;
36 position.y = m_position.y;
37 bodyCenter = position + (size / 2.0f);
38 }
39
40 TransformComponent(glm::vec3 m_position)
41 {
42 position = m_position;
43 bodyCenter = position + (size / 2.0f);
44 }
45
46 TransformComponent(glm::vec2 m_position, layer layer, glm::vec2 m_size, float sc) : TransformComponent(m_position) {
47 position = { m_position.x, m_position.y, getLayerDepth(layer) };
48 size = { m_size.x, m_size.y, 0.0f };
49 scale = sc;
50 bodyCenter = position + (size / 2.0f);
51 }
52
53 TransformComponent(glm::vec2 m_position, layer layer, glm::vec2 size, float sc, int sp) : TransformComponent(m_position, layer, size, sc)
54 {
55 speed = sp;
56 }
57
58 TransformComponent(glm::vec2 m_position, layer layer , glm::vec3 m_size, float sc) : TransformComponent(m_position){
59 size = m_size;
60 scale = sc;
61 }
62
63 TransformComponent(glm::vec2 m_position, layer layer, glm::vec3 size, float sc, int sp) : TransformComponent(m_position, layer, size, sc)
64 {
65 speed = sp;
66 }
67
68 TransformComponent(glm::vec3 m_position, glm::vec3 m_size, float sc) : TransformComponent(m_position) {
69 size = m_size;
70 scale = sc;
71 }
72
73 void init() override
74 {
75 }
76 void update(float deltaTime) override
77 {
78
79 if (entity->getParentEntity()
80 && (dynamic_cast<NodeEntity*>(entity->getParentEntity())
81 || dynamic_cast<EmptyEntity*>(entity->getParentEntity())))
82 {
83 Entity* parent = entity->getParentEntity();
84 TransformComponent* parentTR = &parent->GetComponent<TransformComponent>();
85 if (
86 parentTR->position == parentTR->last_position
87 && parentTR->size == parentTR->last_size
88 && parentTR->velocity == parentTR->last_velocity
89 ) {
90 return;
91 }
92
93 bodyCenter = parentTR->getCenterTransform() + position;
94
95 }
96 else {
97 bodyCenter = position + (size / 2.0f);
98 }
99
100 if (position == last_position && size == last_size && velocity == last_velocity) {
101 return;
102 }
103
104 entity->cellUpdate();
105
106 last_position = position;
107 last_size = size;
108 last_velocity = velocity;
109
110 position.x += velocity.x * speed * deltaTime;
111 position.y += velocity.y * speed * deltaTime;
112
113 velocity *= 0.98f;
114
115
116 //todo dont update the children on every iteration
117 // todo do this for component when needed
118
119 }
120
121 glm::vec3 getCenterTransform()
122 {
123 return bodyCenter;
124 }
125
126 glm::vec3 getSizeCenter() {
127 return glm::vec3(size.x * scale / 2, size.y * scale / 2, size.z * scale / 2);
128 }
129
130 glm::vec3 getPosition() {
131 return position;
132 }
133
134 void setPosition_X(float newPosition_X) {
135 position.x = newPosition_X;
136 }
137 void setPosition_Y(float newPosition_Y) {
138 position.y = newPosition_Y;
139 }
140
141 glm::vec3 getVelocity() {
142 return velocity;
143 }
144
145 void setVelocity_X(float newVelocity_X) {
146 velocity.x = newVelocity_X;
147 }
148 void setVelocity_Y(float newVelocity_Y) {
149 velocity.y = newVelocity_Y;
150 }
151
152 void setRotation(glm::vec3 m_rotation) {
153 rotation = m_rotation;
154 }
155
156 std::string GetComponentName() override {
157 return "TransformComponent";
158 }
159
160 void showGUI() override {
161 ImGui::Separator();
162
163 // Position Controls
164 ImGui::Text("Position:");
165 ImGui::SliderFloat3("##position", &position.x, -1000.0f, 1000.0f);
166
167 // Size Controls
168 ImGui::Text("Size:");
169 ImGui::SliderFloat3("##size", &size.x, 1.0f, 100.0f);
170
171 // Rotation Controls
172 ImGui::Text("Rotation:");
173 ImGui::SliderFloat3("##rotation", glm::value_ptr(rotation), -180.0f, 180.0f);
174
175 ImGui::Text("Scale:");
176 ImGui::SliderFloat("##scale", &scale, 0.1f, 10.0f);
177
178 // Speed Control
179 ImGui::Text("Speed:");
180 ImGui::InputInt("##speed", &speed);
181 };
182};
Definition GECS.h:125
Definition GECSEntity.h:7
Definition GECS.h:152
Definition GECSEntity.h:43
Definition TransformComponent.h:6