Milestone in SourceCallbacks and Keyboard callback trigger

Updated SourceCallback class to accept cloning, reversing, and visitors for saving./loading. New mechanism in Source to listen to key triggers for launching SourceCallbacks. Saving and loading in SessionVisitor and SessionCreator.
This commit is contained in:
Bruno Herbelin
2022-01-30 00:25:08 +01:00
parent 3605ae14b5
commit 8404e0f670
17 changed files with 660 additions and 79 deletions

View File

@@ -3,6 +3,7 @@
#include <glm/glm.hpp>
class Visitor;
class Source;
class SourceCallback
@@ -25,12 +26,15 @@ public:
SourceCallback();
virtual ~SourceCallback() {}
virtual void update(Source *, float) = 0;
virtual void update (Source *, float) = 0;
virtual SourceCallback *clone () const = 0;
virtual SourceCallback *reverse (Source *) const { return nullptr; }
virtual CallbackType type () { return CALLBACK_GENERIC; }
virtual void accept (Visitor& v);
inline bool finished() const { return finished_; }
inline bool active() const { return active_; }
inline void reset() { initialized_ = false; }
inline bool finished () const { return finished_; }
inline bool active () const { return active_; }
inline void reset () { initialized_ = false; }
protected:
bool active_;
@@ -38,24 +42,33 @@ protected:
bool initialized_;
};
class ResetGeometry : public SourceCallback
{
public:
ResetGeometry() : SourceCallback() {}
void update(Source *s, float) override;
ResetGeometry () : SourceCallback() {}
void update (Source *s, float) override;
SourceCallback *clone () const override;
};
class SetAlpha : public SourceCallback
class GotoAlpha : public SourceCallback
{
float alpha_;
glm::vec2 pos_;
glm::vec2 step_;
public:
SetAlpha(float alpha);
void update(Source *s, float) override;
GotoAlpha ();
GotoAlpha (float alpha);
float alpha () const { return alpha_;}
void setAlpha (float a) { alpha_ = a; }
void update (Source *s, float) override;
SourceCallback *clone () const override;
SourceCallback *reverse(Source *s) const override;
CallbackType type () override { return CALLBACK_ALPHA; }
void accept (Visitor& v) override;
};
class Loom : public SourceCallback
@@ -67,9 +80,18 @@ class Loom : public SourceCallback
float progress_;
public:
Loom(float da, float duration = 0.f);
void update(Source *s, float) override;
Loom ();
Loom (float d, float duration = 0.f);
float delta () const { return speed_;}
void setDelta (float d) { speed_ = d; }
float duration () const { return duration_;}
void setDuration (float d) { duration_ = d; }
void update (Source *s, float) override;
SourceCallback *clone() const override;
CallbackType type () override { return CALLBACK_LOOM; }
void accept (Visitor& v) override;
};
class SetLock : public SourceCallback
@@ -77,12 +99,14 @@ class SetLock : public SourceCallback
bool lock_;
public:
SetLock(bool on);
void update(Source *s, float) override;
SetLock (bool on);
void update (Source *s, float) override;
SourceCallback *clone() const override;
CallbackType type () override { return CALLBACK_LOCK; }
};
class SetDepth : public SourceCallback
class GotoDepth : public SourceCallback
{
float duration_;
float progress_;
@@ -90,9 +114,19 @@ class SetDepth : public SourceCallback
float target_;
public:
SetDepth(float depth, float duration = 0.f);
void update(Source *s, float dt) override;
GotoDepth ();
GotoDepth (float depth, float duration = 0.f);
float depth () const { return target_;}
void setDepth (float d) { target_ = d; }
float duration () const { return duration_;}
void setDuration (float d) { duration_ = d; }
void update (Source *s, float dt) override;
SourceCallback *clone () const override;
SourceCallback *reverse(Source *s) const override;
CallbackType type () override { return CALLBACK_DEPTH; }
void accept (Visitor& v) override;
};
class SetPlay : public SourceCallback
@@ -100,17 +134,21 @@ class SetPlay : public SourceCallback
bool play_;
public:
SetPlay(bool on);
void update(Source *s, float) override;
SetPlay (bool on);
bool play () const { return play_;}
void update (Source *s, float) override;
SourceCallback *clone() const override;
CallbackType type () override { return CALLBACK_PLAY; }
};
class RePlay : public SourceCallback
{
public:
RePlay();
void update(Source *s, float) override;
SourceCallback *clone() const override;
CallbackType type () override { return CALLBACK_REPLAY; }
};
@@ -122,9 +160,18 @@ class Grab : public SourceCallback
float progress_;
public:
Grab();
Grab(float dx, float dy, float duration = 0.f);
void update(Source *s, float) override;
glm::vec2 delta () { return speed_;}
void setDelta (glm::vec2 d) { speed_ = d; }
float duration () const { return duration_;}
void setDuration (float d) { duration_ = d; }
void update (Source *s, float) override;
SourceCallback *clone () const override;
CallbackType type () override { return CALLBACK_GRAB; }
void accept (Visitor& v) override;
};
class Resize : public SourceCallback
@@ -135,9 +182,18 @@ class Resize : public SourceCallback
float progress_;
public:
Resize();
Resize(float dx, float dy, float duration = 0.f);
void update(Source *s, float) override;
glm::vec2 delta () { return speed_;}
void setDelta (glm::vec2 d) { speed_ = d; }
float duration () const { return duration_;}
void setDuration (float d) { duration_ = d; }
void update (Source *s, float) override;
SourceCallback *clone () const override;
CallbackType type () override { return CALLBACK_RESIZE; }
void accept (Visitor& v) override;
};
class Turn : public SourceCallback
@@ -148,9 +204,18 @@ class Turn : public SourceCallback
float progress_;
public:
Turn();
Turn(float da, float duration = 0.f);
void update(Source *s, float) override;
float delta () { return speed_;}
void setDelta (float d) { speed_ = d; }
float duration () const { return duration_;}
void setDuration (float d) { duration_ = d; }
void update (Source *s, float) override;
SourceCallback *clone () const override;
CallbackType type () override { return CALLBACK_TURN; }
void accept (Visitor& v) override;
};