aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/manager
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/manager')
-rw-r--r--src/crepe/manager/ReplayManager.cpp28
-rw-r--r--src/crepe/manager/ReplayManager.h33
2 files changed, 45 insertions, 16 deletions
diff --git a/src/crepe/manager/ReplayManager.cpp b/src/crepe/manager/ReplayManager.cpp
index 81ff114..ab8a5a0 100644
--- a/src/crepe/manager/ReplayManager.cpp
+++ b/src/crepe/manager/ReplayManager.cpp
@@ -37,3 +37,31 @@ void ReplayManager::release(recording_t handle) {
this->memory.erase(handle);
}
+void ReplayManager::frame_record() {
+ ComponentManager & components = this->mediator.component_manager;
+ Recording & recording = this->recording;
+
+ recording.frames.push_back(components.save());
+ recording.frame++;
+}
+
+bool ReplayManager::frame_step() {
+ ComponentManager & components = this->mediator.component_manager;
+ Recording & recording = this->recording;
+
+ ComponentManager::Snapshot & frame = recording.frames.at(recording.frame);
+
+ components.restore(frame);
+ recording.frame++;
+
+ if (recording.frame < recording.frames.size()) return false;
+ // end of recording
+ recording.frame = 0;
+ this->state = IDLE;
+ return true;
+}
+
+ReplayManager::State ReplayManager::get_state() const {
+ return this->state;
+}
+
diff --git a/src/crepe/manager/ReplayManager.h b/src/crepe/manager/ReplayManager.h
index 672d093..5794761 100644
--- a/src/crepe/manager/ReplayManager.h
+++ b/src/crepe/manager/ReplayManager.h
@@ -15,33 +15,34 @@ typedef size_t recording_t;
class ReplayManager : public Manager {
public:
ReplayManager(Mediator & mediator);
- friend class ReplaySystem;
-
-protected:
- void record_frame();
-
-private:
- struct Recording {
- size_t frame = 0;
- std::vector<ComponentManager::Snapshot> frames;
- };
+public:
+ void record_start();
+ recording_t record_end();
+ void play(recording_t handle);
+ void release(recording_t handle);
+
+public:
enum State {
IDLE,
RECORDING,
PLAYING,
};
+ State get_state() const;
+public:
+ void frame_record();
+ bool frame_step();
+
+private:
+ struct Recording {
+ size_t frame = 0;
+ std::vector<ComponentManager::Snapshot> frames;
+ };
State state = IDLE;
OptionalRef<Recording> recording;
recording_t id = -1;
-
std::unordered_map<recording_t, std::unique_ptr<Recording>> memory;
-public:
- void record_start();
- recording_t record_end();
- void play(recording_t handle);
- void release(recording_t handle);
};
} // namespace crepe