diff --git a/Gems/Multiplayer/Code/CMakeLists.txt b/Gems/Multiplayer/Code/CMakeLists.txt index a26f286264..4eeee15c47 100644 --- a/Gems/Multiplayer/Code/CMakeLists.txt +++ b/Gems/Multiplayer/Code/CMakeLists.txt @@ -101,7 +101,6 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS) AZ::AzFramework AZ::AzNetworking AZ::AzToolsFramework - AZ::GFxFramework Gem::Multiplayer.Static ) @@ -120,8 +119,6 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS) BUILD_DEPENDENCIES PRIVATE Gem::Multiplayer.Editor.Static - RUNTIME_DEPENDENCIES - Gem::LmbrCentral.Editor ) endif() diff --git a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp index 1e2a55c2a6..aec3e7870f 100644 --- a/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Editor/MultiplayerEditorSystemComponent.cpp @@ -67,6 +67,7 @@ namespace Multiplayer void MultiplayerEditorSystemComponent::NotifyRegisterViews() { + AZ_Assert(m_editor == nullptr, "NotifyRegisterViews occurred twice!"); m_editor = nullptr; AzToolsFramework::EditorRequests::Bus::BroadcastResult(m_editor, &AzToolsFramework::EditorRequests::GetEditor); m_editor->RegisterNotifyListener(this); @@ -121,9 +122,13 @@ namespace Multiplayer break; } case eNotify_OnQuit: - m_editor->UnregisterNotifyListener(this); - m_editor = nullptr; - // Fall through here as the cleanup steps in EndGameMode are good sanity + AZ_Warning("Multiplayer Editor", m_editor != nullptr, "Multiplayer Editor received On Quit without an Editor pointer."); + if (m_editor) + { + m_editor->UnregisterNotifyListener(this); + m_editor = nullptr; + } + [[fallthrough]]; case eNotify_OnEndGameMode: AZ::TickBus::Handler::BusDisconnect(); // Kill the configured server if it's active diff --git a/Gems/Multiplayer/Code/Source/MultiplayerEditorGem.cpp b/Gems/Multiplayer/Code/Source/MultiplayerEditorGem.cpp new file mode 100644 index 0000000000..29ef0e216f --- /dev/null +++ b/Gems/Multiplayer/Code/Source/MultiplayerEditorGem.cpp @@ -0,0 +1,49 @@ +/* +* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +* its licensors. +* +* For complete copyright and license terms please see the LICENSE at the root of this +* distribution (the "License"). All use of this software is governed by the License, +* or, if provided, by the license below or the license accompanying this file. Do not +* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* +*/ + +#include +#include +#include +#include +#include + +#include + +namespace Multiplayer +{ + AZ_CLASS_ALLOCATOR_IMPL(MultiplayerEditorModule, AZ::SystemAllocator, 0) + + MultiplayerEditorModule::MultiplayerEditorModule() + : MultiplayerModule() + { + // Append Editor specific descriptors + m_descriptors.insert( + m_descriptors.end(), + { + MultiplayerEditorSystemComponent::CreateDescriptor(), + }); + } + + MultiplayerEditorModule::~MultiplayerEditorModule() = default; + + AZ::ComponentTypeList MultiplayerEditorModule::GetRequiredSystemComponents() const + { + return AZ::ComponentTypeList + { + azrtti_typeid(), + azrtti_typeid(), + azrtti_typeid(), + }; + } +} // namespace Multiplayer + +AZ_DECLARE_MODULE_CLASS(Gem_MultiplayerEditor, Multiplayer::MultiplayerEditorModule) diff --git a/Gems/Multiplayer/Code/Source/MultiplayerEditorGem.h b/Gems/Multiplayer/Code/Source/MultiplayerEditorGem.h new file mode 100644 index 0000000000..706a87691e --- /dev/null +++ b/Gems/Multiplayer/Code/Source/MultiplayerEditorGem.h @@ -0,0 +1,30 @@ +/* + * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or + * its licensors. + * + * For complete copyright and license terms please see the LICENSE at the root of this + * distribution (the "License"). All use of this software is governed by the License, + * or, if provided, by the license below or the license accompanying this file. Do not + * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + */ + +#pragma once + +#include "MultiplayerGem.h" + +namespace Multiplayer +{ + class MultiplayerEditorModule: public MultiplayerModule + { + public: + AZ_CLASS_ALLOCATOR_DECL + AZ_RTTI(MultiplayerEditorModule, "{50273605-2BBF-4D43-A42D-ED140B92B4D4}", MultiplayerModule); + + MultiplayerEditorModule(); + ~MultiplayerEditorModule(); + + AZ::ComponentTypeList GetRequiredSystemComponents() const override; + }; +} // namespace Multiplayer diff --git a/Gems/Multiplayer/Code/Source/MultiplayerGem.cpp b/Gems/Multiplayer/Code/Source/MultiplayerGem.cpp index d934b30ddc..cafdbf2a09 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerGem.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerGem.cpp @@ -19,10 +19,6 @@ #include #include -#ifdef MULTIPLAYER_EDITOR - #include -#endif - namespace Multiplayer { MultiplayerModule::MultiplayerModule() @@ -32,9 +28,6 @@ namespace Multiplayer AzNetworking::NetworkingSystemComponent::CreateDescriptor(), MultiplayerSystemComponent::CreateDescriptor(), NetBindComponent::CreateDescriptor(), -#ifdef MULTIPLAYER_EDITOR - MultiplayerEditorSystemComponent::CreateDescriptor(), -#endif NetBindMarkerComponent::CreateDescriptor(), NetworkSpawnableHolderComponent::CreateDescriptor(), }); @@ -48,11 +41,10 @@ namespace Multiplayer { azrtti_typeid(), azrtti_typeid(), -#ifdef MULTIPLAYER_EDITOR - azrtti_typeid(), -#endif }; } } +#if !defined(MULTIPLAYER_EDITOR) AZ_DECLARE_MODULE_CLASS(Gem_Multiplayer, Multiplayer::MultiplayerModule); +#endif diff --git a/Gems/Multiplayer/Code/multiplayer_editor_shared_files.cmake b/Gems/Multiplayer/Code/multiplayer_editor_shared_files.cmake index e0c50f864e..2d5611d4b6 100644 --- a/Gems/Multiplayer/Code/multiplayer_editor_shared_files.cmake +++ b/Gems/Multiplayer/Code/multiplayer_editor_shared_files.cmake @@ -12,6 +12,8 @@ set(FILES Source/MultiplayerGem.cpp Source/MultiplayerGem.h + Source/MultiplayerEditorGem.cpp + Source/MultiplayerEditorGem.h Source/Editor/MultiplayerEditorSystemComponent.cpp Source/Editor/MultiplayerEditorSystemComponent.h )