diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2025-01-08 13:07:31 +0100 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2025-01-08 13:07:31 +0100 |
commit | 1ef80ecfdc1a70a6ebdd43fed82d0f9d305d63dc (patch) | |
tree | 9f8618cfcff7556c7e3903f9208d8349d1f7fa44 /src/crepe | |
parent | c9c9702edc58ff8f40b13dc6b86b216421f79e9b (diff) |
implement animator replay
Diffstat (limited to 'src/crepe')
-rw-r--r-- | src/crepe/api/Animator.cpp | 17 | ||||
-rw-r--r-- | src/crepe/api/Animator.h | 6 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/crepe/api/Animator.cpp b/src/crepe/api/Animator.cpp index c558d86..f9a283e 100644 --- a/src/crepe/api/Animator.cpp +++ b/src/crepe/api/Animator.cpp @@ -1,4 +1,3 @@ - #include "util/dbg.h" #include "Animator.h" @@ -6,6 +5,7 @@ #include "Sprite.h" using namespace crepe; +using namespace std; Animator::Animator( game_object_id_t id, Sprite & spritesheet, const ivec2 & single_frame_size, @@ -57,3 +57,18 @@ void Animator::next_anim() { ctx.row = ++ctx.row % this->grid_size.x; this->spritesheet.mask.x = ctx.row * this->spritesheet.mask.w; } + +unique_ptr<Component> Animator::save() const { + return unique_ptr<Component>(new Animator(*this)); +} + +void Animator::restore(const Component & snapshot) { + *this = static_cast<const Animator &>(snapshot); +} + +Animator & Animator::operator=(const Animator & snapshot) { + this->data = snapshot.data; + this->elapsed_time = snapshot.elapsed_time; + this->frame = snapshot.frame; + return *this; +} diff --git a/src/crepe/api/Animator.h b/src/crepe/api/Animator.h index 95539d3..d1f49c4 100644 --- a/src/crepe/api/Animator.h +++ b/src/crepe/api/Animator.h @@ -108,6 +108,12 @@ private: //! Uses the spritesheet friend AnimatorSystem; + +protected: + virtual std::unique_ptr<Component> save() const; + Animator(const Animator &) = default; + virtual void restore(const Component & snapshot); + virtual Animator & operator=(const Animator &); }; } // namespace crepe |