summaryrefslogtreecommitdiff
path: root/engine-ocean/Game/Components/TransformComponent.cpp
diff options
context:
space:
mode:
authorjjesswan <jessica_wan@brown.edu>2024-04-22 21:56:26 -0400
committerjjesswan <jessica_wan@brown.edu>2024-04-22 21:56:26 -0400
commita556b45abf18f1bd509daaf63b66b7d55e9fd291 (patch)
treebc9b8a2d184c12aee236e7f9f276a34b84ca552d /engine-ocean/Game/Components/TransformComponent.cpp
parentcd7c76017a12bb548036571c1ff13e551369d06d (diff)
add engine version
Diffstat (limited to 'engine-ocean/Game/Components/TransformComponent.cpp')
-rw-r--r--engine-ocean/Game/Components/TransformComponent.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/engine-ocean/Game/Components/TransformComponent.cpp b/engine-ocean/Game/Components/TransformComponent.cpp
new file mode 100644
index 0000000..582b623
--- /dev/null
+++ b/engine-ocean/Game/Components/TransformComponent.cpp
@@ -0,0 +1,92 @@
+#include "transformcomponent.h"
+
+TransformComponent::TransformComponent(std::shared_ptr<ModelTransform> mt,
+ std::string entity_id,
+ std::map<std::string,
+ BlackboardData>& global_blackboard, bool isAI):
+ m_model_transform(mt),
+ m_global_blackboard(global_blackboard),
+ isAIObject(isAI)
+{
+ old_pos = mt->getPos();
+ estimated_final_pos = mt->getPos();
+ m_entity_id = entity_id;
+
+ // initialize blackboard data for entity
+ BlackboardData data;
+ m_global_blackboard.insert(std::pair<std::string, BlackboardData>(m_entity_id, data));
+ m_global_blackboard[m_entity_id].locationData.currPos = old_pos;
+}
+
+std::shared_ptr<ModelTransform> TransformComponent::getMT(){
+ return m_model_transform;
+}
+std::vector<std::shared_ptr<ModelTransform>> TransformComponent::getAllMT(){
+ return m_all_model_transforms;
+}
+
+bool TransformComponent::hasMultipleMT(){
+ return multipleMT;
+}
+
+void TransformComponent::translate(const glm::vec3 &delta){
+ m_model_transform->translate(delta);
+
+ // update old pos for collisions
+
+ old_pos = m_model_transform->getPos();
+
+ if (isAIObject){
+ m_global_blackboard[m_entity_id].locationData.currPos = old_pos;
+ }
+}
+
+void TransformComponent::setPos(const glm::vec3 &new_pos){
+ m_model_transform->setPos(new_pos);
+
+ // update old pos for collisions
+ old_pos = new_pos;
+
+ if (isAIObject){
+ m_global_blackboard[m_entity_id].locationData.currPos = old_pos;
+ }
+}
+
+glm::vec3 TransformComponent::getPos(){
+ return m_model_transform->getPos();
+}
+
+void TransformComponent::setScale(const glm::vec3 &scale){
+ m_model_transform->setScale(scale);
+}
+
+glm::vec3 TransformComponent::getScale(){
+ return m_model_transform->getScale();
+}
+
+float TransformComponent::getYRotationAngle(){
+ glm::mat4 rotMat = m_model_transform->getRotation();
+ float ry0 = rotMat[0][2];
+// float ry1 = rotMat[1][2];
+// float ry2 = rotMat[2][2];
+
+// float sign = 1.f;
+// if (ry1*ry2 < 0) sign = -1.f;
+
+// float angley = std::atan2(-ry0, sign*pow((pow(ry1,2) + pow(ry2,2)), .5));
+ float angley = -std::asin(ry0);
+ float angley2 = M_PI - angley;
+
+ //std::cout << "angle 1: " << angley << std::endl;
+ std::cout << "angle 2: " << angley2 << std::endl;
+
+ return angley;
+}
+
+void TransformComponent::setRotation(float angle, glm::vec3 axis){
+ m_model_transform->rotate(angle, axis);
+}
+
+
+
+