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();//整个游戏生命周期最多有一次
|
}
|
|
/// <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();
|
}
|
|
[XLua.LuaCallCSharp]
|
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<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<TreasureModel>();
|
RegisterModel<DailyQuestModel>();
|
RegisterModel<FairyLeagueModel>();
|
RegisterModel<LoginModel>();
|
RegisterModel<HeavenBattleModel>();
|
RegisterModel<WingsRedDotModel>();
|
RegisterModel<TeamModel>();
|
RegisterModel<BossHomeModel>();
|
RegisterModel<RealmModel>();
|
RegisterModel<RankModel>();
|
RegisterModel<MapModel>();
|
RegisterModel<DungeonLiquidModel>();
|
RegisterModel<FindPreciousModel>();
|
RegisterModel<VipModel>();
|
RegisterModel<SignInModel>();
|
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<OSTimeLimitGiftModel>();
|
RegisterModel<FirstTimeRechargeModel>();
|
RegisterModel<SetPrivateModel>();
|
RegisterModel<RidingAndPetActivationModel>();
|
RegisterModel<GMNotify>();
|
RegisterModel<LoginAdModel>();
|
RegisterModel<CoinTaskTipModel>();
|
RegisterModel<BossRebornModel>();
|
RegisterModel<NeedForWhiteModel>();
|
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<FBHelpPointExchageModel>();
|
RegisterModel<IceCrystalVeinModel>();
|
RegisterModel<DungeonAssistModel>();
|
RegisterModel<MysticalPurchaseModel>();
|
RegisterModel<FuncSwitchModel>();
|
RegisterModel<CrossServerOneVsOneModel>();
|
RegisterModel<CrossServerOneVsOneRewardModel>();
|
RegisterModel<GatheringSoulModel>();
|
RegisterModel<VirtualPackModel>();
|
RegisterModel<GatherSoulComposeModel>();
|
RegisterModel<GatherSoulDungeonModel>();
|
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>();
|
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(string name)
|
{
|
if (nameToModels.ContainsKey(name))
|
{
|
return nameToModels[name];
|
}
|
|
return null;
|
}
|
|
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;
|
}
|
|
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();
|
}
|
}
|
}
|
|
}
|
|
|
}
|
|