24 #include <flw/cmn/scene/Moveable.h> 26 #include <flw/cmn/Observable.h> 27 #include <flw/cmn/Easing.h> 28 #include <flw/cmn/Containers.h> 29 #include <flw/cmn/Aliases.h> 46 glm::vec3 translation = glm::vec3(0.0)
47 , glm::quat rotation = glm::quat(1.0, 0.0, 0.0, 0.0)
48 ,
unsigned int callbacks = 1);
60 void moveTo(glm::vec3 coordinates);
62 void moveToX(
float distance);
64 void moveToY(
float distance);
66 void moveToZ(
float distance);
68 void moveBy(glm::vec3 coordinates);
70 void moveByX(
float distance);
72 void moveByY(
float distance);
74 void moveByZ(
float distance);
76 void moveInDirection(glm::vec3 direction);
78 glm::vec3 getTranslation();
80 void scaleTo(
float scale);
82 void scaleTo(glm::vec3 scale);
84 void scaleToX(
float scale);
86 void scaleToY(
float scale);
88 void scaleToZ(
float scale);
92 void rotateTo(glm::quat rotation);
94 void rotateTo(
const glm::vec3 &axis,
float angle);
96 void rotateBy(
const glm::vec3 &axis,
float angle);
98 void rotateByX(
float angle);
100 void rotateByY(
float angle);
102 void rotateByZ(
float angle);
104 glm::quat getRotation();
106 void updateMatrixCache();
108 bool isRefresh()
const;
110 void setRefresh(
bool state);
113 glm::mat4 getParentMMC()
const;
115 glm::quat getParentRotation()
const;
117 void waitInTime(
float deltaTime);
119 void moveBy(
float deltaTime,
const glm::vec3& deltaMove, Callback<
float(
float)> ease = LinearInterpolation);
121 void moveTo(
float durationInSeconds,
const glm::vec3& endTranslation, Callback<
float(
float)> ease);
123 void scaleBy(
float deltaTime,
const glm::vec3& aScale, Callback<
float(
float)> ease = LinearInterpolation);
125 void scaleTo(
float deltaTime,
const glm::vec3& aScale, Callback<
float(
float)> ease = LinearInterpolation);
127 void rotateBy(
float deltaTime,
const float aAngle,
const glm::vec3& aAxis, Callback<
float(
float)> ease = LinearInterpolation);
129 void rotateTo(
float deltaTime,
const float aAngle,
const glm::vec3& aAxis, Callback<
float(
float)> ease = LinearInterpolation);
131 void loop(
int loops);
137 float stepInTime(
float delta);
139 void attachTimeCallback(
float deltaTime, Callback<
float(
float)> aAction);
141 template <
typename ...ARGS>
142 void attachTimeCallback(
float deltaTime, Callback<
float(
float, ARGS...)> aAction, ARGS&&... args) {
143 mTimeCallbacks.push_back([
this, deltaTime, aAction, args...](
float aDeltaTime) {
144 if (mCallbackTimePassed == 0.0f) {
145 aAction(0.0f, std::forward<ARGS...>(args...));
147 mCallbackTimePassed += aDeltaTime;
148 aAction(mCallbackTimePassed/deltaTime >= 1.0f ? 1.0f : mCallbackTimePassed/deltaTime, args...);
149 if (mCallbackTimePassed < deltaTime) {
152 float timeLeft = mCallbackTimePassed - deltaTime;
153 mCallbackTimePassed = 0;
159 glm::fvec3 mTranslation;
164 glm::quat mParentRotation;
168 glm::mat4 mParentMMC;
173 float mCallbackTimePassed;
176 unsigned int mCurrentCallbackIdx;
177 unsigned int mCallbackLoops;
178 vec<Callback<float(float)>> mTimeCallbacks;
181 glm::vec3 mTranslation;
188 bool isMoveablesRefresh(
const std::vector<M>& moveables) {
189 for (
auto &it : moveables) {
190 if (it->isRefresh()) {
198 void resetMoveablesRefresh(
const std::vector<M>& data) {
199 for (
auto &it : data) {
200 it->setRefresh(
false);
Base for every object which has a 3D position.
Definition: Moveable.h:43
Implementation of Observable pattern.
Definition: Observable.h:34