#pragma once #include #include "IDrawable.h" enum Transformation { Rotation, Translation, Scaling }; class ADrawable : IDrawable { protected: std::vector> _transformations; Model _model; void effectTransformations() { for (auto pair : _transformations) { switch (pair.second) { case(Rotation): _model.glRotate(pair.first.w, pair.first.x, pair.first.y, pair.first.z); break; case(Translation): _model.glTranslate(pair.first.x, pair.first.y, pair.first.z); break; case(Scaling): _model.glScale(pair.first.x, pair.first.y, pair.first.z); break; } } } public: virtual void draw(ShaderProgram *shader, glm::mat4x4 pv) = 0; virtual DrawableType getType() = 0; void addRotation(glm::vec4 vec) override { _transformations.emplace_back(vec, Rotation); } void addTranslation(glm::vec4 vec) override { _transformations.emplace_back(vec, Translation); } void addScaling(glm::vec4 vec) override { _transformations.emplace_back(vec, Scaling); } };