From 1ef80ecfdc1a70a6ebdd43fed82d0f9d305d63dc Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 8 Jan 2025 13:07:31 +0100 Subject: implement animator replay --- src/crepe/api/Animator.cpp | 17 ++++++++++++++++- src/crepe/api/Animator.h | 6 ++++++ 2 files changed, 22 insertions(+), 1 deletion(-) 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 Animator::save() const { + return unique_ptr(new Animator(*this)); +} + +void Animator::restore(const Component & snapshot) { + *this = static_cast(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 save() const; + Animator(const Animator &) = default; + virtual void restore(const Component & snapshot); + virtual Animator & operator=(const Animator &); }; } // namespace crepe -- cgit v1.2.3