// // GameApp.cs // Create: // 2019-10-29 // Description: // 插件实现基类, 管理插件所支配的模块。 // Author: // 薛林强 <545626463@qq.com> // // Copyright (c) 2026 虚幻骑士科技 using UnityEngine; using System.Collections; using System.Collections.Generic; using System; namespace Skyunion { public class Plugin : Module, IPlugin { protected string mName; protected Dictionary mModules = new Dictionary(); protected List mModuleList = new List(); public void AddModule(string name, IModule module) { mPluginManager.AddModule(name, module); mModules.Add(name, module); mModuleList.Add(module); } public void AddModule(IModule module) { string strName = typeof(T1).ToString(); mPluginManager.AddModule(strName, module); mModules.Add(strName, module); mModuleList.Add(module); } public void RemoveModule() { string strName = typeof(T1).ToString(); IModule module; if (mModules.TryGetValue(strName, out module)) { mPluginManager.RemoveModule(strName); mModules.Remove(strName); mModuleList.Remove(module); } } public Plugin(string name) { mName = name; } #region 实现 IModule public override void BeforeInit() { for(int i = 0; i < mModuleList.Count; i++) { var module = mModuleList[i]; if (module != null) { module.BeforeInit(); } } } public override void Init() { if(mModules.Count == 0) { OnInitialized(); return; } for (int i = 0; i < mModuleList.Count; i++) { var module = mModuleList[i]; if (module != null) { module.Init(); module.WaitInitAsync(() => { mLoadedCount++; if (mLoadedCount == mModules.Count) { OnInitialized(); } }); } } } public override void AfterInit() { for (int i = 0; i < mModuleList.Count; i++) { var module = mModuleList[i]; if (module != null) { module.AfterInit(); } } } public override void Update() { for (int i = 0; i < mModuleList.Count; i++) { var module = mModuleList[i]; if (module != null && module.Initialized()) { module.Update(); } } } public override void LateUpdate() { for (int i = 0; i < mModuleList.Count; i++) { var module = mModuleList[i]; if (module != null && module.Initialized()) { module.LateUpdate(); } } } public override void BeforeShut() { for (int i = 0; i < mModuleList.Count; i++) { var module = mModuleList[i]; if (module != null) { module.BeforeShut(); } } } public override void Shut() { for (int i = 0; i < mModuleList.Count; i++) { var module = mModuleList[i]; if (module != null) { module.Shut(); } } } #endregion 实现 IModule #region 实现 IPlugin public virtual string GetPluginName() { return mName; } public virtual void OnAddModule() { } public void Install() { OnAddModule(); } public void Uninstall() { foreach (var name in mModules.Keys) { mPluginManager.RemoveModule(name); } mModules.Clear(); mModuleList.Clear(); } #endregion 实现 IPlugin }; }