Преглед изворни кода

Wip. Rest time between rounds lengthened to give users more time to see their rank. Added rest time between match network archetype. Still need to properly track when the rest is over via network propery to support players that join in between matches.

Signed-off-by: Gene Walters <[email protected]>
Gene Walters пре 2 година
родитељ
комит
fbd3ce8a21

+ 2 - 0
Gem/Code/CMakeLists.txt

@@ -52,6 +52,7 @@ ly_add_target(
     FILES_CMAKE
         multiplayersample_autogen_files.cmake
         multiplayersample_files.cmake
+        multiplayersample_server_files.cmake
         ${pal_dir}/multiplayersample_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
     INCLUDE_DIRECTORIES
         PRIVATE
@@ -84,6 +85,7 @@ ly_add_target(
         multiplayersample_autogen_files.cmake
         multiplayersample_files.cmake
         multiplayersample_client_files.cmake
+        multiplayersample_server_files.cmake
         ${pal_dir}/multiplayersample_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
     INCLUDE_DIRECTORIES
         PRIVATE

+ 36 - 24
Gem/Code/Source/Components/NetworkMatchComponent.cpp

@@ -11,17 +11,12 @@
 #include <MultiplayerSampleTypes.h>
 #include <UiGameOverBus.h>
 
-#include <GameState/GameStateMatchEnded.h>
-#include <GameState/GameStateMatchInProgress.h>
-#include <GameState/GameStatePreparingMatch.h>
 #include <Source/Components/Multiplayer/MatchPlayerCoinsComponent.h>
 #include <Source/Components/Multiplayer/PlayerIdentityComponent.h>
 #include <Source/Components/NetworkTeleportCompatibleComponent.h>
 #include <Source/Components/NetworkHealthComponent.h>
 #include <Source/Components/NetworkMatchComponent.h>
 #include <Source/Components/NetworkRandomComponent.h>
-#include <GameState/GameStateRequestBus.h>
-#include <GameState/GameStateWaitingForPlayers.h>
 
 #include "NetworkRandomComponent.h"
 #include "Multiplayer/GemSpawnerComponent.h"
@@ -34,6 +29,14 @@
 #   include <LyShine/Bus/UiCursorBus.h>
 #endif
 
+#if AZ_TRAIT_SERVER
+#   include <GameState/GameStateRequestBus.h>
+#   include <GameState/GameStateWaitingForPlayers.h>
+#   include <GameState/GameStatePreparingMatch.h>
+#   include <GameState/GameStateMatchInProgress.h>
+#   include <GameState/GameStateMatchEnded.h>
+#endif
+
 namespace MultiplayerSample
 {
     AZ_ENUM_DEFINE_REFLECT_UTILITIES(AllowedPlayerActions);
@@ -160,6 +163,12 @@ namespace MultiplayerSample
         RoundRestTimeRemainingAddEvent(handler);
     }
 
+    float NetworkMatchComponent::GetRestDurationBetweenMatches() const
+    {
+        return NetworkMatchComponentBase::GetRestDurationBetweenMatches();
+    }
+
+
 #if AZ_TRAIT_SERVER
     void NetworkMatchComponent::OnPlayerActivated(Multiplayer::NetEntityId playerEntity)
     {
@@ -214,26 +223,28 @@ namespace MultiplayerSample
             AZ::SimpleLcgRandom randomNumberGenerator(aznumeric_cast<int64_t>(AZ::GetElapsedTimeMs()));
             m_playerNameRandomStartingIndexPrefix = randomNumberGenerator.GetRandom() % AutoAssignedPlayerNamePrefix.size();
             m_playerNameRandomStartingIndexPostfix = randomNumberGenerator.GetRandom() % AutoAssignedPlayerNamePostfix.size();
-        #endif
+        
 
-        GameState::GameStateRequests::AddGameStateFactoryOverrideForType<GameStateWaitingForPlayers>([this]()
-            {
-                return AZStd::make_shared<GameStateWaitingForPlayers>(this);
-            });
-        GameState::GameStateRequests::AddGameStateFactoryOverrideForType<GameStatePreparingMatch>([this]()
-            {
-                return AZStd::make_shared<GameStatePreparingMatch>(this);
-            });
-        GameState::GameStateRequests::AddGameStateFactoryOverrideForType<GameStateMatchInProgress>([this]()
-            {
-                return AZStd::make_shared<GameStateMatchInProgress>(this);
-            });
-        GameState::GameStateRequests::AddGameStateFactoryOverrideForType<GameStateMatchEnded>([this]()
-            {
-                return AZStd::make_shared<GameStateMatchEnded>(this);
-            });
+            GameState::GameStateRequests::AddGameStateFactoryOverrideForType<GameStateWaitingForPlayers>([this]()
+                {
+                    return AZStd::make_shared<GameStateWaitingForPlayers>(this);
+                });
+            GameState::GameStateRequests::AddGameStateFactoryOverrideForType<GameStatePreparingMatch>([this]()
+                {
+                    return AZStd::make_shared<GameStatePreparingMatch>(this);
+                });
+            GameState::GameStateRequests::AddGameStateFactoryOverrideForType<GameStateMatchInProgress>([this]()
+                {
+                    return AZStd::make_shared<GameStateMatchInProgress>(this);
+                });
+
+            GameState::GameStateRequests::AddGameStateFactoryOverrideForType<GameStateMatchEnded>([this]()
+                {
+                    return AZStd::make_shared<GameStateMatchEnded>(this);
+                });
 
-        GameState::GameStateRequests::CreateAndPushNewOverridableGameStateOfType<GameStateWaitingForPlayers>();
+            GameState::GameStateRequests::CreateAndPushNewOverridableGameStateOfType<GameStateWaitingForPlayers>();
+        #endif
 
         PlayerMatchLifecycleBus::Handler::BusConnect();
     }
@@ -242,13 +253,14 @@ namespace MultiplayerSample
     {
         PlayerMatchLifecycleBus::Handler::BusDisconnect();
 
+#if AZ_TRAIT_SERVER
         GameState::GameStateRequestBus::Broadcast(&GameState::GameStateRequestBus::Events::PopAllGameStates);
 
         GameState::GameStateRequests::RemoveGameStateFactoryOverrideForType<GameStateWaitingForPlayers>();
         GameState::GameStateRequests::RemoveGameStateFactoryOverrideForType<GameStatePreparingMatch>();
         GameState::GameStateRequests::RemoveGameStateFactoryOverrideForType<GameStateMatchInProgress>();
         GameState::GameStateRequests::RemoveGameStateFactoryOverrideForType<GameStateMatchEnded>();
-#if AZ_TRAIT_SERVER
+
         m_roundTickEvent.RemoveFromQueue();
         m_restTickEvent.RemoveFromQueue();
 #endif

+ 4 - 0
Gem/Code/Source/Components/NetworkMatchComponent.h

@@ -65,6 +65,8 @@ namespace MultiplayerSample
         //! Adds an event handler to the round number rest remaining AZ::Event
         //! @param handler the handler to add the the requested component event
         virtual void AddRoundRestTimeRemainingEventHandler(AZ::Event<RoundTimeSec>::Handler& handler) = 0;
+
+        virtual float GetRestDurationBetweenMatches() const = 0;
     };
 
 
@@ -102,6 +104,8 @@ namespace MultiplayerSample
         void AddRoundNumberEventHandler(AZ::Event<uint16_t>::Handler& handler) override;
         void AddRoundTimeRemainingEventHandler(AZ::Event<RoundTimeSec>::Handler& handler) override;
         void AddRoundRestTimeRemainingEventHandler(AZ::Event<RoundTimeSec>::Handler& handler) override;
+        float GetRestDurationBetweenMatches() const override;
+
         //! @}
 
 #if AZ_TRAIT_SERVER

+ 1 - 1
Gem/Code/Source/Components/UI/UiGameOverComponent.cpp

@@ -74,7 +74,7 @@ namespace MultiplayerSample
     {
         if (enabled)
         {
-            m_secondsRemainingUntilNewMatch = RestSecondsBetweenMatches;
+            m_secondsRemainingUntilNewMatch = aznumeric_cast<uint16_t>(AZStd::floor(AZ::Interface<INetworkMatch>::Get()->GetRestDurationBetweenMatches()));
             DisplaySecondsRemainingUI(m_secondsRemainingUntilNewMatch);
             m_onSecondsRemainingChanged.Enqueue(AZ::TimeMs{ 1000 }, true);
         }

+ 0 - 2
Gem/Code/Source/Components/UI/UiGameOverComponent.h

@@ -20,8 +20,6 @@ namespace MultiplayerSample
         , public UiGameOverBus::Handler
     {
     public:
-        static constexpr uint16_t RestSecondsBetweenMatches = 5;
-
         AZ_COMPONENT(UiGameOverComponent, "{37a2de13-a8fa-4ee1-8652-e17253137f62}");
 
         static void Reflect(AZ::ReflectContext* context);

+ 5 - 15
Gem/Code/Source/GameState/GameStateMatchEnded.cpp

@@ -9,23 +9,19 @@
 #include <GameState/GameStateRequestBus.h>
 #include <Source/GameState/GameStateMatchEnded.h>
 #include <Source/GameState/GameStatePreparingMatch.h>
+#include <AzCore/Time/ITime.h>
 
 namespace MultiplayerSample
 {    
     GameStateMatchEnded::GameStateMatchEnded([[maybe_unused]] NetworkMatchComponentController* controller)
     {
-#if AZ_TRAIT_SERVER
         m_controller = controller;	    
-#endif	    
     }
 
     void GameStateMatchEnded::OnEnter()
     {
-#if AZ_TRAIT_SERVER
         m_controller->EndMatch();
-#endif
-        m_finishingTime = AZ::TimeMs{ 3000 };
-        m_finishingEvent.Enqueue(AZ::Time::ZeroTimeMs, true);
+        m_finishingEvent.Enqueue(AZ::SecondsToTimeMs(m_controller->GetRestDurationBetweenMatches()));
 
         GameplayEffectsNotificationBus::Broadcast(&GameplayEffectsNotificationBus::Events::OnEffect, SoundEffect::GameEnd);
     }
@@ -35,15 +31,9 @@ namespace MultiplayerSample
         m_finishingEvent.RemoveFromQueue();
     }
 
-    void GameStateMatchEnded::OnFinishedMatchTick()
+    void GameStateMatchEnded::OnFinishedMatch()
     {
-        m_finishingTime -= m_finishingEvent.TimeInQueueMs();
-        if (m_finishingTime <= AZ::Time::ZeroTimeMs)
-        {
-            m_finishingEvent.RemoveFromQueue();
-
-            const auto state = GameState::GameStateRequests::CreateNewOverridableGameStateOfType<GameStatePreparingMatch>();
-            GameState::GameStateRequestBus::Broadcast(&GameState::GameStateRequestBus::Events::ReplaceActiveGameState, state);
-        }
+        const auto state = GameState::GameStateRequests::CreateNewOverridableGameStateOfType<GameStatePreparingMatch>();
+        GameState::GameStateRequestBus::Broadcast(&GameState::GameStateRequestBus::Events::ReplaceActiveGameState, state);
     }
 }

+ 2 - 5
Gem/Code/Source/GameState/GameStateMatchEnded.h

@@ -29,15 +29,12 @@ namespace MultiplayerSample
         //! }@
 
     private:
-#if AZ_TRAIT_SERVER
         NetworkMatchComponentController* m_controller = nullptr;
-#endif
-        AZ::TimeMs m_finishingTime = AZ::Time::ZeroTimeMs;
 
-        void OnFinishedMatchTick();
+        void OnFinishedMatch();
         AZ::ScheduledEvent m_finishingEvent{ [this]()
         {
-            OnFinishedMatchTick();
+            OnFinishedMatch();
         }, AZ::Name("GameStateMatchEnded") };
     };
 }

+ 0 - 9
Gem/Code/multiplayersample_files.cmake

@@ -76,15 +76,6 @@ set(FILES
     Source/Components/RpcTesterComponent.cpp
     Source/Components/RpcTesterComponent.h
 
-    Source/GameState/GameStateMatchEnded.h
-    Source/GameState/GameStateMatchEnded.cpp
-    Source/GameState/GameStateMatchInProgress.h
-    Source/GameState/GameStateMatchInProgress.cpp
-    Source/GameState/GameStatePreparingMatch.h
-    Source/GameState/GameStatePreparingMatch.cpp
-    Source/GameState/GameStateWaitingForPlayers.h
-    Source/GameState/GameStateWaitingForPlayers.cpp
-
     Source/Weapons/BaseWeapon.cpp
     Source/Weapons/BaseWeapon.h
     Source/Weapons/IWeapon.h

+ 17 - 0
Gem/Code/multiplayersample_server_files.cmake

@@ -0,0 +1,17 @@
+#
+# Copyright (c) Contributors to the Open 3D Engine Project
+#
+# SPDX-License-Identifier: Apache-2.0 OR MIT
+#
+#
+
+set(FILES
+    Source/GameState/GameStateMatchInProgress.h
+    Source/GameState/GameStateMatchInProgress.cpp
+    Source/GameState/GameStatePreparingMatch.h
+    Source/GameState/GameStatePreparingMatch.cpp
+    Source/GameState/GameStateWaitingForPlayers.h
+    Source/GameState/GameStateWaitingForPlayers.cpp
+    Source/GameState/GameStateMatchEnded.cpp
+    Source/GameState/GameStateMatchEnded.h
+)

Разлика између датотеке није приказан због своје велике величине
+ 1004 - 174
UICanvases/BasicHUD.uicanvas


Неке датотеке нису приказане због велике количине промена