diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 1f56118177..9136833d22 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -25,10 +25,14 @@ #include #include +#include +#include + #include #include // TODO: consider moving to scriptengine.h #include "avatars/ScriptableAvatar.h" +#include "RecordingScriptingInterface.h" #include "Agent.h" @@ -46,6 +50,9 @@ Agent::Agent(NLPacket& packet) : DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); + DependencyManager::set(); + DependencyManager::set(); auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); @@ -177,7 +184,7 @@ void Agent::run() { // give this AvatarData object to the script engine setAvatarData(&scriptedAvatar, "Avatar"); - + auto avatarHashMap = DependencyManager::set(); _scriptEngine->registerGlobalObject("AvatarList", avatarHashMap.data()); @@ -237,6 +244,8 @@ void Agent::setIsAvatar(bool isAvatar) { } if (!_isAvatar) { + DependencyManager::get()->setControlledAvatar(nullptr); + if (_avatarIdentityTimer) { _avatarIdentityTimer->stop(); delete _avatarIdentityTimer; @@ -254,6 +263,7 @@ void Agent::setIsAvatar(bool isAvatar) { void Agent::setAvatarData(AvatarData* avatarData, const QString& objectName) { _avatarData = avatarData; _scriptEngine->registerGlobalObject(objectName, avatarData); + DependencyManager::get()->setControlledAvatar(avatarData); } void Agent::sendAvatarIdentityPacket() { diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ba000725df..308ab85672 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -87,6 +87,7 @@ #include #include #include +#include #include #include #include @@ -127,7 +128,6 @@ #include "scripting/LocationScriptingInterface.h" #include "scripting/MenuScriptingInterface.h" #include "scripting/SettingsScriptingInterface.h" -#include "scripting/RecordingScriptingInterface.h" #include "scripting/WebWindowClass.h" #include "scripting/WindowScriptingInterface.h" #include "scripting/ControllerScriptingInterface.h" @@ -743,6 +743,10 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) : connect(applicationUpdater.data(), &AutoUpdater::newVersionIsAvailable, dialogsManager.data(), &DialogsManager::showUpdateDialog); applicationUpdater->checkForUpdate(); + // Assign MyAvatar to th eRecording Singleton + DependencyManager::get()->setControlledAvatar(getMyAvatar()); + + // Now that menu is initalized we can sync myAvatar with it's state. getMyAvatar()->updateMotionBehaviorFromMenu(); @@ -837,6 +841,7 @@ void Application::cleanupBeforeQuit() { #ifdef HAVE_IVIEWHMD DependencyManager::get()->setEnabled(false, true); #endif + DependencyManager::get()->setControlledAvatar(nullptr); AnimDebugDraw::getInstance().shutdown(); @@ -4006,7 +4011,6 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri RayToOverlayIntersectionResultFromScriptValue); scriptEngine->registerGlobalObject("Desktop", DependencyManager::get().data()); - scriptEngine->registerGlobalObject("Recording", DependencyManager::get().data()); scriptEngine->registerGlobalObject("Window", DependencyManager::get().data()); scriptEngine->registerGetterSetter("location", LocationScriptingInterface::locationGetter, diff --git a/interface/src/scripting/RecordingScriptingInterface.cpp b/libraries/script-engine/src/RecordingScriptingInterface.cpp similarity index 81% rename from interface/src/scripting/RecordingScriptingInterface.cpp rename to libraries/script-engine/src/RecordingScriptingInterface.cpp index d549de84b2..7d933e983c 100644 --- a/interface/src/scripting/RecordingScriptingInterface.cpp +++ b/libraries/script-engine/src/RecordingScriptingInterface.cpp @@ -8,17 +8,19 @@ #include "RecordingScriptingInterface.h" +#include + #include #include #include #include #include -#include +// FiXME +//#include #include +#include -#include "avatar/AvatarManager.h" -#include "Application.h" -#include "InterfaceLogging.h" +#include "ScriptEngineLogging.h" typedef int16_t AudioSample; @@ -43,8 +45,13 @@ RecordingScriptingInterface::RecordingScriptingInterface() { _player = DependencyManager::get(); _recorder = DependencyManager::get(); - auto audioClient = DependencyManager::get(); - connect(audioClient.data(), &AudioClient::inputReceived, this, &RecordingScriptingInterface::processAudioInput); + // FIXME : Disabling Sound +// auto audioClient = DependencyManager::get(); + // connect(audioClient.data(), &AudioClient::inputReceived, this, &RecordingScriptingInterface::processAudioInput); +} + +void RecordingScriptingInterface::setControlledAvatar(AvatarData* avatar) { + _controlledAvatar = avatar; } bool RecordingScriptingInterface::isPlaying() const { @@ -84,10 +91,10 @@ void RecordingScriptingInterface::startPlaying() { QMetaObject::invokeMethod(this, "startPlaying", Qt::BlockingQueuedConnection); return; } - auto myAvatar = DependencyManager::get()->getMyAvatar(); + // Playback from the current position - if (_playFromCurrentLocation) { - _dummyAvatar.setRecordingBasis(std::make_shared(myAvatar->getTransform())); + if (_playFromCurrentLocation && _controlledAvatar) { + _dummyAvatar.setRecordingBasis(std::make_shared(_controlledAvatar->getTransform())); } else { _dummyAvatar.clearRecordingBasis(); } @@ -160,7 +167,7 @@ float RecordingScriptingInterface::recorderElapsed() const { void RecordingScriptingInterface::startRecording() { if (_recorder->isRecording()) { - qCWarning(interfaceapp) << "Recorder is already running"; + qCWarning(scriptengine) << "Recorder is already running"; return; } @@ -170,7 +177,11 @@ void RecordingScriptingInterface::startRecording() { } _recordingEpoch = Frame::epochForFrameTime(0); - DependencyManager::get()->getMyAvatar()->setRecordingBasis(); + + if (_controlledAvatar) { + _controlledAvatar->setRecordingBasis(); + } + _recorder->start(); } @@ -178,7 +189,10 @@ void RecordingScriptingInterface::stopRecording() { _recorder->stop(); _lastClip = _recorder->getClip(); _lastClip->seek(0); - DependencyManager::get()->getMyAvatar()->clearRecordingBasis(); + + if (_controlledAvatar) { + _controlledAvatar->clearRecordingBasis(); + } } void RecordingScriptingInterface::saveRecording(const QString& filename) { @@ -203,7 +217,7 @@ void RecordingScriptingInterface::loadLastRecording() { } if (!_lastClip) { - qCDebug(interfaceapp) << "There is no recording to load"; + qCDebug(scriptengine) << "There is no recording to load"; return; } @@ -214,27 +228,32 @@ void RecordingScriptingInterface::loadLastRecording() { void RecordingScriptingInterface::processAvatarFrame(const Frame::ConstPointer& frame) { Q_ASSERT(QThread::currentThread() == thread()); + if (!_controlledAvatar) { + return; + } + AvatarData::fromFrame(frame->data, _dummyAvatar); - auto myAvatar = DependencyManager::get()->getMyAvatar(); + + if (_useHeadModel && _dummyAvatar.getFaceModelURL().isValid() && - (_dummyAvatar.getFaceModelURL() != myAvatar->getFaceModelURL())) { + (_dummyAvatar.getFaceModelURL() != _controlledAvatar->getFaceModelURL())) { // FIXME //myAvatar->setFaceModelURL(_dummyAvatar.getFaceModelURL()); } if (_useSkeletonModel && _dummyAvatar.getSkeletonModelURL().isValid() && - (_dummyAvatar.getSkeletonModelURL() != myAvatar->getSkeletonModelURL())) { + (_dummyAvatar.getSkeletonModelURL() != _controlledAvatar->getSkeletonModelURL())) { // FIXME //myAvatar->useFullAvatarURL() } - if (_useDisplayName && _dummyAvatar.getDisplayName() != myAvatar->getDisplayName()) { - myAvatar->setDisplayName(_dummyAvatar.getDisplayName()); + if (_useDisplayName && _dummyAvatar.getDisplayName() != _controlledAvatar->getDisplayName()) { + _controlledAvatar->setDisplayName(_dummyAvatar.getDisplayName()); } - myAvatar->setPosition(_dummyAvatar.getPosition()); - myAvatar->setOrientation(_dummyAvatar.getOrientation()); + _controlledAvatar->setPosition(_dummyAvatar.getPosition()); + _controlledAvatar->setOrientation(_dummyAvatar.getOrientation()); // FIXME attachments // FIXME joints @@ -250,6 +269,6 @@ void RecordingScriptingInterface::processAudioInput(const QByteArray& audio) { } void RecordingScriptingInterface::processAudioFrame(const recording::FrameConstPointer& frame) { - auto audioClient = DependencyManager::get(); - audioClient->handleRecordedAudioInput(frame->data); + // auto audioClient = DependencyManager::get(); + // audioClient->handleRecordedAudioInput(frame->data); } diff --git a/interface/src/scripting/RecordingScriptingInterface.h b/libraries/script-engine/src/RecordingScriptingInterface.h similarity index 96% rename from interface/src/scripting/RecordingScriptingInterface.h rename to libraries/script-engine/src/RecordingScriptingInterface.h index 27193e6f9a..abb090e09a 100644 --- a/interface/src/scripting/RecordingScriptingInterface.h +++ b/libraries/script-engine/src/RecordingScriptingInterface.h @@ -24,6 +24,8 @@ class RecordingScriptingInterface : public QObject, public Dependency { public: RecordingScriptingInterface(); + void setControlledAvatar(AvatarData* avatar); + public slots: void loadRecording(const QString& filename); @@ -79,6 +81,7 @@ private: Flag _useSkeletonModel { false }; recording::ClipPointer _lastClip; AvatarData _dummyAvatar; + AvatarData* _controlledAvatar; }; #endif // hifi_RecordingScriptingInterface_h diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index c17b091643..1b0fb80a05 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -47,6 +47,7 @@ #include "WebSocketClass.h" #include "SceneScriptingInterface.h" +#include "RecordingScriptingInterface.h" #include "MIDIEvent.h" @@ -377,6 +378,9 @@ void ScriptEngine::init() { auto scriptingInterface = DependencyManager::get(); registerGlobalObject("Controller", scriptingInterface.data()); UserInputMapper::registerControllerTypes(this); + + auto recordingInterface = DependencyManager::get(); + registerGlobalObject("Recording", recordingInterface.data()); } void ScriptEngine::registerValue(const QString& valueName, QScriptValue value) {