using UnityEngine; using System.Collections; using System.Collections.Generic; using System; using vnxbqy.UI; namespace vnxbqy.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(); } 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(); 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(Type type) { Model model = null; var token = type.MetadataToken; if (models.ContainsKey(token)) { model = models[token]; } else { model = RegisterModel(type); } return model; } public Model GetModel(string name) { if (nameToModels.ContainsKey(name)) { return nameToModels[name]; } return null; } Model RegisterModel(Type type) { Model model = null; var token = type.MetadataToken; var name = type.Name; if (!models.ContainsKey(token)) { model = (Model)System.Activator.CreateInstance(type); models[token] = model; nameToModels[name] = model; model.Init(); } return model; } 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; } // 此处加try的原因是 遇不报错的情况 void OnBeforePlayerDataInitialize() { #if UNITY_EDITOR try { #endif foreach (var model in models.Values) { var beforePlayerDataInitialize = model as IBeforePlayerDataInitialize; if (beforePlayerDataInitialize != null) { beforePlayerDataInitialize.OnBeforePlayerDataInitialize(); } } #if UNITY_EDITOR } catch (Exception e) { Debug.LogError(e); } #endif } void OnAfterPlayerDataInitialize() { #if UNITY_EDITOR try { #endif foreach (var model in models.Values) { var afterPlayerDataInitialize = model as IAfterPlayerDataInitialize; if (afterPlayerDataInitialize != null) { afterPlayerDataInitialize.OnAfterPlayerDataInitialize(); } } #if UNITY_EDITOR } catch (Exception e) { Debug.LogError(e); } #endif } void OnPlayerLoginOk() { #if UNITY_EDITOR try { #endif foreach (var model in models.Values) { var playerLoginOk = model as IPlayerLoginOk; if (playerLoginOk != null) { playerLoginOk.OnPlayerLoginOk(); } } #if UNITY_EDITOR } catch (Exception e) { Debug.LogError(e); } #endif } void OnMapInitOk() { #if UNITY_EDITOR try { #endif foreach (var model in models.Values) { var mapInitOk = model as IMapInitOk; if (mapInitOk != null) { mapInitOk.OnMapInitOk(); } } #if UNITY_EDITOR } catch (Exception e) { Debug.LogError(e); } #endif } void OnAccountSwitch() { #if UNITY_EDITOR try { #endif foreach (var model in models.Values) { var switchAccount = model as ISwitchAccount; if (switchAccount != null) { switchAccount.OnSwitchAccount(); } } #if UNITY_EDITOR } catch (Exception e) { Debug.LogError(e); } #endif } } }