Dawn/src/dawn/display/Transform.hpp
2022-10-23 01:01:16 -07:00

69 lines
1.7 KiB
C++

// Copyright (c) 2022 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#pragma once
#include "dawnlibs.hpp"
#include "util/flag.hpp"
namespace Dawn {
class SceneItem;
class Transform : public std::enable_shared_from_this<Transform> {
private:
// Local (real) values
glm::vec3 localPosition;
glm::vec3 localScale;
glm::quat localRotation;
// Cached (non-real) values
glm::mat4 transformLocal;
glm::mat4 transformWorld;
// glm::vec3 position;
// glm::vec3 scale;
// glm::quat rotation;
// Heirarchy
Transform *parent = nullptr;
std::vector<Transform *> children;
// Hidden methods
void updateLocalValuesFromLocalTransform();
void updateLocalTransformFromLocalValues();
void updateWorldTransformFromLocalTransform();
void updateLocalTransformFromWorldTransform();
void updateChildrenTransforms();
public:
SceneItem &item;
Transform(SceneItem &item);
void lookAt(glm::vec3 position, glm::vec3 look);
void lookAt(glm::vec3 position, glm::vec3 look, glm::vec3 up);
glm::vec3 getLocalPosition();
void setLocalPosition(glm::vec3 position);
glm::vec3 getLocalScale();
void setLocalScale(glm::vec3 scale);
glm::quat getLocalRotation();
void setLocalRotation(glm::quat rotation);
glm::mat4 getLocalTransform();
void setLocalTransform(glm::mat4 transform);
glm::mat4 getWorldTransform();
void setWorldTransform(glm::mat4 transform);
void setParent(Transform *p);
Transform * getParent();
~Transform();
};
}