diff --git a/Assets/GameScripts/HotFix/GameLogic/GameApp.cs b/Assets/GameScripts/HotFix/GameLogic/GameApp.cs index ca677c6f..e5afc831 100644 --- a/Assets/GameScripts/HotFix/GameLogic/GameApp.cs +++ b/Assets/GameScripts/HotFix/GameLogic/GameApp.cs @@ -24,6 +24,7 @@ public partial class GameApp:Singleton 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 partial class GameApp:Singleton /// private void StartGameLogic() { - + } /// diff --git a/Assets/GameScripts/HotFix/GameLogic/OnEnterGameAppProcedure.cs b/Assets/GameScripts/HotFix/GameLogic/OnEnterGameAppProcedure.cs new file mode 100644 index 00000000..ececd72f --- /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 00000000..3f320c2b --- /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 d8643f57..a2991ff2 100644 --- a/Assets/GameScripts/Main/Procedure/ProcedureLoadAssembly.cs +++ b/Assets/GameScripts/Main/Procedure/ProcedureLoadAssembly.cs @@ -116,6 +116,7 @@ namespace GameMain 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 @@ namespace GameMain } 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 b1d79461..4e9b7bde 100644 --- a/Assets/TEngine/Runtime/GameFramework/Procedure/ProcedureModule.cs +++ b/Assets/TEngine/Runtime/GameFramework/Procedure/ProcedureModule.cs @@ -13,11 +13,9 @@ namespace TEngine 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 @@ namespace TEngine { return null; } + return m_ProcedureManager.CurrentProcedure; } } @@ -45,6 +44,7 @@ namespace TEngine { return 0f; } + return m_ProcedureManager.CurrentProcedureTime; } } @@ -140,5 +140,31 @@ namespace TEngine { 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