Kaynağa Gözat

Removed strict dependency of O3DE on the MovieSystem (which is a gem) (#13029)

Signed-off-by: Luis Sempé <[email protected]>
Luis Sempé 2 yıl önce
ebeveyn
işleme
524db9998e

+ 64 - 36
Code/Editor/AnimationContext.cpp

@@ -149,7 +149,10 @@ CAnimationContext::~CAnimationContext()
 //////////////////////////////////////////////////////////////////////////
 void CAnimationContext::Init()
 {
-    gEnv->pMovieSystem->SetCallback(&s_movieCallback);
+    if (gEnv->pMovieSystem)
+    {
+        gEnv->pMovieSystem->SetCallback(&s_movieCallback);
+    }
 
     REGISTER_COMMAND("mov_goToFrameEditor", (ConsoleCommandFunc)GoToFrameCmd, 0, "Make a specified sequence go to a given frame time in the editor.");
 }
@@ -365,7 +368,11 @@ void CAnimationContext::Pause()
         SetRecordingInternal(false);
     }
 
-    GetIEditor()->GetMovieSystem()->Pause();
+    if (GetIEditor()->GetMovieSystem())
+    {
+        GetIEditor()->GetMovieSystem()->Pause();
+    }
+
     if (m_pSequence)
     {
         m_pSequence->Pause();
@@ -381,7 +388,11 @@ void CAnimationContext::Resume()
     {
         SetRecordingInternal(true);
     }
-    GetIEditor()->GetMovieSystem()->Resume();
+
+    if (GetIEditor()->GetMovieSystem())
+    {
+        GetIEditor()->GetMovieSystem()->Resume();
+    }
 
     if (m_pSequence)
     {
@@ -425,43 +436,44 @@ void CAnimationContext::SetPlaying(bool playing)
     m_recording = false;
     SetRecordingInternal(false);
 
-    if (playing)
+    IMovieSystem* pMovieSystem = GetIEditor()->GetMovieSystem();
+    if (pMovieSystem)
     {
-        IMovieSystem* pMovieSystem = GetIEditor()->GetMovieSystem();
-
-        pMovieSystem->Resume();
-        if (m_pSequence)
+        if (playing)
         {
-            m_pSequence->Resume();
+            pMovieSystem->Resume();
 
-            IMovieUser* pMovieUser = pMovieSystem->GetUser();
-
-            if (pMovieUser)
+            if (m_pSequence)
             {
-                m_pSequence->BeginCutScene(true);
-            }
-        }
-        pMovieSystem->ResumeCutScenes();
-    }
-    else
-    {
-        IMovieSystem* pMovieSystem = GetIEditor()->GetMovieSystem();
+                m_pSequence->Resume();
 
-        pMovieSystem->Pause();
+                IMovieUser* pMovieUser = pMovieSystem->GetUser();
 
-        if (m_pSequence)
-        {
-            m_pSequence->Pause();
+                if (pMovieUser)
+                {
+                    m_pSequence->BeginCutScene(true);
+                }
+            }
+            pMovieSystem->ResumeCutScenes();
         }
-
-        pMovieSystem->PauseCutScenes();
-        if (m_pSequence)
+        else
         {
-            IMovieUser* pMovieUser = pMovieSystem->GetUser();
+            pMovieSystem->Pause();
 
-            if (pMovieUser)
+            if (m_pSequence)
             {
-                m_pSequence->EndCutScene();
+                m_pSequence->Pause();
+            }
+
+            pMovieSystem->PauseCutScenes();
+            if (m_pSequence)
+            {
+                IMovieUser* pMovieUser = pMovieSystem->GetUser();
+
+                if (pMovieUser)
+                {
+                    m_pSequence->EndCutScene();
+                }
             }
         }
     }
@@ -479,11 +491,17 @@ void CAnimationContext::Update()
     // If looking through camera object and recording animation, do not allow camera shake
     if ((GetIEditor()->GetViewManager()->GetCameraObjectId() != GUID_NULL) && GetIEditor()->GetAnimation()->IsRecording())
     {
-        GetIEditor()->GetMovieSystem()->EnableCameraShake(false);
+        if (GetIEditor()->GetMovieSystem())
+        {
+            GetIEditor()->GetMovieSystem()->EnableCameraShake(false);
+        }
     }
     else
     {
-        GetIEditor()->GetMovieSystem()->EnableCameraShake(true);
+        if (GetIEditor()->GetMovieSystem())
+        {
+            GetIEditor()->GetMovieSystem()->EnableCameraShake(true);
+        }
     }
 
     if (m_paused > 0 || !(m_playing || m_bAutoRecording))
@@ -495,7 +513,10 @@ void CAnimationContext::Update()
 
         if (!m_recording)
         {
-            GetIEditor()->GetMovieSystem()->StillUpdate();
+            if (GetIEditor()->GetMovieSystem())
+            {
+                GetIEditor()->GetMovieSystem()->StillUpdate();
+            }
         }
 
         return;
@@ -512,8 +533,11 @@ void CAnimationContext::Update()
 
         if (!m_recording)
         {
-            GetIEditor()->GetMovieSystem()->PreUpdate(frameDeltaTime);
-            GetIEditor()->GetMovieSystem()->PostUpdate(frameDeltaTime);
+            if (GetIEditor()->GetMovieSystem())
+            {
+                GetIEditor()->GetMovieSystem()->PreUpdate(frameDeltaTime);
+                GetIEditor()->GetMovieSystem()->PostUpdate(frameDeltaTime);
+            }
         }
     }
     else
@@ -784,7 +808,11 @@ void CAnimationContext::OnEditorNotifyEvent(EEditorNotifyEvent event)
 
 void CAnimationContext::SetRecordingInternal(bool enableRecording)
 {
-    GetIEditor()->GetMovieSystem()->SetRecording(enableRecording);
+    if (GetIEditor()->GetMovieSystem())
+    {
+        GetIEditor()->GetMovieSystem()->SetRecording(enableRecording);
+    }
+
     if (m_pSequence)
     {
         m_pSequence->SetRecording(enableRecording);

+ 17 - 14
Code/Editor/SelectLightAnimationDialog.cpp

@@ -35,26 +35,29 @@ void CSelectLightAnimationDialog::OnInitDialog()
 void CSelectLightAnimationDialog::GetItems(std::vector<SItem>& outItems)
 {
     IMovieSystem* pMovieSystem = GetIEditor()->GetMovieSystem();
-    for (int i = 0; i < pMovieSystem->GetNumSequences(); ++i)
+    if (pMovieSystem)
     {
-        IAnimSequence* pSequence = pMovieSystem->GetSequence(i);
-        if ((pSequence->GetFlags() & IAnimSequence::eSeqFlags_LightAnimationSet) == 0)
+        for (int i = 0; i < pMovieSystem->GetNumSequences(); ++i)
         {
-            continue;
-        }
-
-        for (int k = 0; k < pSequence->GetNodeCount(); ++k)
-        {
-            assert(pSequence->GetNode(k)->GetType() == AnimNodeType::Light);
-            if (pSequence->GetNode(k)->GetType() != AnimNodeType::Light)
+            IAnimSequence* pSequence = pMovieSystem->GetSequence(i);
+            if ((pSequence->GetFlags() & IAnimSequence::eSeqFlags_LightAnimationSet) == 0)
             {
                 continue;
             }
-            SItem item;
-            item.name = pSequence->GetNode(k)->GetName();
-            outItems.push_back(item);
+
+            for (int k = 0; k < pSequence->GetNodeCount(); ++k)
+            {
+                assert(pSequence->GetNode(k)->GetType() == AnimNodeType::Light);
+                if (pSequence->GetNode(k)->GetType() != AnimNodeType::Light)
+                {
+                    continue;
+                }
+                SItem item;
+                item.name = pSequence->GetNode(k)->GetName();
+                outItems.push_back(item);
+            }
+            return;
         }
-        return;
     }
 }
 

+ 9 - 6
Code/Editor/SelectSequenceDialog.cpp

@@ -33,13 +33,16 @@ CSelectSequenceDialog::OnInitDialog()
 CSelectSequenceDialog::GetItems(std::vector<SItem>& outItems)
 {
     IMovieSystem* pMovieSys = GetIEditor()->GetMovieSystem();
-    for (int i = 0; i < pMovieSys->GetNumSequences(); ++i)
+    if (pMovieSys)
     {
-        IAnimSequence* pSeq = pMovieSys->GetSequence(i);
-        SItem item;
-        AZStd::string fullname = pSeq->GetName();
-        item.name = fullname.c_str();
-        outItems.push_back(item);
+        for (int i = 0; i < pMovieSys->GetNumSequences(); ++i)
+        {
+            IAnimSequence* pSeq = pMovieSys->GetSequence(i);
+            SItem item;
+            AZStd::string fullname = pSeq->GetName();
+            item.name = fullname.c_str();
+            outItems.push_back(item);
+        }
     }
 }
 

+ 34 - 25
Code/Editor/TrackView/SequenceBatchRenderDialog.cpp

@@ -181,14 +181,17 @@ void CSequenceBatchRenderDialog::OnInitDialog()
 
     // Fill the sequence combo box.
     bool activeSequenceWasSet = false;
-    for (int k = 0; k < GetIEditor()->GetMovieSystem()->GetNumSequences(); ++k)
+    if (GetIEditor()->GetMovieSystem())
     {
-        IAnimSequence* pSequence = GetIEditor()->GetMovieSystem()->GetSequence(k);
-        m_ui->m_sequenceCombo->addItem(pSequence->GetName());
-        if (pSequence->IsActivated())
+        for (int k = 0; k < GetIEditor()->GetMovieSystem()->GetNumSequences(); ++k)
         {
-            m_ui->m_sequenceCombo->setCurrentIndex(k);
-            activeSequenceWasSet = true;
+            IAnimSequence* pSequence = GetIEditor()->GetMovieSystem()->GetSequence(k);
+            m_ui->m_sequenceCombo->addItem(pSequence->GetName());
+            if (pSequence->IsActivated())
+            {
+                m_ui->m_sequenceCombo->setCurrentIndex(k);
+                activeSequenceWasSet = true;
+            }
         }
     }
     if (!activeSequenceWasSet)
@@ -521,7 +524,10 @@ void CSequenceBatchRenderDialog::OnGo()
         m_ui->m_pGoBtn->setText("Cancel");
         m_ui->m_pGoBtn->setIcon(QPixmap(":/Trackview/clapperboard_cancel.png"));
         // Inform the movie system that it soon will be in a batch-rendering mode.
-        GetIEditor()->GetMovieSystem()->EnableBatchRenderMode(true);
+        if (GetIEditor()->GetMovieSystem())
+        {
+            GetIEditor()->GetMovieSystem()->EnableBatchRenderMode(true);
+        }
 
         // Initialize the context.
         InitializeContext();
@@ -579,27 +585,30 @@ void CSequenceBatchRenderDialog::OnSequenceSelected()
 {
     // Get the selected sequence.
     const QString seqName = m_ui->m_sequenceCombo->currentText();
-    IAnimSequence* pSequence = GetIEditor()->GetMovieSystem()->FindLegacySequenceByName(seqName.toUtf8().data());
-
-    // Adjust the frame range.
-    float sFrame = pSequence->GetTimeRange().start * m_fpsForTimeToFrameConversion;
-    float eFrame = pSequence->GetTimeRange().end * m_fpsForTimeToFrameConversion;
-    m_ui->m_startFrame->setRange(0, static_cast<int>(eFrame));
-    m_ui->m_endFrame->setRange(0, static_cast<int>(eFrame));
-
-    // Set the default start/end frames properly.
-    m_ui->m_startFrame->setValue(static_cast<int>(sFrame));
-    m_ui->m_endFrame->setValue(static_cast<int>(eFrame));
-
-    m_ui->m_shotCombo->clear();
-    // Fill the shot combo box with the names of director nodes.
-    for (int i = 0; i < pSequence->GetNodeCount(); ++i)
-    {
-        if (pSequence->GetNode(i)->GetType() == AnimNodeType::Director)
+    IAnimSequence* pSequence = GetIEditor()->GetMovieSystem() ? GetIEditor()->GetMovieSystem()->FindLegacySequenceByName(seqName.toUtf8().data()) : nullptr;
+    if (pSequence)
+    {
+        // Adjust the frame range.
+        float sFrame = pSequence->GetTimeRange().start * m_fpsForTimeToFrameConversion;
+        float eFrame = pSequence->GetTimeRange().end * m_fpsForTimeToFrameConversion;
+        m_ui->m_startFrame->setRange(0, static_cast<int>(eFrame));
+        m_ui->m_endFrame->setRange(0, static_cast<int>(eFrame));
+
+        // Set the default start/end frames properly.
+        m_ui->m_startFrame->setValue(static_cast<int>(sFrame));
+        m_ui->m_endFrame->setValue(static_cast<int>(eFrame));
+
+        m_ui->m_shotCombo->clear();
+        // Fill the shot combo box with the names of director nodes.
+        for (int i = 0; i < pSequence->GetNodeCount(); ++i)
         {
-            m_ui->m_shotCombo->addItem(pSequence->GetNode(i)->GetName());
+            if (pSequence->GetNode(i)->GetType() == AnimNodeType::Director)
+            {
+                m_ui->m_shotCombo->addItem(pSequence->GetNode(i)->GetName());
+            }
         }
     }
+
     m_ui->m_shotCombo->setCurrentIndex(0);
 
     CheckForEnableUpdateButton();

+ 29 - 16
Code/Editor/TrackView/TrackViewDialog.cpp

@@ -113,8 +113,11 @@ void CTrackViewDialog::RegisterViewClass()
     opts.showOnToolsToolbar = true;
     opts.toolbarIcon = ":/Menu/trackview_editor.svg";
 
-    AzToolsFramework::RegisterViewPane<CTrackViewDialog>(LyViewPane::TrackView, LyViewPane::CategoryTools, opts);
-    GetIEditor()->GetSettingsManager()->AddToolName(s_kTrackViewLayoutSection, LyViewPane::TrackView);
+    if (GetIEditor()->GetMovieSystem())
+    {
+        AzToolsFramework::RegisterViewPane<CTrackViewDialog>(LyViewPane::TrackView, LyViewPane::CategoryTools, opts);
+        GetIEditor()->GetSettingsManager()->AddToolName(s_kTrackViewLayoutSection, LyViewPane::TrackView);
+    }
 }
 
 const GUID& CTrackViewDialog::GetClassID()
@@ -820,8 +823,15 @@ void CTrackViewDialog::UpdateActions()
         m_actions[ID_ADDNODE]->setEnabled(false);
     }
 
+    if (GetIEditor()->GetMovieSystem())
+    {
+        m_actions[ID_TOOLS_BATCH_RENDER]->setEnabled(GetIEditor()->GetMovieSystem()->GetNumSequences() > 0 && !m_enteringGameOrSimModeLock);
+    }
+    else
+    {
+        m_actions[ID_TOOLS_BATCH_RENDER]->setEnabled(false);
+    }
 
-    m_actions[ID_TOOLS_BATCH_RENDER]->setEnabled(GetIEditor()->GetMovieSystem()->GetNumSequences() > 0 && !m_enteringGameOrSimModeLock);
     m_actions[ID_TV_ADD_SEQUENCE]->setEnabled(GetIEditor()->GetDocument() && GetIEditor()->GetDocument()->IsDocumentReady() && !m_enteringGameOrSimModeLock);
     m_actions[ID_TV_SEQUENCE_NEW]->setEnabled(GetIEditor()->GetDocument() && GetIEditor()->GetDocument()->IsDocumentReady() && !m_enteringGameOrSimModeLock);
 }
@@ -881,26 +891,29 @@ void CTrackViewDialog::Update()
     // The active camera node means two conditions:
     // 1. Sequence camera is currently active.
     // 2. The camera which owns this node has been set as the current camera by the director node.
-    bool bSequenceCamInUse = gEnv->pMovieSystem->GetCallback() == nullptr ||
-        gEnv->pMovieSystem->GetCallback()->IsSequenceCamUsed();
-    AZ::EntityId camId = gEnv->pMovieSystem->GetCameraParams().cameraEntityId;
-    if (camId.IsValid() && bSequenceCamInUse)
-    {
-        AZ::Entity* entity = nullptr;
-        AZ::ComponentApplicationBus::BroadcastResult(entity, &AZ::ComponentApplicationBus::Events::FindEntity, camId);
-        if (entity)
+    if (gEnv->pMovieSystem)
+    {
+        bool bSequenceCamInUse = gEnv->pMovieSystem->GetCallback() == nullptr ||
+            gEnv->pMovieSystem->GetCallback()->IsSequenceCamUsed();
+        AZ::EntityId camId = gEnv->pMovieSystem->GetCameraParams().cameraEntityId;
+        if (camId.IsValid() && bSequenceCamInUse)
         {
-            m_activeCamStatic->setText(entity->GetName().c_str());
+            AZ::Entity* entity = nullptr;
+            AZ::ComponentApplicationBus::BroadcastResult(entity, &AZ::ComponentApplicationBus::Events::FindEntity, camId);
+            if (entity)
+            {
+                m_activeCamStatic->setText(entity->GetName().c_str());
+            }
+            else
+            {
+                m_activeCamStatic->setText("Active Camera");
+            }
         }
         else
         {
             m_activeCamStatic->setText("Active Camera");
         }
     }
-    else
-    {
-        m_activeCamStatic->setText("Active Camera");
-    }
 
     if (m_wndNodesCtrl)
     {

+ 13 - 6
Code/Editor/TrackView/TrackViewPythonFuncs.cpp

@@ -398,14 +398,21 @@ namespace
             throw std::runtime_error("Couldn't find node");
         }
 
-        const CAnimParamType paramType = GetIEditor()->GetMovieSystem()->GetParamTypeFromString(paramName);
-        CTrackViewTrack* pTrack = pNode->GetTrackForParameter(paramType, index);
-        if (!pTrack)
+        if (GetIEditor()->GetMovieSystem())
         {
-            throw std::runtime_error("Track doesn't exist");
-        }
+            const CAnimParamType paramType = GetIEditor()->GetMovieSystem()->GetParamTypeFromString(paramName);
+            CTrackViewTrack* pTrack = pNode->GetTrackForParameter(paramType, index);
+            if (!pTrack)
+            {
+                throw std::runtime_error("Track doesn't exist");
+            }
 
-        return pTrack;
+            return pTrack;
+        }
+        else
+        {
+            throw std::runtime_error("MovieSystem does not exist");
+        }
     }
 
     std::set<float> GetKeyTimeSet(CTrackViewTrack* pTrack)

+ 20 - 7
Code/Editor/TrackView/TrackViewSequenceManager.cpp

@@ -178,17 +178,24 @@ void CTrackViewSequenceManager::CreateSequence(QString name, [[maybe_unused]] Se
 IAnimSequence* CTrackViewSequenceManager::OnCreateSequenceObject(QString name, bool isLegacySequence, AZ::EntityId entityId)
 {
     // Drop legacy sequences on the floor, they are no longer supported.
-    if (isLegacySequence)
+    if (isLegacySequence && GetIEditor()->GetMovieSystem())
     {
         GetIEditor()->GetMovieSystem()->LogUserNotificationMsg(AZStd::string::format("Legacy Sequences are no longer supported. Skipping '%s'.", name.toUtf8().data()));
         return nullptr;
     }
 
-    IAnimSequence* sequence = GetIEditor()->GetMovieSystem()->CreateSequence(name.toUtf8().data(), /*bload =*/ false, /*id =*/ 0U, SequenceType::SequenceComponent, entityId);
-    AZ_Assert(sequence, "Failed to create sequence");
-    AddTrackViewSequence(new CTrackViewSequence(sequence));
+    if (GetIEditor()->GetMovieSystem())
+    {
+        IAnimSequence* sequence = GetIEditor()->GetMovieSystem()->CreateSequence(name.toUtf8().data(), /*bload =*/ false, /*id =*/ 0U, SequenceType::SequenceComponent, entityId);
+        AZ_Assert(sequence, "Failed to create sequence");
+        AddTrackViewSequence(new CTrackViewSequence(sequence));
 
-    return sequence;
+        return sequence;
+    }
+    else
+    {
+        return nullptr;
+    }
 }
 
 ////////////////////////////////////////////////////////////////////////////
@@ -208,7 +215,10 @@ void CTrackViewSequenceManager::OnCreateSequenceComponent(AZStd::intrusive_ptr<I
     sequence->InitPostLoad();
 
     // Add the sequence to the movie system
-    GetIEditor()->GetMovieSystem()->AddSequence(sequence.get());
+    if (GetIEditor()->GetMovieSystem())
+    {
+        GetIEditor()->GetMovieSystem()->AddSequence(sequence.get());
+    }
 
     // Create the TrackView Sequence
     CTrackViewSequence* newTrackViewSequence = new CTrackViewSequence(sequence);
@@ -329,7 +339,10 @@ void CTrackViewSequenceManager::RemoveSequenceInternal(CTrackViewSequence* seque
             // Remove from CryMovie and TrackView
             m_sequences.erase(iter);
             IMovieSystem* pMovieSystem = GetIEditor()->GetMovieSystem();
-            pMovieSystem->RemoveSequence(sequence->m_pAnimSequence.get());
+            if (pMovieSystem)
+            {
+                pMovieSystem->RemoveSequence(sequence->m_pAnimSequence.get());
+            }
 
             break;
         }

+ 12 - 3
Code/Legacy/CryCommon/IMovieSystem.h

@@ -1519,15 +1519,24 @@ struct IMovieSystem
 
 inline void CAnimParamType::SaveToXml(XmlNodeRef& xmlNode) const
 {
-    gEnv->pMovieSystem->SaveParamTypeToXml(*this, xmlNode);
+    if (gEnv->pMovieSystem)
+    {
+        gEnv->pMovieSystem->SaveParamTypeToXml(*this, xmlNode);
+    }
 }
 
 inline void CAnimParamType::LoadFromXml(const XmlNodeRef& xmlNode, const uint version)
 {
-    gEnv->pMovieSystem->LoadParamTypeFromXml(*this, xmlNode, version);
+    if (gEnv->pMovieSystem)
+    {
+        gEnv->pMovieSystem->LoadParamTypeFromXml(*this, xmlNode, version);
+    }
 }
 
 inline void CAnimParamType::Serialize(XmlNodeRef& xmlNode, bool bLoading, const uint version)
 {
-    gEnv->pMovieSystem->SerializeParamType(*this, xmlNode, bLoading, version);
+    if (gEnv->pMovieSystem)
+    {
+        gEnv->pMovieSystem->SerializeParamType(*this, xmlNode, bLoading, version);
+    }
 }

+ 0 - 7
Code/Legacy/CrySystem/SystemInit.cpp

@@ -1068,13 +1068,6 @@ AZ_POP_DISABLE_WARNING
     // Execute any deferred commands that uses the CVar commands that were just registered
     AZ::Interface<AZ::IConsole>::Get()->ExecuteDeferredConsoleCommands();
 
-    // Verify that the Maestro Gem initialized the movie system correctly. This can be removed if and when Maestro is not a required Gem
-    if (gEnv->IsEditor() && !gEnv->pMovieSystem)
-    {
-        AZ_Assert(false, "Error initializing the Cinematic System. Please check that the Maestro Gem is enabled for this project.");
-        return false;
-    }
-
     if (ISystemEventDispatcher* systemEventDispatcher = GetISystemEventDispatcher())
     {
         systemEventDispatcher->OnSystemEvent(ESYSTEM_EVENT_GAME_POST_INIT, 0, 0);