#ifndef TEXTURE_TRANSFORM_HPP
#define TEXTURE_TRANSFORM_HPP
#include "Constants.hpp"
#include <vector>
namespace wren {
class Material;
class TextureTransform {
public:
static TextureTransform *createTextureTransform() { return new TextureTransform(); }
static void deleteTextureTransform(TextureTransform *transform) { delete transform; }
void setCenter(float center_x, float center_y);
void setPosition(float position_x, float position_y);
void setRotation(float rotation);
void setScale(float scale_x, float scale_y);
const glm::vec2 center() const { return glm::vec2(mCenter); }
const glm::vec2 position() const { return glm::vec2(mPosition); }
float rotation() const { return mRotation; }
const glm::vec2 scale() const { return glm::vec2(mScale); }
const glm::mat4 &matrix() const; glm::vec2 applyToUvCoordinate(const glm::vec2 &coord) const { return glm::vec2(matrix() * glm::vec4(coord, 0.0, 1.0)); }
const bool isDirty() const { return mIsMatrixDirty; }
void addMaterialUser(Material *material);
void removeMaterialUser(Material *material);
private:
TextureTransform();
~TextureTransform();
void updateMatrix() const;
mutable bool mIsMatrixDirty;
mutable glm::mat4 mMatrix;
glm::vec3 mScale;
glm::vec3 mPosition;
glm::vec3 mCenter;
float mRotation;
std::vector<Material *> mMaterialsUsingThisInstance;
};
}
#endif