Add possibility to capture, edit & replay camera-keyframes

This commit is contained in:
Joakim Kilby
2023-06-15 14:52:51 +02:00
parent a8e1e63397
commit 83f463ddd4
5 changed files with 27 additions and 0 deletions

View File

@@ -60,6 +60,7 @@ namespace interaction {
class KeyframeRecording;
class NavigationHandler;
class SessionRecording;
class KeyframeRecording;
} // namespace interaction
namespace properties { class PropertyOwner; }
namespace scripting {
@@ -97,6 +98,7 @@ inline interaction::KeybindingManager* keybindingManager;
inline interaction::KeyframeRecording* keyframeRecording;
inline interaction::NavigationHandler* navigationHandler;
inline interaction::SessionRecording* sessionRecording;
inline interaction::KeyframeRecording* keyframeRecording;
inline properties::PropertyOwner* rootPropertyOwner;
inline properties::PropertyOwner* screenSpaceRootPropertyOwner;
inline properties::PropertyOwner* userPropertyOwner;

View File

@@ -65,6 +65,8 @@ set(OPENSPACE_SOURCE
interaction/scriptcamerastates.cpp
interaction/sessionrecording.cpp
interaction/sessionrecording_lua.inl
interaction/keyframerecording.cpp
interaction/keyframerecording_lua.inl
interaction/websocketinputstate.cpp
interaction/websocketcamerastates.cpp
interaction/tasks/convertrecfileversiontask.cpp
@@ -256,6 +258,7 @@ set(OPENSPACE_HEADER
${PROJECT_SOURCE_DIR}/include/openspace/interaction/mousecamerastates.h
${PROJECT_SOURCE_DIR}/include/openspace/interaction/scriptcamerastates.h
${PROJECT_SOURCE_DIR}/include/openspace/interaction/sessionrecording.h
${PROJECT_SOURCE_DIR}/include/openspace/interaction/keyframerecording.h
${PROJECT_SOURCE_DIR}/include/openspace/interaction/sessionrecording.inl
${PROJECT_SOURCE_DIR}/include/openspace/interaction/websocketinputstate.h
${PROJECT_SOURCE_DIR}/include/openspace/interaction/websocketcamerastates.h

View File

@@ -34,6 +34,7 @@
#include <openspace/interaction/keybindingmanager.h>
#include <openspace/interaction/keyframerecording.h>
#include <openspace/interaction/sessionrecording.h>
#include <openspace/interaction/keyframerecording.h>
#include <openspace/mission/mission.h>
#include <openspace/mission/missionmanager.h>
#include <openspace/navigation/navigationhandler.h>
@@ -112,6 +113,7 @@ void registerCoreClasses(scripting::ScriptEngine& engine) {
engine.addLibrary(interaction::OrbitalNavigator::luaLibrary());
engine.addLibrary(interaction::PathNavigator::luaLibrary());
engine.addLibrary(interaction::SessionRecording::luaLibrary());
engine.addLibrary(interaction::KeyframeRecording::luaLibrary());
engine.addLibrary(scripting::ScriptScheduler::luaLibrary());
engine.addLibrary(scripting::generalSystemCapabilities());
engine.addLibrary(scripting::openglSystemCapabilities());

View File

@@ -39,6 +39,7 @@
#include <openspace/interaction/joystickinputstate.h>
#include <openspace/interaction/websocketinputstate.h>
#include <openspace/interaction/sessionrecording.h>
#include <openspace/interaction/keyframerecording.h>
#include <openspace/mission/missionmanager.h>
#include <openspace/navigation/navigationhandler.h>
#include <openspace/network/parallelpeer.h>
@@ -99,6 +100,7 @@ namespace {
sizeof(interaction::KeyframeRecording) +
sizeof(interaction::NavigationHandler) +
sizeof(interaction::SessionRecording) +
sizeof(interaction::KeyframeRecording) +
sizeof(properties::PropertyOwner) +
sizeof(properties::PropertyOwner) +
sizeof(properties::PropertyOwner) +
@@ -340,6 +342,14 @@ void create() {
sessionRecording = new interaction::SessionRecording(true);
#endif // WIN32
#ifdef WIN32
keyframeRecording = new (currentPos) interaction::KeyframeRecording;
ghoul_assert(keyframeRecording, "No keyframeRecording");
currentPos += sizeof(interaction::KeyframeRecording);
#else // ^^^ WIN32 / !WIN32 vvv
keyframeRecording = new interaction::KeyframeRecording(true);
#endif // WIN32
#ifdef WIN32
rootPropertyOwner = new (currentPos) properties::PropertyOwner({ "" });
ghoul_assert(rootPropertyOwner, "No rootPropertyOwner");
@@ -400,6 +410,7 @@ void initialize() {
rootPropertyOwner->addPropertySubOwner(global::keyframeRecording);
rootPropertyOwner->addPropertySubOwner(global::interactionMonitor);
rootPropertyOwner->addPropertySubOwner(global::sessionRecording);
rootPropertyOwner->addPropertySubOwner(global::keyframeRecording);
rootPropertyOwner->addPropertySubOwner(global::timeManager);
rootPropertyOwner->addPropertySubOwner(global::scriptScheduler);
@@ -463,6 +474,13 @@ void destroy() {
delete sessionRecording;
#endif // WIN32
LDEBUGC("Globals", "Destroying 'KeyframeRecording'");
#ifdef WIN32
keyframeRecording->~KeyframeRecording();
#else // ^^^ WIN32 / !WIN32 vvv
delete keyframeRecording;
#endif // WIN32
LDEBUGC("Globals", "Destroying 'NavigationHandler'");
#ifdef WIN32
navigationHandler->~NavigationHandler();

View File

@@ -42,6 +42,8 @@
#include <openspace/interaction/keybindingmanager.h>
#include <openspace/interaction/keyframerecording.h>
#include <openspace/interaction/sessionrecording.h>
#include <openspace/interaction/keyframerecording.h>
#include <openspace/json.h>
#include <openspace/navigation/navigationhandler.h>
#include <openspace/navigation/orbitalnavigator.h>
#include <openspace/navigation/waypoint.h>