从ellan/GameFramework中合并新的工具
This commit is contained in:
108
Convention/[Architecture]/Architecture.cs
Normal file
108
Convention/[Architecture]/Architecture.cs
Normal file
@@ -0,0 +1,108 @@
|
||||
using Convention;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Convention.Experimental.PublicType;
|
||||
|
||||
namespace Convention.Experimental
|
||||
{
|
||||
public static class Architecture
|
||||
{
|
||||
private static readonly LinkedCacheList<GameModule> s_GameFrameworkModules = new();
|
||||
|
||||
/// <summary>
|
||||
/// <20><><EFBFBD><EFBFBD><see cref="GameModule"/>
|
||||
/// </summary>
|
||||
/// <param name="moduleType">Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><see cref="GameModule"/><3E><><EFBFBD><EFBFBD></param>
|
||||
/// <returns>Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><see cref="GameModule"/></returns>
|
||||
private static GameModule CreateModule(Type moduleType)
|
||||
{
|
||||
GameModule module = (GameModule)Activator.CreateInstance(moduleType);
|
||||
if (module == null)
|
||||
{
|
||||
throw new GameException($"Can not create module '{moduleType.FullName}'");
|
||||
}
|
||||
|
||||
LinkedListNode<GameModule> current = s_GameFrameworkModules.First;
|
||||
while (current != null)
|
||||
{
|
||||
if (module.Priority > current.Value.Priority)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
current = current.Next;
|
||||
}
|
||||
|
||||
if (current != null)
|
||||
{
|
||||
s_GameFrameworkModules.AddBefore(current, module);
|
||||
}
|
||||
else
|
||||
{
|
||||
s_GameFrameworkModules.AddLast(module);
|
||||
}
|
||||
|
||||
return module;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <20><>ȡ<see cref="GameModule"/>
|
||||
/// </summary>
|
||||
/// <param name="moduleType">Ҫ<><D2AA>ȡ<EFBFBD><C8A1><see cref="GameModule"/></param>
|
||||
/// <returns>Ҫ<><D2AA>ȡ<EFBFBD><C8A1><see cref="GameModule"/></returns>
|
||||
/// <remarks><3E><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><see cref="GameModule"/><3E><><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><see cref="GameModule"/>ʵ<><CAB5><EFBFBD><EFBFBD></remarks>
|
||||
private static GameModule GetModule(Type moduleType)
|
||||
{
|
||||
foreach (GameModule module in s_GameFrameworkModules)
|
||||
{
|
||||
if (module.GetType() == moduleType)
|
||||
{
|
||||
return module;
|
||||
}
|
||||
}
|
||||
|
||||
return CreateModule(moduleType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <20><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>ģ<EFBFBD>顣
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD></typeparam>
|
||||
/// <returns>Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>ģ<EFBFBD>顣</returns>
|
||||
/// <remarks><3E><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>ģ<EFBFBD>鲻<EFBFBD><E9B2BB><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>ģ<EFBFBD>顣</remarks>
|
||||
public static T GetModule<T>() where T : GameModule
|
||||
{
|
||||
return (T)GetModule(typeof(T));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <20>رղ<D8B1><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>ģ<EFBFBD>顣
|
||||
/// </summary>
|
||||
public static void Shutdown()
|
||||
{
|
||||
for (var current = s_GameFrameworkModules.Last; current != null; current = current.Previous)
|
||||
{
|
||||
current.Value.Shutdown();
|
||||
}
|
||||
|
||||
s_GameFrameworkModules.Clear();
|
||||
ReferencePool.ClearAll();
|
||||
Utility.Marshal.FreeCachedHGlobal();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF>
|
||||
/// </summary>
|
||||
/// <param name="elapseSeconds"><3E><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB></param>
|
||||
/// <param name="realElapseSeconds"><3E><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB></param>
|
||||
public static void Update(float elapseSeconds, float realElapseSeconds)
|
||||
{
|
||||
foreach (var module in s_GameFrameworkModules)
|
||||
{
|
||||
module.Update(elapseSeconds, realElapseSeconds);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user