69 lines
1.7 KiB
C++
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();
|
|
};
|
|
}
|