aboutsummaryrefslogtreecommitdiff
path: root/src/example/replay.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/example/replay.cpp')
-rw-r--r--src/example/replay.cpp45
1 files changed, 38 insertions, 7 deletions
diff --git a/src/example/replay.cpp b/src/example/replay.cpp
index 6b1ed46..a3c7fba 100644
--- a/src/example/replay.cpp
+++ b/src/example/replay.cpp
@@ -1,4 +1,4 @@
-#include "util/OptionalRef.h"
+#include <crepe/util/OptionalRef.h>
#include <crepe/api/BoxCollider.h>
#include <crepe/api/Camera.h>
#include <crepe/api/Color.h>
@@ -13,6 +13,7 @@
#include <crepe/api/Transform.h>
#include <crepe/manager/ComponentManager.h>
#include <crepe/manager/Mediator.h>
+#include <crepe/manager/ReplayManager.h>
using namespace crepe;
using namespace std;
@@ -22,27 +23,55 @@ class AnimationScript : public Script {
float t = 0;
void init() {
- Log::logf("AnimationScript init");
transform = &get_component<Transform>();
}
void update() {
- Log::logf("AnimationScript update");
- t += 0.01;
+ t += 0.05;
transform->position = { sin(t), cos(t) };
}
};
+class Timeline : public Script {
+ unsigned i = 0;
+ OptionalRef<ReplayManager> mgr;
+ recording_t recording;
+ void update() {
+ ReplayManager & mgr = this->mgr;
+ switch (i++) {
+ default: break;
+ case 10:
+ mgr.record_start();
+ Log::logf("start");
+ break;
+ case 60:
+ this->recording = mgr.record_end();
+ Log::logf("stop");
+ break;
+ case 70:
+ mgr.play(this->recording);
+ Log::logf("play");
+ break;
+ case 71:
+ mgr.release(this->recording);
+ Log::logf("end");
+ break;
+ case 72:
+ Log::logf("exit");
+ throw;
+ break;
+ };
+ }
+};
+
class TestScene : public Scene {
public:
using Scene::Scene;
void load_scene() {
- Log::logf("Initializing scene...");
Mediator & m = this->mediator;
ComponentManager & mgr = m.component_manager;
-
GameObject cam = mgr.new_object("cam");
cam.add_component<Camera>(ivec2{640,480},vec2{3,3}, Camera::Data{
.bg_color = Color::WHITE,
@@ -54,7 +83,9 @@ public:
.size = { 0.5, 0.5 },
});
square.add_component<BehaviorScript>().set_script<AnimationScript>();
- Log::logf("Done initializing scene");
+
+ GameObject scapegoat = mgr.new_object("");
+ scapegoat.add_component<BehaviorScript>().set_script<Timeline>();
}
string get_name() const { return "scene1"; }