aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/crepe/api/Animator.cpp17
-rw-r--r--src/crepe/api/Animator.h6
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