mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-05 15:30:00 +01:00
90 lines
1.7 KiB
C++
90 lines
1.7 KiB
C++
#ifndef UPDATECALLBACK_H
|
|
#define UPDATECALLBACK_H
|
|
|
|
#include <glm/glm.hpp>
|
|
|
|
class Node;
|
|
|
|
class UpdateCallback
|
|
{
|
|
|
|
public:
|
|
UpdateCallback();
|
|
virtual ~UpdateCallback() {}
|
|
|
|
virtual void update(Node *, float) = 0;
|
|
|
|
inline bool finished() const { return finished_; }
|
|
inline bool enabled() const { return enabled_; }
|
|
|
|
protected:
|
|
bool enabled_;
|
|
bool finished_;
|
|
};
|
|
|
|
class CopyCallback : public UpdateCallback
|
|
{
|
|
Node *target_;
|
|
|
|
public:
|
|
CopyCallback(Node *target);
|
|
void update(Node *n, float dt);
|
|
};
|
|
|
|
class MoveToCallback : public UpdateCallback
|
|
{
|
|
float duration_;
|
|
float progress_;
|
|
bool initialized_;
|
|
glm::vec3 startingpoint_;
|
|
glm::vec3 target_;
|
|
|
|
public:
|
|
MoveToCallback(glm::vec3 target, float duration = 1000.f);
|
|
void update(Node *n, float dt);
|
|
|
|
inline void reset() { initialized_ = false; }
|
|
};
|
|
|
|
class RotateToCallback : public UpdateCallback
|
|
{
|
|
float duration_;
|
|
float progress_;
|
|
bool initialized_;
|
|
float startingangle_;
|
|
float target_;
|
|
|
|
public:
|
|
RotateToCallback(float target, float speed = 1000.f);
|
|
void update(Node *n, float dt);
|
|
|
|
inline void reset() { initialized_ = false; }
|
|
};
|
|
|
|
class BounceScaleCallback : public UpdateCallback
|
|
{
|
|
float duration_;
|
|
float scale_;
|
|
float progress_;
|
|
bool initialized_;
|
|
glm::vec3 initial_scale_;
|
|
|
|
public:
|
|
BounceScaleCallback(float scale = 0.05f);
|
|
void update(Node *n, float dt);
|
|
};
|
|
|
|
class InfiniteGlowCallback : public UpdateCallback
|
|
{
|
|
float amplitude_;
|
|
float time_;
|
|
bool initialized_;
|
|
glm::vec3 initial_scale_;
|
|
|
|
public:
|
|
InfiniteGlowCallback(float amplitude = 0.5f);
|
|
void update(Node *n, float dt);
|
|
};
|
|
|
|
#endif // UPDATECALLBACK_H
|