From b99d4df2cb5df4bc43b3033205f5229aaccf5fbd Mon Sep 17 00:00:00 2001 From: zhangxl <1062808664@qq.com> Date: Fri, 19 Jul 2024 10:52:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B5=81=E7=A8=8B=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DemoGame/GameScript/Hotfix/Procedure.meta | 8 ++ .../GameScript/Hotfix/Procedure/IProcedure.cs | 13 +++ .../Hotfix/Procedure/IProcedure.cs.meta | 3 + .../GameScript/Hotfix/Procedure/Logic.meta | 3 + .../Logic/GameSceneLogicProcedure.cs | 65 ++++++++++++ .../Logic/GameSceneLogicProcedure.cs.meta | 3 + .../Logic/LoadingGameSceneProcedure.cs | 27 +++++ .../Logic/LoadingGameSceneProcedure.cs.meta | 3 + .../Hotfix/Procedure/ProcedureAttribute.cs | 15 +++ .../Procedure/ProcedureAttribute.cs.meta | 3 + .../Hotfix/Procedure/ProcedureBase.cs | 36 +++++++ .../Hotfix/Procedure/ProcedureBase.cs.meta | 3 + .../Hotfix/Procedure/ProcedureManager.cs | 99 +++++++++++++++++++ .../Hotfix/Procedure/ProcedureManager.cs.meta | 3 + .../Hotfix/Procedure/ProcedureType.cs | 14 +++ .../Hotfix/Procedure/ProcedureType.cs.meta | 3 + 16 files changed, 301 insertions(+) create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure.meta create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/IProcedure.cs create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/IProcedure.cs.meta create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/Logic.meta create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/GameSceneLogicProcedure.cs create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/GameSceneLogicProcedure.cs.meta create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/LoadingGameSceneProcedure.cs create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/LoadingGameSceneProcedure.cs.meta create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureAttribute.cs create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureAttribute.cs.meta create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureBase.cs create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureBase.cs.meta create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureManager.cs create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureManager.cs.meta create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureType.cs create mode 100644 Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureType.cs.meta diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure.meta b/Assets/DemoGame/GameScript/Hotfix/Procedure.meta new file mode 100644 index 0000000..d388836 --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a417fc0a3018aa842b6063d898d44411 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/IProcedure.cs b/Assets/DemoGame/GameScript/Hotfix/Procedure/IProcedure.cs new file mode 100644 index 0000000..2a35c5c --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/IProcedure.cs @@ -0,0 +1,13 @@ +using System; + +namespace ZC +{ + public interface IProcedure + { + ProcedureType procedureType { get; } + void Init(); + void OnEnter(); + void OnUpdate(float dateTime); + void OnLeave(); + } +} \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/IProcedure.cs.meta b/Assets/DemoGame/GameScript/Hotfix/Procedure/IProcedure.cs.meta new file mode 100644 index 0000000..688cee2 --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/IProcedure.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9f2b91c9316244849faa0d4f168cbc7e +timeCreated: 1712130599 \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic.meta b/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic.meta new file mode 100644 index 0000000..eba8127 --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fb2f9fcc16a44d4cb389d7a19b16d758 +timeCreated: 1712382042 \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/GameSceneLogicProcedure.cs b/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/GameSceneLogicProcedure.cs new file mode 100644 index 0000000..a00d320 --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/GameSceneLogicProcedure.cs @@ -0,0 +1,65 @@ +using System.Collections.Generic; +using UnityEngine; +using ZGame; + +namespace ZC +{ + [Procedure(ProcedureType.GameSceneLogicProcedure)] + class GameSceneLogicProcedure : ProcedureBase + { + private Dictionary> dic = new Dictionary>(); + TestZhongLi testZhongLi; + + public override void Init() + { + base.Init(); + EventManager.Instance.Subscribe(LoadModelEventArgs.EventId, this.LoadModelEvent); + EventManager.Instance.Subscribe(DeleteModelEventArgs.EventId, this.DeleteModelEvent); + + testZhongLi = new TestZhongLi(); + ZCGame.ObjectManager.Add(testZhongLi); + } + + private void DeleteModelEvent(object sender, GameEventArgs e) + { + var args = e as DeleteModelEventArgs; + if (this.dic.TryGetValue(args.modelName, out var list)) + { + GameObject.DestroyImmediate(list[0]); + list.RemoveAt(0); + } + } + + private void LoadModelEvent(object sender, GameEventArgs e) + { + var args = e as LoadModelEventArgs; + var gameObject = ResourcesLocalComponent.Instance.LoadGameObjectSync(args.modelName); + if (this.dic.TryGetValue(args.modelName, out var list)) + { + list.Add(gameObject); + } + else + { + this.dic[args.modelName] = new List() { gameObject }; + } + } + + public override void Dispose() + { + base.Dispose(); + EventManager.Instance.Unsubscribe(LoadModelEventArgs.EventId, this.LoadModelEvent); + EventManager.Instance.Unsubscribe(DeleteModelEventArgs.EventId, this.DeleteModelEvent); + ZCGame.ObjectManager.Remove(this.testZhongLi.Id); + } + + public override void OnEnter() + { + base.OnEnter(); + } + + public override void OnLeave() + { + base.OnLeave(); + } + } +} \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/GameSceneLogicProcedure.cs.meta b/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/GameSceneLogicProcedure.cs.meta new file mode 100644 index 0000000..f9cbd67 --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/GameSceneLogicProcedure.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cf5a711399ac4bc19ef745cf5811680f +timeCreated: 1719555722 \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/LoadingGameSceneProcedure.cs b/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/LoadingGameSceneProcedure.cs new file mode 100644 index 0000000..8456c89 --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/LoadingGameSceneProcedure.cs @@ -0,0 +1,27 @@ +using Cysharp.Threading.Tasks; +using UnityEngine; + +namespace ZC +{ + [Procedure(ProcedureType.LoadingGameSceneProcedure)] + class LoadingGameSceneProcedure : ProcedureBase + { + public override void OnEnter() + { + base.OnEnter(); + + UniTask.Create(async () => + { + await ResourcesLocalComponent.Instance.LoadSceneAsync(AssetsConst.Assets_DemoGame_GameRes_Scene_Game_unity); + var loadAssetAsync = await ResourcesLocalComponent.Instance.LoadAssetAndInsAsync(AssetsConst.Assets_DemoGame_GameRes_Entity_Cube_prefab); + Debug.Log("加载的是:" + loadAssetAsync); + ZCGame.ProcedureManager.ChangeProcedure(ProcedureType.GameSceneLogicProcedure); + }).Forget(); + } + + public override void OnLeave() + { + base.OnLeave(); + } + } +} \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/LoadingGameSceneProcedure.cs.meta b/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/LoadingGameSceneProcedure.cs.meta new file mode 100644 index 0000000..31164ea --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/Logic/LoadingGameSceneProcedure.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2447a05f6e1b45ec8ad5ad14a079ea95 +timeCreated: 1712134175 \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureAttribute.cs b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureAttribute.cs new file mode 100644 index 0000000..f752a5b --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace ZC +{ + [AttributeUsage(AttributeTargets.Class)] + class ProcedureAttribute: Attribute + { + public ProcedureType ProcedureType { get; set; } + + public ProcedureAttribute(ProcedureType type) + { + this.ProcedureType = type; + } + } +} \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureAttribute.cs.meta b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureAttribute.cs.meta new file mode 100644 index 0000000..189d53d --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 51afbf213c614f14aab69723edd5e136 +timeCreated: 1712242973 \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureBase.cs b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureBase.cs new file mode 100644 index 0000000..deaff7d --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureBase.cs @@ -0,0 +1,36 @@ +using System; +using UnityEngine; + +namespace ZC +{ + abstract class ProcedureBase : IProcedure + { + private ProcedureType _procedureType; + + public ProcedureType procedureType => this._procedureType; + + public virtual void Init() + { + var value = this.GetType().ToString().Split("."); + this._procedureType = Enum.Parse(value[^1]); + } + + public virtual void OnEnter() + { + Debug.Log($"Enter {procedureType} procedure !!!"); + } + + public virtual void OnUpdate(float dateTime) + { + } + + public virtual void OnLeave() + { + Debug.Log($"Leave {procedureType} procedure !!!"); + } + + public virtual void Dispose() + { + } + } +} \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureBase.cs.meta b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureBase.cs.meta new file mode 100644 index 0000000..3eeb567 --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1d9dc4beeffa4c0694df15db53ae4125 +timeCreated: 1712132542 \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureManager.cs b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureManager.cs new file mode 100644 index 0000000..a4a7372 --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureManager.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace ZC +{ + public interface IProcedureManager + { + // void StartProcedure() where T : IProcedure; + void StartProcedure(ProcedureType procedureType); + + // void ChangeProcedure(); + void ChangeProcedure(ProcedureType procedureType); + + IProcedure GetProcedure(ProcedureType procedureType); + } + + internal class ProcedureManager : ManagerBase, IProcedureManager + { + private Dictionary _procedures = new Dictionary(); + private IProcedure currentProcedure; + + public override void OnInit() + { + base.OnInit(); + + var types = new List<(Type, ProcedureAttribute)>(); + AssemblyManager.GetTypesInhertType(typeof(ProcedureBase), types); + foreach (var (type, procedureAttribute) in types) + { + var procedureType = procedureAttribute.ProcedureType; + _procedures.Add(procedureType, (IProcedure)Activator.CreateInstance(type, false)); + } + + foreach (var procedureBase in _procedures.Values) + { + procedureBase.Init(); + Debug.Log($"add procedure : {procedureBase.procedureType}"); + } + } + + public override void OnDispose() + { + base.OnDispose(); + _procedures = null; + } + + public void AddProcedure(ProcedureBase[] procedureBases) + { + foreach (var procedureBase in procedureBases) + { + procedureBase.Init(); + Debug.Log($"add procedure : {procedureBase.procedureType}"); + this._procedures.Add(procedureBase.procedureType, procedureBase); + } + } + + public override void OnUpdate(float dateTime) + { + base.OnUpdate(dateTime); + this.currentProcedure?.OnUpdate(dateTime); + } + + public void StartProcedure(ProcedureType procedureType) + { + if (this.currentProcedure != null) + this.currentProcedure.OnLeave(); + + if (this._procedures.TryGetValue(procedureType, out var procedure)) + { + this.currentProcedure = procedure; + this.currentProcedure.OnEnter(); + } + } + + public void ChangeProcedure(ProcedureType procedureType) + { + if (this.currentProcedure != null) + this.currentProcedure.OnLeave(); + + if (this._procedures.TryGetValue(procedureType, out var procedure)) + { + this.currentProcedure = procedure; + this.currentProcedure.OnEnter(); + } + } + + public IProcedure GetProcedure(ProcedureType procedureType) + { + if (this._procedures.TryGetValue(procedureType, out var procedure)) + { + return procedure; + } + + return null; + } + + } +} \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureManager.cs.meta b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureManager.cs.meta new file mode 100644 index 0000000..4a44c82 --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b10aa4c32af342c694cfde07d1251365 +timeCreated: 1712132397 \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureType.cs b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureType.cs new file mode 100644 index 0000000..556a85d --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureType.cs @@ -0,0 +1,14 @@ +namespace ZC +{ + public enum ProcedureType + { + LoadingGameSceneProcedure, + GameSceneLogicProcedure, + + // ZKMY +// StartSceneLogicProcedure, +// THYZSceneLogicProcedure, +// GSJSceneLogicProcedure, +// ModelSceneLogicProcedure // 模型展示流程(此流程对应一个场景,该场景里面展示所有的模型,每个模型需要展示的时候自行调用) + } +} \ No newline at end of file diff --git a/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureType.cs.meta b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureType.cs.meta new file mode 100644 index 0000000..789c31c --- /dev/null +++ b/Assets/DemoGame/GameScript/Hotfix/Procedure/ProcedureType.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 23581277df974da1bae013af24dedd2f +timeCreated: 1712137086 \ No newline at end of file