using UnityEngine; using ET; using static GFGGame.LauncherConfig; using System; using YooAsset; using System.Collections; using FairyGUI; namespace GFGGame { public class GameController { public static async void Start() { //初始化声音,不可以去掉 MusicManager.Instance.Stop(); SoundManager.Instance.Stop(); VoiceManager.Instance.Stop(); //GameObject对象池 PrefabManager.Instance.Init(); //字体 await FontLoader.Instance.Init(); //界面 UGUIManager.Instance.Init(); ViewManager.Init(); //日志 LogController.Instance.Init(); //全局 GameGlobal.Init(); //sqlite SqliteController.Instance.Init(false, ResPathUtil.SQLITE_FILE_PATH); //渠道 QDManager.Init(); //全局点击效果 ViewGlobal.CreatClickEffect(); //获取游戏配置 GetGameCfg(); } /// /// 获取游戏配置 /// public static void GetGameCfg() { var url = LauncherConfig.cfgUrl.Replace("{cfgName}", GameGlobal.cfgName); url = url + "?t=" + TimeHelper.ClientNow(); LauncherView.Instance.SetDesc("正在解压数据..."); HttpTool.Instance.Get(url, (string data) => { //初始化游戏配置 GameConfig.InitData(data); //缓存一部分配置文件 FightScoreCfgArray.Instance.Init(); StudioCfgArray.Instance.Init(); DailySignCfgArray.Instance.Init(); DailyLoginCfgArray.Instance.Init(); DressUpMenuItemCfg2Array.Instance.Init(); AdCfgArray.Instance.Init(); ItemTypeCfgArray.Instance.Init(); GuideCfgArray.Instance.Init(); SuitCfgArray.Instance.Init(); ShopCfgArray.Instance.Init(); SuitFosterCfgArray.Instance.Init(); VipCfgArray.Instance.Init(); ActivityRechargeCfgArray.Instance.Init(); ActivityLuckybonusCfgArray.Instance.Init(); Activity7DaysTaskCfgArray.Instance.Init(); Activity7DaysCfgArray.Instance.Init(); SuitGuideMenuCfgArray.Instance.Init(); ActivityRecharge2CfgArray.Instance.Init(); SuitFosterListCfgArray.Instance.Init(); TaskCfgArray.Instance.Init(); LauncherView.Instance.Close(); //显示登录 LoginController.ShowLogin(); }); } public static bool CheckLoginCache(bool doLogin) { string account = PlayerPrefs.GetString(GameConst.ACCOUNT_LAST_LOGIN_KEY, null); string password = PlayerPrefs.GetString(GameConst.PASSWORD_LAST_LOGIN_KEY, null); bool lastLoginIsVisitor = LocalCache.GetBool(GameConst.LAST_LOGIN_IS_VISITOR_KEY, false); if (lastLoginIsVisitor) { long id = (long)PlayerPrefs.GetFloat(GameConst.VISITOR_ID_KEY, -1); if (id >= 0) { if (doLogin) { //LoginProxy.LoginAsVisitor(); } return true; } } else if (!string.IsNullOrEmpty(account)) { if (!string.IsNullOrEmpty(password)) { if (doLogin) { LoginController.Login(account, password, true).Coroutine(); } return true; } else if (LauncherConfig.netType == LauncherConfig.EnumNetType.LOCAL && PlayerPrefs.HasKey(GameConst.PASSWORD_LAST_LOGIN_KEY)) { if (doLogin) { LoginController.LoginTest(account).Coroutine(); } return true; } } return false; } public static void CheckSpecialAccount(string account) { GameGlobal.antiAddiction = !(account.IndexOf("sygfg") == 0); } public static void ShowCreateRole() { ViewManager.Show(); } public static async ETTask PreEnterGameAsync() { QDManager.OnEnterGame(); RoleDataHandler.StartUpdate(); //GFGUIPackage.AddPackage(ResPathUtil.GetUIPackagePath("CommonGame")); //GFGUIPackage.AddPackage(ResPathUtil.GetUIPackagePath("Main")); await ItemProxy.GetItemInfos(); await RoleLimitSProxy.ReqUnitLimitInfos(); await InstanceZonesSProxy.GetInstanceZonesInfos(); await StorageSProxy.ReqGetClientValues(); await RoleInfoSProxy.ReqPersonalInfo(); await CollegeSProxy.ReqCollectUpgradeInfo(); //功能协议数据不要放这里获取,放在AfterEnterGame函数中 GameGlobal.lastLoginTime = StorageDataManager.Instance.GetStorageValue(ConstStorageId.LAST_LOGIN_TIME); long lastTime = GameGlobal.myNumericComponent.GetAsInt(NumericType.OnlineTimeSecs); StorageSProxy.ReqSetClientValue(ConstStorageId.LAST_LOGIN_TIME, (int)lastTime).Coroutine(); int skipGuide = StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_SKIP_GUIDE); if (skipGuide <= 0 && (LauncherConfig.netType == EnumNetType.LOCAL && LauncherConfig.ChannelId == (int)ChannelID.Test)) { AlertUI.Show("是否跳过引导?如果您是第一次体验,建议不要跳过引导!") .SetLeftButton(true, "不用", (obj) => { EnterGame(); StorageSProxy.ReqSetClientValue(ConstStorageId.STORAGE_SKIP_GUIDE, 1).Coroutine(); }) .SetRightButton(true, "跳过", (obj) => { GameGlobal.skipGuide = true; EnterGame(); StorageSProxy.ReqSetClientValue(ConstStorageId.STORAGE_SKIP_GUIDE, 2).Coroutine(); }); } else { if (skipGuide == 2) GameGlobal.skipGuide = true; EnterGame(); } } private static void EnterGame() { LoadingView.Instance.SetProgress(100, () => { ViewManager.Hide(); GameGlobal.isEnterGame = true; if (MainStoryDataManager.CheckOpenMainUI() || GameGlobal.skipGuide) { ViewManager.Show(); } else { MainStoryDataManager.currentChapterCfgId = 10001; // GameGlobal.isFirstEntry == true if (!InstanceZonesDataManager.CheckLevelPass(100001001)) { UICGView.Instance.Show(); //StoryController.ShowLevelView(100001001); } else { //ViewManager.Show(StudioDataManager.Instance.luckyBoxFilingChapterId, new object[] { typeof(ActivityThemeLuckyBoxView).FullName, this.viewData }); ViewManager.Show(MainStoryDataManager.currentChapterCfgId); ////新玩家选择套装 //if (RoleInfoManager.Instance.NewRoleSuitStatus == false) //{ //ViewManager.Show(); //} } } GMController.AddShowGMViewEventListener(); }); } public static async void AfterShowMainUI(object param = null) { if (GameGlobal.AfterDataInited) return; await ActivitySProxy.ReqSevenDayLoginInfos(); await ActivityGlobalSProxy.GetActivityInfo(); await ShopSProxy.ReqShopInfo(); await ActivitySProxy.ReqGetNewPlayerBonusStatus(); await ActivitySProxy.GetNewPlayerOnceStatus(); await ActivitySProxy.GetTipsStatus(); FieldDataManager.Instance.waitToShowFieldFightEndView = false; bool result = await FieldSProxy.ReqFieldInstanceInfos(); if (result && FieldDataManager.Instance.fieldInfos.hasBonus) { bool result1 = await FieldSProxy.ReqFieldInstanceResult(); if (result1) { FieldDataManager.Instance.waitToShowFieldFightEndView = true; } } GameGlobal.AfterDataInited = true; EventAgent.DispatchEvent(ConstMessage.AFTER_DATA_INITED); ItemProxy.GetItemAttributeInfos().Coroutine(); ItemProxy.ReqGetItemCollect().Coroutine(); MainStorySProxy.GetStoryBonusInfos().Coroutine(); MainStorySProxy.GetStoryBonusDate().Coroutine(); CardSProxy.GetCardInfos().Coroutine(); TaskSProxy.GetTaskInfos(); BattlePassTaskSProxy.GetBattlePassInfo().Coroutine(); DailyTaskSProxy.ReqDailyTaskInfos().Coroutine(); NoticeSProxy.ReqSystemNoticeList().Coroutine(); MailSProxy.ReqMailCount().Coroutine(); FriendSProxy.ReqAllFriendInfos().Coroutine(); ActivityAfuGiftSProxy.GetAfuGiftInfo().Coroutine(); ActivityTeaSProxy.ReqGetNPCVisitInfo().Coroutine(); ActivitySProxy.ReqActivityZCJBInfo().Coroutine(); MiniGameProxy.ReqGetChallengeReward().Coroutine(); TimeTracingDataManager.Instance.InitRewardDic(); TimeTracingSProxy.ReqGetLevelRewardStatus().Coroutine(); TimeTracingSProxy.ReqGetSuitRewardStatus().Coroutine(); TimeTracingSProxy.ReqGetDataRecord().Coroutine(); PoemPhotoSProxy.ReqAllPhotoInfos().Coroutine(); TravelSProxy.ReqTravelInfo().Coroutine(); TravelSProxy.ReqTravelGuideInfo().Coroutine(); PoemGallerySProxy.ReqGalleryTheme().Coroutine(); ArenaDataManager.Instance.ReqArenaInfo(); SkillSProxy.ReqGetSkillList(SkillType.LeagueSkill).Coroutine(); EnduringGiftBoxSProxy.ReqGetAllGiftBagRebateStatus().Coroutine(); ChatSProxy.ReqQueryChatMsg(ChatType.League).Coroutine(); ChatSProxy.ReqQueryChatMsg(ChatType.LeagueQuestion).Coroutine(); LuckyBoxSProxy.ReqGetLuckyBoxInfo().Coroutine(); LeagueSproxy.ReqGetLeagueInfo().Coroutine(); SuitFosterProxy.SendGetSuitInfos().Coroutine(); StudioSProxy.ReqStudioInfos().Coroutine(); LuckyBoxSProxy.ReqGetLuckyBoxRotatingInfo().Coroutine(); LeagueSproxy.GetTeapartyInfos().Coroutine(); LeagueSproxy.GetTeapartyMatchingInfos(RoleDataManager.roleId).Coroutine(); ActivitySProxy.ReqGetActivitySignInfos().Coroutine(); ShopSProxy.ReqGetGrowthFundInfo().Coroutine(); //RoleInfoSProxy.ReqNewRoleGetSuitStatus().Coroutine(); int storageAutoPlay = StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_AUTO_PLAY); FightDataManager.Instance.autoPlay = storageAutoPlay <= 0 ? false : true; int fightSpeed = StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_FIGHT_AUTO_PLAY_SPEED); FightDataManager.Instance.fightSpeed = fightSpeed <= 0 ? 1 : fightSpeed; int dialogSpeed = StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_DIALOG_AUTO_PLAY_SPEED); FightDataManager.Instance.dialogSpeed = dialogSpeed <= 0 ? 1 : dialogSpeed; int filingChapterId = StorageDataManager.Instance.GetStorageValue(ConstStorageId.STUDIO_FILING_CHAPTERID); StudioDataManager.Instance.npcFilingChapterId = filingChapterId <= 0 ? StudioDataManager.Instance.FilingDatas[0].id : filingChapterId; StudioDataManager.Instance.filingChapterId = StudioDataManager.Instance.npcFilingChapterId; GameGlobal.skipCheckOpen = StorageDataManager.Instance.GetStorageValue(ConstStorageId.SKIP_CHECK_OPEN) <= 0 ? false : true; } public static void QuitToLoginView(bool logout, bool fromSdkLogoutCallback = false) { switch (LauncherConfig.ChannelId) { case (int)ChannelID.DouYou: QDDouYouManager.Instance.LoginOutBefore(); break; default: break; } FieldDataManager.Instance.waitToShowFieldFightEndView = false; GameGlobal.AutoSevenDayLoginView = true; GameGlobal.AutoDailySignView = true; GameGlobal.AutoSpecialOfferGiftBoxView = true; GameGlobal.AutoAcitivtyTipsLoginView = true; GameGlobal.AutoMonthlyCardView = true; GameGlobal.AutoZGTHDCTips = true; GameGlobal.AutoZGTHTips = true; GameGlobal.AutoPearRebateTips = true; GameGlobal.AutoShowCompleted = false; GameGlobal.PreDataInited = false; GameGlobal.AfterDataInited = false; QDManager.OnQuitToLoginView(); GameGlobal.isVisitor = false; GameGlobal.antiAddiction = true; GameGlobal.userId = 0; GameGlobal.userAge = 0; GameGlobal.skipGuide = false; GuideDataManager.currentGuideId = 0; MainDataManager.Instance.ViewType = 0; RoleDataHandler.StopUpdate(); CardDataManager.Clear(); ItemDataManager.Clear(); ViewManager.Clear(); DecomposeDataManager.Instance.Clear(); PhotographDataManager.Instance.Clear(); SkillDataManager.Instance.Clear(); SuitFosterDataManager.Instance.Clear(); StudioDataManager.Instance.Clear(); StorageDataManager.Instance.Clear(); ShopDataManager.Instance.Clear(); DressUpMenuItemDataManager.Clear(); GuideDataManager.Clear(); GetSuitItemController.Clear(); FriendDataManager.Instance.Clear(); RedDotController.Instance.Clear(); BagDataManager.Instance.Clear(); PoemPhotoDataManager.Instance.Clear(); PoemGalleryDataManager.Instance.Clear(); RoleInfoManager.Instance.Clear(); DailyTaskDataManager.Instance.Clear(); TravelDataManager.Instance.Clear(); ArenaDataManager.Instance.Clear(); ChatDataManager.Instance.Clear(); ActivityDataManager.Instance.Clear(); ActivityGlobalDataManager.Instance.Clear(); EnduringGiftBoxDataManager.Instance.Clear(); LimitedTimeGiftBoxDataManager.Instance.Clear(); BattlePassTaskDataManager.Instance.Clear(); TaskDataManager.Instance.Clear(); LeagueDataManager.Instance.Clear(); ActivityAfuGiftDataManager.Instance.Clear(); FightDataManager.Instance.Clear(); MainDataManager.Instance.Clear(); NewYearRedEnvelopeDataManager.Instance.Clear(); GameGlobal.zoneScene.GetComponent()?.Disconnect(); GameGlobal.zoneScene.GetComponent()?.ServerInfoList?.Clear(); GameGlobal.zoneScene.GetComponent()?.Clear(); if (logout) { QDManager.Logout(); } ViewManager.Hide(); if(!ViewManager.isViewOpen(typeof(LoginView).FullName)) { ViewManager.Show(null, true); GameController.CheckUpdateVersion(true); } } //断线重连后需要处理的事情 public static async void OnReconnected() { //重连成功请求邮件和公告等离线后会变更的数据 NoticeSProxy.ReqSystemNoticeList().Coroutine(); MailSProxy.ReqMailCount().Coroutine(); FriendSProxy.ReqAllFriendInfos().Coroutine(); PoemGallerySProxy.ReqGalleryTheme().Coroutine(); TaskSProxy.GetTaskInfos(); ArenaDataManager.Instance.ReqArenaInfo(); if (LeagueDataManager.Instance.Type == LeagueJoinType.Join) { await LeagueSproxy.ReqGetLeagueInfo(); LeagueSproxy.GetTeapartyMatchingInfos(RoleDataManager.roleId).Coroutine(); LeagueSproxy.GetTeapartyInfos().Coroutine(); LeagueSproxy.ReqJoinAnswer().Coroutine(); } } public static void GoBackToMainView() { MainDataManager.Instance.ViewType = 0; ViewManager.Show(null, true); } public static void ShowExitAlert(Action sureCallback = null) { AlertSystem.Show("我会想你的") .SetLeftButton(true, "继续游戏") .SetRightButton(true, "退出游戏", (object data) => { if(sureCallback != null) { sureCallback.Invoke(); } else { Application.Quit(); } }); } public static void CheckUpdateVersion(bool force = false) { if (ET.TimeHelper.ClientNowSeconds() - GameGlobal.pauseTime > 180 || LauncherConfig.netType == LauncherConfig.EnumNetType.LOCAL || force) { Timers.inst.StartCoroutine(CheckVersion(VersionController.DefaultPackage, force)); } } private static IEnumerator CheckVersion(string packageName, bool force) { var package = YooAssets.GetPackage(packageName); if (string.IsNullOrEmpty(GameGlobal.promotedVersion)) { GameGlobal.promotedVersion = package.GetPackageVersion(); } var operation = package.UpdatePackageVersionAsync(); yield return operation; if (operation.Status == EOperationStatus.Succeed) { LogUtil.LogDev($"版本对比: {GameGlobal.promotedVersion} {operation.PackageVersion}"); if (!string.IsNullOrEmpty(operation.PackageVersion) && !string.IsNullOrEmpty(operation.PackageVersion) && !operation.PackageVersion.Equals(GameGlobal.promotedVersion)) { GameGlobal.promotedVersion = operation.PackageVersion; if(force) { AlertSystem.Show("游戏已有更新,请重启游戏获取最佳游戏体验。") .SetRightButton(true, "重启游戏", (obj) => { Application.Quit(); }); } else { AlertSystem.Show("游戏已有更新,您可以立即重启游戏获取最佳游戏体验,也可以稍后重启更新。") .SetLeftButton(true, "稍后更新") .SetRightButton(true, "重启游戏", (obj) => { Application.Quit(); }); } } } } } }