添加流程管理器
parent
3feca978f6
commit
b99d4df2cb
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a417fc0a3018aa842b6063d898d44411
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,13 @@
|
|||
using System;
|
||||
|
||||
namespace ZC
|
||||
{
|
||||
public interface IProcedure
|
||||
{
|
||||
ProcedureType procedureType { get; }
|
||||
void Init();
|
||||
void OnEnter();
|
||||
void OnUpdate(float dateTime);
|
||||
void OnLeave();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 9f2b91c9316244849faa0d4f168cbc7e
|
||||
timeCreated: 1712130599
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: fb2f9fcc16a44d4cb389d7a19b16d758
|
||||
timeCreated: 1712382042
|
|
@ -0,0 +1,65 @@
|
|||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using ZGame;
|
||||
|
||||
namespace ZC
|
||||
{
|
||||
[Procedure(ProcedureType.GameSceneLogicProcedure)]
|
||||
class GameSceneLogicProcedure : ProcedureBase
|
||||
{
|
||||
private Dictionary<string, List<GameObject>> dic = new Dictionary<string, List<GameObject>>();
|
||||
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>() { 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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: cf5a711399ac4bc19ef745cf5811680f
|
||||
timeCreated: 1719555722
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2447a05f6e1b45ec8ad5ad14a079ea95
|
||||
timeCreated: 1712134175
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 51afbf213c614f14aab69723edd5e136
|
||||
timeCreated: 1712242973
|
|
@ -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<ProcedureType>(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()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1d9dc4beeffa4c0694df15db53ae4125
|
||||
timeCreated: 1712132542
|
|
@ -0,0 +1,99 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ZC
|
||||
{
|
||||
public interface IProcedureManager
|
||||
{
|
||||
// void StartProcedure<T>() where T : IProcedure;
|
||||
void StartProcedure(ProcedureType procedureType);
|
||||
|
||||
// void ChangeProcedure<T>();
|
||||
void ChangeProcedure(ProcedureType procedureType);
|
||||
|
||||
IProcedure GetProcedure(ProcedureType procedureType);
|
||||
}
|
||||
|
||||
internal class ProcedureManager : ManagerBase<ProcedureManager>, IProcedureManager
|
||||
{
|
||||
private Dictionary<ProcedureType, IProcedure> _procedures = new Dictionary<ProcedureType, IProcedure>();
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: b10aa4c32af342c694cfde07d1251365
|
||||
timeCreated: 1712132397
|
|
@ -0,0 +1,14 @@
|
|||
namespace ZC
|
||||
{
|
||||
public enum ProcedureType
|
||||
{
|
||||
LoadingGameSceneProcedure,
|
||||
GameSceneLogicProcedure,
|
||||
|
||||
// ZKMY
|
||||
// StartSceneLogicProcedure,
|
||||
// THYZSceneLogicProcedure,
|
||||
// GSJSceneLogicProcedure,
|
||||
// ModelSceneLogicProcedure // 模型展示流程(此流程对应一个场景,该场景里面展示所有的模型,每个模型需要展示的时候自行调用)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 23581277df974da1bae013af24dedd2f
|
||||
timeCreated: 1712137086
|
Loading…
Reference in New Issue