From 04a43a3f11e92c1705ab43e54b899632e3e9c943 Mon Sep 17 00:00:00 2001 From: ALEXTANG <574809918@qq.com> Date: Sat, 26 Aug 2023 11:08:46 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E9=87=8D=E5=90=AF=E6=B5=81?= =?UTF-8?q?=E7=A8=8BProcedure=E6=8E=A5=E5=8F=A3=E3=80=822.=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=BF=9B=E5=85=A5=E7=83=AD=E6=9B=B4=E5=9F=9F=E5=90=8E?= =?UTF-8?q?=E7=9A=84=E6=B5=81=E7=A8=8BProcedure=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.增加重启流程Procedure接口。2.增加进入热更域后的流程Procedure。 --- .../GameScripts/HotFix/GameLogic/GameApp.cs | 3 +- .../GameLogic/OnEnterGameAppProcedure.cs | 13 +++++++ .../GameLogic/OnEnterGameAppProcedure.cs.meta | 3 ++ .../Main/Procedure/ProcedureLoadAssembly.cs | 2 +- .../Procedure/ProcedureModule.cs | 36 ++++++++++++++++--- 5 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 Assets/GameScripts/HotFix/GameLogic/OnEnterGameAppProcedure.cs create mode 100644 Assets/GameScripts/HotFix/GameLogic/OnEnterGameAppProcedure.cs.meta diff --git a/Assets/GameScripts/HotFix/GameLogic/GameApp.cs b/Assets/GameScripts/HotFix/GameLogic/GameApp.cs index ca677c6f9..e5afc8318 100644 --- a/Assets/GameScripts/HotFix/GameLogic/GameApp.cs +++ b/Assets/GameScripts/HotFix/GameLogic/GameApp.cs @@ -24,6 +24,7 @@ public static void Entrance(object[] objects) Utility.Unity.AddDestroyListener(Instance.OnDestroy); Utility.Unity.AddOnDrawGizmosListener(Instance.OnDrawGizmos); Utility.Unity.AddOnApplicationPauseListener(Instance.OnApplicationPause); + GameModule.Procedure.RestartProcedure(new GameLogic.OnEnterGameAppProcedure()); Instance.StartGameLogic(); } @@ -33,7 +34,7 @@ public static void Entrance(object[] objects) /// private void StartGameLogic() { - + } /// diff --git a/Assets/GameScripts/HotFix/GameLogic/OnEnterGameAppProcedure.cs b/Assets/GameScripts/HotFix/GameLogic/OnEnterGameAppProcedure.cs new file mode 100644 index 000000000..ececd72fa --- /dev/null +++ b/Assets/GameScripts/HotFix/GameLogic/OnEnterGameAppProcedure.cs @@ -0,0 +1,13 @@ +using TEngine; + +namespace GameLogic +{ + public class OnEnterGameAppProcedure : ProcedureBase + { + protected override void OnEnter(IFsm procedureOwner) + { + base.OnEnter(procedureOwner); + Log.Debug("OnEnter GameApp Procedure"); + } + } +} \ No newline at end of file diff --git a/Assets/GameScripts/HotFix/GameLogic/OnEnterGameAppProcedure.cs.meta b/Assets/GameScripts/HotFix/GameLogic/OnEnterGameAppProcedure.cs.meta new file mode 100644 index 000000000..3f320c2ba --- /dev/null +++ b/Assets/GameScripts/HotFix/GameLogic/OnEnterGameAppProcedure.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 415b43b274b541a0a2312417644452b0 +timeCreated: 1692956662 \ No newline at end of file diff --git a/Assets/GameScripts/Main/Procedure/ProcedureLoadAssembly.cs b/Assets/GameScripts/Main/Procedure/ProcedureLoadAssembly.cs index d8643f571..a2991ff24 100644 --- a/Assets/GameScripts/Main/Procedure/ProcedureLoadAssembly.cs +++ b/Assets/GameScripts/Main/Procedure/ProcedureLoadAssembly.cs @@ -116,6 +116,7 @@ protected override void OnUpdate(IFsm procedureOwner, float e private void AllAssemblyLoadComplete() { + ChangeState(m_procedureOwner); #if UNITY_EDITOR m_MainLogicAssembly = AppDomain.CurrentDomain.GetAssemblies(). First(assembly => $"{assembly.GetName().Name}.dll" == SettingsUtils.HybridCLRCustomGlobalSettings.LogicMainDllName); @@ -139,7 +140,6 @@ private void AllAssemblyLoadComplete() } object[] objects = new object[] { new object[] { m_HotfixAssemblys } }; entryMethod.Invoke(appType, objects); - ChangeState(m_procedureOwner); } private Assembly GetMainLogicAssembly() diff --git a/Assets/TEngine/Runtime/GameFramework/Procedure/ProcedureModule.cs b/Assets/TEngine/Runtime/GameFramework/Procedure/ProcedureModule.cs index b1d79461a..4e9b7bde2 100644 --- a/Assets/TEngine/Runtime/GameFramework/Procedure/ProcedureModule.cs +++ b/Assets/TEngine/Runtime/GameFramework/Procedure/ProcedureModule.cs @@ -13,11 +13,9 @@ public sealed class ProcedureModule : GameFrameworkModuleBase private IProcedureManager m_ProcedureManager = null; private ProcedureBase m_EntranceProcedure = null; - [SerializeField] - private string[] m_AvailableProcedureTypeNames = null; + [SerializeField] private string[] m_AvailableProcedureTypeNames = null; - [SerializeField] - private string m_EntranceProcedureTypeName = null; + [SerializeField] private string m_EntranceProcedureTypeName = null; /// /// 获取当前流程。 @@ -30,6 +28,7 @@ public ProcedureBase CurrentProcedure { return null; } + return m_ProcedureManager.CurrentProcedure; } } @@ -45,6 +44,7 @@ public float CurrentProcedureTime { return 0f; } + return m_ProcedureManager.CurrentProcedureTime; } } @@ -140,5 +140,31 @@ public ProcedureBase GetProcedure(Type procedureType) { return m_ProcedureManager.GetProcedure(procedureType); } + + /// + /// 重启流程。 + /// 默认使用第一个流程作为启动流程。 + /// + /// 新的的流程。 + /// 是否重启成功。 + /// 重启异常。 + public bool RestartProcedure(params ProcedureBase[] procedures) + { + if (procedures == null || procedures.Length <= 0) + { + throw new GameFrameworkException("RestartProcedure Failed procedures is invalid."); + } + + if (!GameModule.Fsm.DestroyFsm()) + { + return false; + } + m_ProcedureManager = null; + m_ProcedureManager = GameFrameworkModuleSystem.GetModule(); + IFsmManager fsmManager = GameFrameworkModuleSystem.GetModule(); + m_ProcedureManager.Initialize(fsmManager, procedures); + m_ProcedureManager.StartProcedure(procedures[0].GetType()); + return true; + } } -} +} \ No newline at end of file