using UnityEngine; using System.Collections; using System.Collections.Generic; using System; using Snxxz.UI; namespace Snxxz.UI { public abstract class Model { public Model() { } public abstract void Init(); //整个游戏生命周期只有一次 public abstract void UnInit();//整个游戏生命周期最多有一次 } /// /// 玩家数据初始化(0102)之前调用 /// public interface IBeforePlayerDataInitialize { void OnBeforePlayerDataInitialize(); } /// /// 玩家数据初始化(0102)之后调用 /// public interface IAfterPlayerDataInitialize { void OnAfterPlayerDataInitialize(); } /// /// 玩家登录流程全部ok调用 /// public interface IPlayerLoginOk { void OnPlayerLoginOk(); } public interface IMapInitOk { void OnMapInitOk(); } public interface ISwitchAccount { void OnSwitchAccount(); } [XLua.LuaCallCSharp] public class ModelCenter : Singleton { bool inited = false; Dictionary models = new Dictionary(); Dictionary nameToModels = new Dictionary(); public ModelCenter() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; DTC0102_tagCDBPlayer.switchAccountEvent += OnAccountSwitch; DTC0102_tagCDBPlayer.afterPlayerDataInitializeEvent += OnAfterPlayerDataInitialize; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk; DTC0403_tagPlayerLoginLoadOK.mapInitOkEvent += OnMapInitOk; } public void Init() { if (inited) { return; } if (VersionConfig.Get().debugVersion) { RegisterModel(); } RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); RegisterModel(); inited = true; } public T GetModel() where T : Model, new() { T model = null; var token = typeof(T).MetadataToken; if (models.ContainsKey(token)) { model = models[token] as T; } else { model = RegisterModel(); } return model; } public Model GetModel(string name) { if (nameToModels.ContainsKey(name)) { return nameToModels[name]; } return null; } T RegisterModel() where T : Model, new() { T model = null; var token = typeof(T).MetadataToken; var name = typeof(T).Name; if (!models.ContainsKey(token)) { model = new T(); models[token] = model; nameToModels[name] = model; model.Init(); } return model; } void OnBeforePlayerDataInitialize() { foreach (var model in models.Values) { var beforePlayerDataInitialize = model as IBeforePlayerDataInitialize; if (beforePlayerDataInitialize != null) { beforePlayerDataInitialize.OnBeforePlayerDataInitialize(); } } } void OnAfterPlayerDataInitialize() { foreach (var model in models.Values) { var afterPlayerDataInitialize = model as IAfterPlayerDataInitialize; if (afterPlayerDataInitialize != null) { afterPlayerDataInitialize.OnAfterPlayerDataInitialize(); } } } void OnPlayerLoginOk() { foreach (var model in models.Values) { var playerLoginOk = model as IPlayerLoginOk; if (playerLoginOk != null) { playerLoginOk.OnPlayerLoginOk(); } } } void OnMapInitOk() { foreach (var model in models.Values) { var mapInitOk = model as IMapInitOk; if (mapInitOk != null) { mapInitOk.OnMapInitOk(); } } } void OnAccountSwitch() { foreach (var model in models.Values) { var switchAccount = model as ISwitchAccount; if (switchAccount != null) { switchAccount.OnSwitchAccount(); } } } } }