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();
//功能协议数据不要放这里获取,放在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(MainStoryDataManager.currentChapterCfgId);
//ViewManager.Show(StudioDataManager.Instance.luckyBoxFilingChapterId, new object[] { typeof(ActivityThemeLuckyBoxView).FullName, this.viewData });
ViewManager.Show(MainStoryDataManager.currentChapterCfgId);
}
}
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();
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();
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)
{
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(fromSdkLogoutCallback);
}
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();
});
}
}
}
}
}
}