From 683e63346964197b77aa57ed0c627305d37032b1 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 8 Jan 2019 09:18:53 +1300 Subject: [PATCH] Fix play back of input recording's numeric values --- .../controllers/src/controllers/InputRecorder.cpp | 7 +++++++ .../controllers/src/controllers/InputRecorder.h | 1 + .../src/controllers/UserInputMapper.cpp | 15 +++++++++++++++ .../controllers/impl/endpoints/ActionEndpoint.cpp | 9 +++------ 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/libraries/controllers/src/controllers/InputRecorder.cpp b/libraries/controllers/src/controllers/InputRecorder.cpp index 54d1aaf131..928dbf0521 100644 --- a/libraries/controllers/src/controllers/InputRecorder.cpp +++ b/libraries/controllers/src/controllers/InputRecorder.cpp @@ -297,6 +297,13 @@ namespace controller { return 0.0f; } + InputRecorder::ActionStates InputRecorder::getActionstates() { + if (_actionStateList.size() > 0) { + return _actionStateList[_playCount]; + } + return {}; + } + controller::Pose InputRecorder::getPoseState(const QString& action) { if (_poseStateList.size() > 0) { return _poseStateList[_playCount][action]; diff --git a/libraries/controllers/src/controllers/InputRecorder.h b/libraries/controllers/src/controllers/InputRecorder.h index 9adb8e386f..a0fcb2e87e 100644 --- a/libraries/controllers/src/controllers/InputRecorder.h +++ b/libraries/controllers/src/controllers/InputRecorder.h @@ -45,6 +45,7 @@ namespace controller { void setActionState(const QString& action, float value); void setActionState(const QString& action, const controller::Pose& pose); float getActionState(const QString& action); + ActionStates getActionstates(); controller::Pose getPoseState(const QString& action); QString getSaveDirectory(); void frameTick(); diff --git a/libraries/controllers/src/controllers/UserInputMapper.cpp b/libraries/controllers/src/controllers/UserInputMapper.cpp index e8503d8d1e..33dc37312e 100755 --- a/libraries/controllers/src/controllers/UserInputMapper.cpp +++ b/libraries/controllers/src/controllers/UserInputMapper.cpp @@ -489,6 +489,21 @@ void UserInputMapper::runMappings() { } applyRoutes(_standardRoutes); + InputRecorder* inputRecorder = InputRecorder::getInstance(); + if (inputRecorder->isPlayingback()) { + if (debugRoutes) { + qCDebug(controllers) << "Playing back recording actions"; + } + + // Play back each numeric action even if there is no current route active for the action. + auto actionStates = inputRecorder->getActionstates(); + for (InputRecorder::ActionStates::iterator it = actionStates.begin(); it != actionStates.end(); ++it) { + setActionState((Action)findAction(it->first), it->second); + } + + // Poses are played back in StandardEndpoint. + } + if (debugRoutes) { qCDebug(controllers) << "Done with mappings"; } diff --git a/libraries/controllers/src/controllers/impl/endpoints/ActionEndpoint.cpp b/libraries/controllers/src/controllers/impl/endpoints/ActionEndpoint.cpp index 122af5a30c..58744c468c 100644 --- a/libraries/controllers/src/controllers/impl/endpoints/ActionEndpoint.cpp +++ b/libraries/controllers/src/controllers/impl/endpoints/ActionEndpoint.cpp @@ -18,19 +18,16 @@ using namespace controller; void ActionEndpoint::apply(AxisValue newValue, const Pointer& source) { auto userInputMapper = DependencyManager::get(); InputRecorder* inputRecorder = InputRecorder::getInstance(); - QString actionName; if (inputRecorder->isPlayingback() || inputRecorder->isRecording()) { - actionName = userInputMapper->getActionName(Action(_input.getChannel())); - if (inputRecorder->isPlayingback()) { - newValue = AxisValue(inputRecorder->getActionState(actionName), 0); - } + QString actionName = userInputMapper->getActionName(Action(_input.getChannel())); + inputRecorder->setActionState(actionName, newValue.value); } _currentValue.value += newValue.value; + if (_input != Input::INVALID_INPUT) { userInputMapper->deltaActionState(Action(_input.getChannel()), newValue.value); } - inputRecorder->setActionState(actionName, newValue.value); } void ActionEndpoint::apply(const Pose& value, const Pointer& source) {