diff options
Diffstat (limited to 'src/example/replay.cpp')
-rw-r--r-- | src/example/replay.cpp | 45 |
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"; } |