using UnityEngine; using FairyGUI; using UI.Login; using ET; using TapTap.Bootstrap; using System; using TapTap.Common; using System.Threading.Tasks; namespace GFGGame { public class LoginView : BaseView { private UI_LoginUI _ui; private GameObject _scenePrefab; private GameObject _sceneObject; public override void Dispose() { if (_sceneObject != null) { GameObject.DestroyImmediate(_sceneObject); _sceneObject = null; } if (_ui != null) { _ui.Dispose(); _ui = null; } base.Dispose(); } protected override void Init() { base.Init(); packageName = UI_LoginUI.PACKAGE_NAME; _ui = UI_LoginUI.Create(); viewCom = _ui.target; isfullScreen = true; _scenePrefab = GFGAsset.Load(ResPathUtil.GetPrefabPath("SceneLogin")); } protected override void OnInit() { base.OnInit(); _ui.m_txtVersion.text = GameGlobal.version; _ui.m_btnNotice.onClick.Add(OnClickBtnNotice); _ui.m_btnStart.onClick.Add(OnClickBtnStart); _ui.m_btnLogout.onClick.Add(OnClickBtnLogout); _ui.m_btnAge.onClick.Add(OnClickBtnAge); _ui.m_btnTapLogin.onClick.Add(OnClickBtnStart); _ui.m_imgLogo.visible = LauncherConfig.netType != LauncherConfig.EnumNetType.TEMP; _ui.m_btnChange.onClick.Add(OnBtnChangeClick); _ui.m_loaEventa.onClick.Add(() => { OnClickRichTextAgreeLink("event:a"); }); _ui.m_loaEventb.onClick.Add(() => { OnClickRichTextAgreeLink("event:b"); }); _ui.m_loaEventc.onClick.Add(() => { OnClickRichTextAgreeLink("event:c"); }); _ui.m_btnAgree.onClick.Add(OnBtnAgreeCklick); } protected override void AddEventListener() { base.AddEventListener(); EventAgent.AddEventListener(ConstMessage.SERVER_CHANGE, OnSeverChangeListener); EventAgent.AddEventListener(ConstMessage.LOGIN_SUCCESS, OnLoginSuccess); EventAgent.AddEventListener(ConstMessage.ON_PLATFORM_SDK_INITED, OnPlatformInitet); EventAgent.AddEventListener(ConstMessage.ON_PLATFORM_SDK_LOGINED, OnPlatformLogined); } protected override void OnShown() { base.OnShown(); MusicManager.Instance.Play(ResPathUtil.GetMusicPath(ConstMusicName.DEFAULT)); if (_sceneObject == null) { _sceneObject = GameObject.Instantiate(_scenePrefab); } SceneController.UpdateLoginScene(_sceneObject); ServerInfosComponent serverInfosComponent = GameGlobal.zoneScene.GetComponent(); ServerInfo recentlyServerInfo = serverInfosComponent.recentlyServerInfo; UpdateServer(recentlyServerInfo); _ui.m_btnStart.visible = false; _ui.m_btnTapLogin.visible = false; _ui.m_btnLogout.visible = false; _ui.m_btnAgree.selected = LocalCache.GetBool(GameConst.LAST_LOGIN_IS_AGREE_KEY, false); if (QDManager.isInited) { EventAgent.DispatchEvent(ConstMessage.ON_PLATFORM_SDK_INITED, true); } else { //初始化平台配置 QDManager.InitPlatform(); } } protected override void OnHide() { if (_sceneObject != null) { GameObject.Destroy(_sceneObject); _sceneObject = null; } base.OnHide(); } protected override void RemoveEventListener() { base.RemoveEventListener(); EventAgent.RemoveEventListener(ConstMessage.SERVER_CHANGE, OnSeverChangeListener); EventAgent.RemoveEventListener(ConstMessage.LOGIN_SUCCESS, OnLoginSuccess); EventAgent.RemoveEventListener(ConstMessage.ON_PLATFORM_SDK_INITED, OnPlatformInitet); EventAgent.RemoveEventListener(ConstMessage.ON_PLATFORM_SDK_LOGINED, OnPlatformLogined); } private void UpdateServer(ServerInfo info) { ServerInfosComponent serverInfosComponent = GameGlobal.zoneScene.GetComponent(); if (serverInfosComponent.ServerInfoList.Count == 0) { _ui.m_btnChange.visible = false; return; } _ui.m_btnChange.visible = serverInfosComponent.ServerInfoList.Count > 1; _ui.m_btnChange.title = string.Format("{0}区 {1}", NumberUtil.GetChiniseNumberText((int)info.Id), info.ServerName); LogServerHelperHttp.SendNodeLog((int)LogNode.ShowSelectServer); } private void OnPlatformInitet(EventContext context) { ViewManager.Hide(); var success = (bool)context.data; Debug.Log($"InitPlatform success {success}"); if (success) { QDManager.isInited = true; _ui.m_btnTapLogin.visible = QDManager.IsTaptap; _ui.m_btnStart.visible = !QDManager.IsTaptap; if (QDManager.IsHYKB) { Timers.inst.Add(1, 1, DelayToHYKBLogin); } else { //尝试自动登录 OnClickBtnStart(); } } else { AlertSystem.Show("初始化平台sdk失败!") .SetRightButton(true, "重试", (t) => { QDManager.InitPlatform(); }); } } private void OnPlatformLogined(EventContext context) { var account = (string)context.data; if (!string.IsNullOrEmpty(account)) { _ui.m_btnTapLogin.visible = false; if (QDManager.IsHYKB) { //好游快爆因为SDK的防沉迷会使游戏失去焦点,需要检测焦点 focusCount = 0; Timers.inst.Add(1, 0, CheckHykbLoginServer); } else { LoginController.LoginTest(account).Coroutine(); } } else { ViewManager.Hide(); //尝试自动登录 OnClickBtnStart(); } } //start==================垃圾代码,处理好游快爆sdk防沉迷无回调的问题 private void DelayToHYKBLogin(object obj) { //尝试自动登录 OnClickBtnStart(); } private int focusCount; private void CheckHykbLoginServer(object obj) { if (Application.isFocused) { focusCount++; if (focusCount >= 2) { LoginController.LoginTest(QDHYKBManager.Instance.UserId).Coroutine(); Timers.inst.Remove(CheckHykbLoginServer); } } else { focusCount = 0; } } //end==================垃圾代码,处理好游快爆sdk防沉迷无回调的问题 private void OnLoginSuccess(EventContext context) { _ui.m_btnLogout.visible = true; _ui.m_btnStart.visible = true; } private void OnSeverChangeListener(EventContext context) { ServerInfosComponent serverInfosComponent = GameGlobal.zoneScene.GetComponent(); UpdateServer(serverInfosComponent.ServerInfoList[serverInfosComponent.CurrentServerId]); } private void OnBtnChangeClick() { ViewManager.Show(); } private void OnClickBtnNotice() { if (NoticeDataManager.Instance.LastNoticeInfo == null || NoticeDataManager.Instance.LastNoticeInfo.noticeId == 0) { PromptController.Instance.ShowFloatTextPrompt("暂无公告发布"); return; } ViewManager.Show(new object[] { NoticeDataManager.Instance.LastNoticeInfo.title, NoticeDataManager.Instance.LastNoticeInfo.content }); } private void OnClickBtnStart() { var serverInfosComponent = GameGlobal.zoneScene.GetComponent(); if (serverInfosComponent.ServerInfoList.Count <= 0) { if (QDManager.IsTaptap) { QDTapTapManager.Instance.Login(); } else if (QDManager.IsHYKB) { QDHYKBManager.Instance.Login(); } else if (QDManager.IsBiliBili) { QDBiliBiliManager.Instance.Login(); } else { bool login = GameController.CheckLoginCache(true); if (!login) { ViewManager.Show(); } } } else { if (!_ui.m_btnAgree.selected) { PromptController.Instance.ShowFloatTextPrompt("请仔细阅读并同意服务协议、隐私政策、保护规则"); return; } LoginController.GetRoles().Coroutine(); } } private void OnClickBtnLogout() { GameController.QuitToLoginView(true); } private void OnClickBtnAge() { ViewManager.Show(new object[] { LoginController.ageTipsTitle, LoginController.ageTips }); } private void OnClickRichTextAgreeLink(string eventname) { Debug.Log("link target " + eventname); string content = null; switch (eventname) { case "event:a": content = GFGAsset.Load(ResPathUtil.GetTxtPath("serviceProtocal")).text; break; case "event:b": content = GFGAsset.Load(ResPathUtil.GetTxtPath("privacyPolicy")).text; break; case "event:c": content = GFGAsset.Load(ResPathUtil.GetTxtPath("privacyPolicyChildren")).text; break; } if (!string.IsNullOrEmpty(content)) { ViewManager.Show(content); } } private void OnBtnAgreeCklick() { LocalCache.SetBool(GameConst.LAST_LOGIN_IS_AGREE_KEY, _ui.m_btnAgree.selected); } } }