Browse Source

Update SystemComponent with OnPlayerJoin changes

Signed-off-by: puvvadar <[email protected]>
puvvadar 3 years ago
parent
commit
20ed4b027f

+ 2 - 2
Gem/Code/Source/Components/ExampleFilteredEntityComponent.cpp

@@ -43,12 +43,12 @@ namespace MultiplayerSample
 
 
     void ExampleFilteredEntityComponent::Activate()
     void ExampleFilteredEntityComponent::Activate()
     {
     {
-        Multiplayer::GetMultiplayer()->SetFilterEntityManager( this );
+        AZ::Interface<IFilterEntityManager>::Register(this);
     }
     }
 
 
     void ExampleFilteredEntityComponent::Deactivate()
     void ExampleFilteredEntityComponent::Deactivate()
     {
     {
-        Multiplayer::GetMultiplayer()->SetFilterEntityManager( nullptr );
+        AZ::Interface<IFilterEntityManager>::Unregister(this);
     }
     }
 
 
     bool ExampleFilteredEntityComponent::IsEntityFiltered(
     bool ExampleFilteredEntityComponent::IsEntityFiltered(

+ 1 - 1
Gem/Code/Source/Components/NetworkPlayerSpawnerComponent.h

@@ -22,7 +22,7 @@ namespace MultiplayerSample
             s_networkPlayerSpawnerComponentConcreteUuid,
             s_networkPlayerSpawnerComponentConcreteUuid,
             MultiplayerSample::NetworkPlayerSpawnerComponentBase);
             MultiplayerSample::NetworkPlayerSpawnerComponentBase);
 
 
-        NetworkPlayerSpawnerComponent();
+        NetworkPlayerSpawnerComponent(){};
 
 
         void OnInit() override;
         void OnInit() override;
         void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
         void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;

+ 1 - 3
Gem/Code/Source/MultiplayerSampleSystemComponent.cpp

@@ -113,9 +113,7 @@ namespace MultiplayerSample
     }
     }
 
 
     AZStd::pair<Multiplayer::PrefabEntityId, AZ::Transform> MultiplayerSampleSystemComponent::OnPlayerJoin(
     AZStd::pair<Multiplayer::PrefabEntityId, AZ::Transform> MultiplayerSampleSystemComponent::OnPlayerJoin(
-        uint64_t userId,
-        [[maybe_unused]] AzFramework::PlayerConnectionConfig config,
-        [[maybe_unused]] Multiplayer::LongNetworkString ticket)
+        uint64_t userId, [[maybe_unused]] const Multiplayer::MultiplayerAgentDatum& agentDatum)
     {
     {
         auto sv_playerSpawnAssetLowerCase = static_cast<AZ::CVarFixedString>(sv_playerSpawnAsset);
         auto sv_playerSpawnAssetLowerCase = static_cast<AZ::CVarFixedString>(sv_playerSpawnAsset);
         AZStd::to_lower(sv_playerSpawnAssetLowerCase.begin(), sv_playerSpawnAssetLowerCase.end());
         AZStd::to_lower(sv_playerSpawnAssetLowerCase.begin(), sv_playerSpawnAssetLowerCase.end());

+ 2 - 4
Gem/Code/Source/MultiplayerSampleSystemComponent.h

@@ -22,6 +22,7 @@ namespace Multiplayer
 {
 {
     struct EntityReplicationData;
     struct EntityReplicationData;
     using ReplicationSet = AZStd::map<ConstNetworkEntityHandle, EntityReplicationData>;
     using ReplicationSet = AZStd::map<ConstNetworkEntityHandle, EntityReplicationData>;
+    struct MultiplayerAgentDatum;
 }
 }
 
 
 namespace MultiplayerSample
 namespace MultiplayerSample
@@ -56,10 +57,7 @@ namespace MultiplayerSample
 
 
         ////////////////////////////////////////////////////////////////////////
         ////////////////////////////////////////////////////////////////////////
         // IMultiplayerSpawner overrides
         // IMultiplayerSpawner overrides
-        AZStd::pair<Multiplayer::PrefabEntityId, AZ::Transform> OnPlayerJoin(
-            uint64_t userId,
-            AzFramework::PlayerConnectionConfig config,
-            Multiplayer::LongNetworkString ticket) override;
+        AZStd::pair<Multiplayer::PrefabEntityId, AZ::Transform> OnPlayerJoin(uint64_t userId, const Multiplayer::MultiplayerAgentDatum& agentDatum) override;
         void OnPlayerLeave(
         void OnPlayerLeave(
             Multiplayer::ConstNetworkEntityHandle entityHandle,
             Multiplayer::ConstNetworkEntityHandle entityHandle,
             const Multiplayer::ReplicationSet& replicationSet,
             const Multiplayer::ReplicationSet& replicationSet,

+ 40 - 0
Gem/Code/Source/Spawners/IPlayerSpawner.h

@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) Contributors to the Open 3D Engine Project.
+ * For complete copyright and license terms please see the LICENSE at the root of this distribution.
+ *
+ * SPDX-License-Identifier: Apache-2.0 OR MIT
+ *
+ */
+
+#pragma once
+
+#include <AzCore/RTTI/RTTI.h>
+#include <Multiplayer/NetworkEntity/INetworkEntityManager.h>
+
+namespace AZ
+{
+    class Transform;
+}
+
+namespace MultiplayerSample
+{
+    class NetworkPlayerSpawnerComponent;
+
+    //! @class IPlayerSpawner
+    //! @brief IPlayerSpawner coordinate NetworkPlayerSpawners
+    //!
+    //! IPlayerSpawner is an AZ::Interface<T> that provides a registry for
+    //! NetworkPlayerSpawners which can then be queried when IMultiplayerSpawner
+    //! events fire.
+
+    class IPlayerSpawner
+    {
+    public:
+        AZ_RTTI(IPlayerSpawner, "{48CE4CFF-594B-4C6F-B5E0-8290A72CFEF9}");
+        virtual ~IPlayerSpawner() = default;
+
+        virtual bool RegisterPlayerSpawner(NetworkPlayerSpawnerComponent* spawner) = 0;
+        virtual AZStd::pair<Multiplayer::PrefabEntityId, AZ::Transform> GetNextPlayerSpawn() = 0;
+        virtual bool UnregisterPlayerSpawner(NetworkPlayerSpawnerComponent* spawner) = 0;
+    };
+} // namespace MultiplayerSample

+ 38 - 0
Gem/Code/Source/Spawners/RoundRobinSpawner.cpp

@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution.
+ * 
+ * SPDX-License-Identifier: Apache-2.0 OR MIT
+ *
+ */
+
+#include <Source/Spawners/RoundRobinSpawner.h>
+
+namespace MultiplayerSample
+{
+    bool RoundRobinSpawner::RegisterPlayerSpawner(NetworkPlayerSpawnerComponent* spawner)
+    {
+        if (!AZStd::find(m_spawners.begin(), m_spawners.end(), spawner))
+        {
+            m_spawners.push_back(spawner);
+            return true;
+        }
+
+        return false;
+    }
+
+    AZStd::pair<Multiplayer::PrefabEntityId, AZ::Transform> RoundRobinSpawner::GetNextPlayerSpawn()
+    {
+        return AZStd::make_pair<Multiplayer::PrefabEntityId, AZ::Transform>(Multiplayer::PrefabEntityId(), AZ::Transform::CreateIdentity());
+    }
+
+    bool RoundRobinSpawner::UnregisterPlayerSpawner(NetworkPlayerSpawnerComponent* spawner)
+    {
+        if (AZStd::find(m_spawners.begin(), m_spawners.end(), spawner))
+        {
+            m_spawners.erase(AZStd::remove(m_spawners.begin(), m_spawners.end(), spawner));
+            return true;
+        }
+
+        return false;
+    }
+} // namespace MultiplayerSample

+ 42 - 0
Gem/Code/Source/Spawners/RoundRobinSpawner.h

@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of
+ * this distribution.
+ *
+ * SPDX-License-Identifier: Apache-2.0 OR MIT
+ *
+ */
+
+#pragma once
+
+#include <Source/Spawners/IPlayerSpawner.h>
+
+namespace AzFramework
+{
+    struct PlayerConnectionConfig;
+}
+
+namespace Multiplayer
+{
+    struct EntityReplicationData;
+    using ReplicationSet = AZStd::map<ConstNetworkEntityHandle, EntityReplicationData>;
+} // namespace Multiplayer
+
+namespace MultiplayerSample
+{
+    class RoundRobinSpawner
+        : public MultiplayerSample::IPlayerSpawner
+    {
+    public:
+        AZ_RTTI(RoundRobinSpawner, "{C934A204-D6F8-4A44-870B-DFE5B8C7BA6B}");
+
+        ////////////////////////////////////////////////////////////////////////
+        // IPlayerSpawner overrides
+        bool RegisterPlayerSpawner(NetworkPlayerSpawnerComponent* spawner) override;
+        AZStd::pair<Multiplayer::PrefabEntityId, AZ::Transform> GetNextPlayerSpawn() override;
+        bool UnregisterPlayerSpawner(NetworkPlayerSpawnerComponent* spawner) override;
+        ////////////////////////////////////////////////////////////////////////
+
+    private:
+        AZStd::vector<NetworkPlayerSpawnerComponent*> m_spawners;
+    };
+} // namespace MultiplayerSample