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();//整个游戏生命周期最多有一次
|
}
|
|
/// <summary>
|
/// 玩家数据初始化(0102)之前调用
|
/// </summary>
|
public interface IBeforePlayerDataInitialize
|
{
|
void OnBeforePlayerDataInitialize();
|
}
|
|
/// <summary>
|
/// 玩家数据初始化(0102)之后调用
|
/// </summary>
|
public interface IAfterPlayerDataInitialize
|
{
|
void OnAfterPlayerDataInitialize();
|
}
|
|
/// <summary>
|
/// 玩家登录流程全部ok调用
|
/// </summary>
|
public interface IPlayerLoginOk
|
{
|
void OnPlayerLoginOk();
|
}
|
|
public interface IMapInitOk
|
{
|
void OnMapInitOk();
|
}
|
|
public interface ISwitchAccount
|
{
|
void OnSwitchAccount();
|
}
|
|
|
public class ModelCenter : Singleton<ModelCenter>
|
{
|
bool inited = false;
|
|
Dictionary<int, Model> models = new Dictionary<int, Model>();
|
Dictionary<string, Model> nameToModels = new Dictionary<string, Model>();
|
|
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<GMCmdModel>();
|
}
|
|
RegisterModel<LoginModel>();
|
RegisterModel<UnionTaskModel>();
|
RegisterModel<FriendsModel>();
|
RegisterModel<RoleParticularModel>();
|
RegisterModel<WorldBossModel>();
|
RegisterModel<RolePromoteModel>();
|
RegisterModel<HowToPlayModel>();
|
RegisterModel<PrayerModel>();
|
RegisterModel<ComposeWinModel>();
|
RegisterModel<PKModel>();
|
RegisterModel<AchievementModel>();
|
RegisterModel<FairyBossModel>();
|
RegisterModel<MagicianModel>();
|
RegisterModel<DungeonModel>();
|
RegisterModel<SelectEquipModel>();
|
RegisterModel<RoleModel>();
|
RegisterModel<RuneTowerModel>();
|
//RegisterModel<ElderGodAreaModel>();
|
RegisterModel<PersonalBossModel>();
|
RegisterModel<FairyModel>();
|
RegisterModel<SkillModel>();
|
RegisterModel<StoreModel>();
|
RegisterModel<CZBMModel>();
|
RegisterModel<TreasureModel>();
|
RegisterModel<DailyQuestModel>();
|
RegisterModel<FairyLeagueModel>();
|
RegisterModel<HeavenBattleModel>();
|
RegisterModel<WingsRedDotModel>();
|
RegisterModel<TeamModel>();
|
RegisterModel<BossHomeModel>();
|
RegisterModel<RealmModel>();
|
RegisterModel<RankModel>();
|
RegisterModel<MapModel>();
|
RegisterModel<DungeonLiquidModel>();
|
RegisterModel<FindPreciousModel>();
|
RegisterModel<VipModel>();
|
RegisterModel<SignInModel>();
|
RegisterModel<DayOnlineModel>();
|
RegisterModel<TitleModel>();
|
RegisterModel<KingFairyModel>();
|
RegisterModel<DemonJarModel>();
|
RegisterModel<BuffModel>();
|
RegisterModel<PetModel>();
|
RegisterModel<MountModel>();
|
RegisterModel<TaiChiModel>();
|
RegisterModel<StrengthenModel>();
|
RegisterModel<OffLineOnHookModel>();
|
RegisterModel<RuneComposeModel>();
|
RegisterModel<ItemOverdueModel>();
|
RegisterModel<NewGuideModel>();
|
RegisterModel<GuideMessageModel>();
|
RegisterModel<StoryHintModel>();
|
RegisterModel<GuideDialogueModel>();
|
RegisterModel<ResourcesBackModel>();
|
RegisterModel<PackModel>();
|
RegisterModel<ItemTipsModel>();
|
RegisterModel<ActivityModel>();
|
RegisterModel<PlayerDeadModel>();
|
RegisterModel<BetterEquipGetModel>();
|
RegisterModel<RealmBetterEquipModel>();
|
RegisterModel<PreciousItemGetModel>();
|
RegisterModel<PlayerMainDate>();
|
RegisterModel<StoryMissionsModel>();
|
RegisterModel<BoxGetItemModel>();
|
RegisterModel<RedPacketModel>();
|
RegisterModel<GuardModel>();
|
RegisterModel<PlayerMethodData>();
|
RegisterModel<ItemUseModel>();
|
RegisterModel<ImpactRankModel>();
|
RegisterModel<InSevenDayModel>();
|
RegisterModel<LevelGiftModel>();
|
RegisterModel<CapacityDelayModel>();
|
RegisterModel<TreasureEffectModel>();
|
RegisterModel<VipInvestModel>();
|
RegisterModel<ChatCenter>();
|
RegisterModel<HappyXBModel>();
|
RegisterModel<FairyJadeInvestmentModel>();
|
RegisterModel<OSRedEnvelopeModel>();
|
RegisterModel<RedEnvelopeModel>();
|
RegisterModel<TreasureFindHostModel>();
|
RegisterModel<OSGiftModel>();
|
RegisterModel<SuperUPGiftModel>();
|
RegisterModel<DaysAccumulateRechargeModel>();
|
RegisterModel<OSTimeLimitGiftModel>();
|
RegisterModel<FirstTimeRechargeModel>();
|
RegisterModel<SetPrivateModel>();
|
RegisterModel<RidingAndPetActivationModel>();
|
RegisterModel<GMNotify>();
|
RegisterModel<LoginAdModel>();
|
RegisterModel<CoinTaskTipModel>();
|
RegisterModel<BossRebornModel>();
|
RegisterModel<MultipleExpModel>();
|
RegisterModel<ConsumeRebateModel>();
|
RegisterModel<LimitedTimePackageItemClassModel>();
|
RegisterModel<FlashSaleModel>();
|
RegisterModel<FairylandCeremonyModel>();
|
RegisterModel<TrialDungeonModel>();
|
RegisterModel<ActivitiesPushModel>();
|
RegisterModel<MultipleRealmPointModel>();
|
RegisterModel<DogzModel>();
|
RegisterModel<GodBeastModel>();
|
RegisterModel<FeatureNoticeModel>();
|
RegisterModel<AwardExchangeModel>();
|
RegisterModel<WheelOfFortuneModel>();
|
RegisterModel<FlashRushToBuyModel>();
|
RegisterModel<TalentModel>();
|
RegisterModel<OpenServerActivityNotifyModel>();
|
RegisterModel<FairyFeastModel>();
|
RegisterModel<WishingPoolModel>();
|
RegisterModel<SocialModel>();
|
RegisterModel<ChatBubbleModel>();
|
RegisterModel<AccumulateRechargeModel>();
|
RegisterModel<MultiRechargeModel>();
|
RegisterModel<FBHelpPointExchageModel>();
|
RegisterModel<IceCrystalVeinModel>();
|
RegisterModel<DungeonAssistModel>();
|
RegisterModel<MysticalQGModel>();
|
RegisterModel<FuncSwitchModel>();
|
RegisterModel<CrossServerOneVsOneModel>();
|
RegisterModel<CrossServerOneVsOneRewardModel>();
|
RegisterModel<GatheringSoulModel>();
|
RegisterModel<VirtualPackModel>();
|
RegisterModel<KingTreasureModel>();
|
RegisterModel<CrossServerBossModel>();
|
RegisterModel<OpenServiceAchievementModel>();
|
RegisterModel<FashionDressModel>();
|
RegisterModel<LoginRewardModel>();
|
//RegisterModel<JadeDynastyBossModel>();
|
RegisterModel<SkyTowerModel>();
|
RegisterModel<FestivalRedpackModel>();
|
RegisterModel<NewYearFairylandCeremonyModel>();
|
RegisterModel<LuckyTreasureModel>();
|
RegisterModel<EquipModel>();
|
RegisterModel<EquipStarModel>();
|
RegisterModel<TreasureSkillModel>();
|
RegisterModel<EquipGemModel>();
|
RegisterModel<AuctionModel>();
|
RegisterModel<AllianceBossModel>();
|
RegisterModel<AuctionHelpModel>();
|
RegisterModel<EquipTrainModel>();
|
RegisterModel<EquipStrengthModel>();
|
RegisterModel<RuneModel>();
|
RegisterModel<RuneResolveModel>();
|
RegisterModel<ReikiRootModel>();
|
RegisterModel<AuctionNewGetShowModel>();
|
RegisterModel<DungeonNuwaModel>();
|
RegisterModel<HazyRegionModel>();
|
RegisterModel<HazyDemonKingModel>();
|
RegisterModel<HazyGrassModel>();
|
RegisterModel<DungeonUseBuffModel>();
|
RegisterModel<AlchemyModel>();
|
RegisterModel<OtherPlayerEquipModel>();
|
RegisterModel<TaskFeedbackModel>();
|
RegisterModel<MonthWeekInvestModel>();
|
RegisterModel<NewDropItemModel>();
|
//RegisterModel<ExchangeActiveTokenModel>();
|
RegisterModel<AddUpRechargeModel>();
|
RegisterModel<BossFirstBloodModel>();
|
RegisterModel<CollectWordsModel>();
|
|
RegisterModel<HolidayLoginModel>();
|
RegisterModel<HolidayWishPoolModel>();
|
RegisterModel<HolidayMultiRechargeModel>();
|
RegisterModel<HolidayTravelModel>();
|
RegisterModel<HolidayDaySumRechargeModel>();
|
RegisterModel<HolidayCollectWordsModel>();
|
RegisterModel<HolidayLimitedTimePackageModel>();
|
RegisterModel<HolidayFlashRushToBuyModel>();
|
RegisterModel<HolidayFlashSaleModel>();
|
RegisterModel<HolidayConsumeRebateModel>();
|
RegisterModel<FullServerRechargeRedpackModel>();
|
RegisterModel<BossTrialModel>();
|
RegisterModel<SingleRechargeSumModel>();
|
RegisterModel<FairyNewModel>();
|
RegisterModel<CrossServerModel>();
|
RegisterModel<LoginActModel>();
|
RegisterModel<MissionActModel>();
|
RegisterModel<RechargeGiftActModel>();
|
RegisterModel<BlessedLandModel>();
|
RegisterModel<FuyuanSumRechargeModel>();
|
RegisterModel<FamilyRechargeConnModel>();
|
RegisterModel<CommonDungeonSelectModel>();
|
RegisterModel<CustomizedGiftModel>();
|
RegisterModel<WorshipInfoListModel>();
|
RegisterModel<ExclusiveBenefitModel>();
|
RegisterModel<LoginZhanLingModel>();
|
RegisterModel<GatheringSoulZhanLingModel>();
|
RegisterModel<CrossServerGodBattleFieldAssortModel>();
|
RegisterModel<SecretPlaceXBModel>();
|
RegisterModel<CustomizedRechargeModel>();
|
RegisterModel<RechargeGiftAct31Model>();
|
RegisterModel<ZhanLingHBuyModel>();
|
RegisterModel<TreasurePavilionUpgradeChooseModel>();
|
RegisterModel<PetHorseActModel>();
|
RegisterModel<MountedPetZhanLingModel>();
|
RegisterModel<TreasurePavilionRankActModel>();
|
RegisterModel<ChooseItemsModel>();
|
RegisterModel<FairyEmblemModel>();
|
RegisterModel<PhantasmPavilionModel>();
|
RegisterModel<PhantasmPavilionZhanLingModel>();
|
RegisterModel<FairyAffinityModel>();
|
RegisterModel<FairyAffinityZhanLingModel>();
|
RegisterModel<FairyAffinityLoginActModel>();
|
RegisterModel<FairyAffinityMissionActModel>();
|
RegisterModel<FairyAffinityRechargeGiftActModel>();
|
RegisterModel<CycleHallActModel>();
|
inited = true;
|
}
|
|
public T GetModel<T>() where T : Model, new()
|
{
|
T model = null;
|
|
var token = typeof(T).MetadataToken;
|
if (models.ContainsKey(token))
|
{
|
model = models[token] as T;
|
}
|
else
|
{
|
model = RegisterModel<T>();
|
}
|
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<T>() 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
|
}
|
|
}
|
|
|
}
|
|