import { _decorator, instantiate, isValid, Label, Node, Prefab, Sprite } from 'cc'; import { GButton } from '../../Main/Common/GButton'; import AudioManager from '../../Main/Manager/AudioManager'; import Utils from '../../Main/Common/Utils'; import { ViewManager } from '../../Main/Manager/ViewManager'; import { InnerMsgCode } from '../../Main/Config/InnerMsgCode'; import li_BaseView from '../../Main/Common/li_BaseView'; import GameRootUI from '../../Main/Common/GameRootUI'; import ResManager from '../../Main/Manager/ResManager'; import HttpUnit from '../../Main/Common/HttpUnit'; import { SDKManager } from '../../Main/Channel/SDKManager'; import ScrollViewList from '../../Main/Common/ScrollViewList'; import GameManager from '../../Main/Manager/GameManager'; import { I_LevelConfig } from '../../Main/Config/CommonConfig'; import SubManager from '../SubManager'; import { ByteDanceSDK } from '../../Main/Channel/bdSDK'; import GlobalValue from '../../Main/Common/GlobalValue'; import PlayerDataManager from '../../Main/Manager/PlayerDataManager'; import { E_AD_TARGET } from './TalkAdDialog'; const { ccclass, property } = _decorator; //主界面 @ccclass('Start_UI') export class Start_UI extends li_BaseView { @property(ScrollViewList) private Level_List: ScrollViewList = null @property(Prefab) private Level_Item: Prefab = null private itemClone: any = null private _nodeTab: any = {}; private _data; private levelData: I_LevelConfig[] = []; //关卡数据 private curLevelIdx: number = 0; //当前关卡Idx //----重写父类接口--------------------------------------- onLoadCT() { this.registerListenner(); Utils.parseNode(this.node, this._nodeTab) this.itemClone = instantiate(this.Level_Item) this.Level_List.setTemplateItem(this.itemClone) Utils.setString(this._nodeTab.labNpcName, "") Utils.setString(this._nodeTab.labNpcTalk, "") } openUIDataCT(data: any): void { this._data = data } registerListenner() { Utils.addInnerEL(InnerMsgCode.GM_UI_Close, this, this.resiveGMClose) Utils.addInnerEL(InnerMsgCode.UI_Talk_Back, this, this.resiveTalkBack) Utils.addInnerEL(InnerMsgCode.UI_BD_Sidebar, this, this.resiveBDSidebar) } start() { GButton.BandClick(this._nodeTab.btnStart, this.onStartClick, this, 10002); GButton.BandClick(this._nodeTab.btnAddTZCount, this.onAddTZClick, this); GButton.BandClick(this._nodeTab.tzCountNode, this.onAddTZClick, this); GButton.BandClick(this._nodeTab.btnSetting, this.onSettingClick, this); GButton.BandClick(this._nodeTab.btnBDSidebar, this.onBDSidebarClick, this); GButton.BandClick(this._nodeTab.btnGM, this.onGMClick, this); SDKManager.register_video_reward(this.node.uuid, (tag:number)=>{ console.log("视频广告回调", tag) if (tag == 1) { // 加次数 HttpUnit.ins.setUserAd({type:1}, (data) => { SubManager.ShowPrompt("观看视频成功,获得相亲次数") this.refreshXiangqinTicket() }) } }) SDKManager.register_share_reward(this.node.uuid, (tag:number)=>{ console.log("分享回调", tag) if (tag == 1) { // 加次数 HttpUnit.ins.setUserShare({type:1}, (data) => { SubManager.ShowPrompt("分享成功,获得相亲次数") this.refreshXiangqinTicket() }) } }) AudioManager.I.PlayMusic(1, true) //背景乐 GameRootUI.InitDisableOperUI(false) GameRootUI.InitCrossUI(false) this.setUIVisible(true) //设置按钮 if (GlobalValue.GMSwtitch) { this._nodeTab.btnSetting.active = true this._nodeTab.btnGM.active = true } else { this._nodeTab.btnSetting.active = false this._nodeTab.btnGM.active = false } //抖音侧边栏 this._nodeTab.btnBDSidebar.active = false if (SDKManager.isByteDance()) { this.refreshBdSidebarUI() ByteDanceSDK.CheckSidebarState((state) =>{ if (state == true) { this.refreshBdSidebarUI() } }) } //判断玩家权限是否已获取 if (!HttpUnit.IsLogin()) { HttpUnit.ins.login((loginData) => { console.log("主界面: 获取授权并登录成功!") this.userInited() }) } else { this.userInited() } //判断是否需要显示引导 this.resetGuide() this.checkGuide() } update(deltaTime: number) { } //GM界面关闭消息 resiveGMClose(data) { Utils.Log("收到GM界面关闭消息") } //退出聊天消息 resiveTalkBack(data) { Utils.Log("收到退出聊天消息") this.setUIVisible(true) this.refreshLevelList() HttpUnit.ins.getUserData((userData) => { this.refreshXiangqinTicket() }) } //抖音侧边栏消息 resiveBDSidebar(data) { this.refreshBdSidebarUI() } //增加相亲次数 private doAddXiangqinCnt(add:number = 1) { } //显示主界面UI setUIVisible(vis: boolean) { this._nodeTab.UIRoot.active = vis } //刷新抖音侧边栏按钮显示状态 refreshBdSidebarUI() { if (!SDKManager.isByteDance()) { //不是抖音平台,不显示 this._nodeTab.btnBDSidebar.active = false return } let stage = ByteDanceSDK.SidebarState if (stage == 1) { //前往 this._nodeTab.btnBDSidebar.active = true Utils.setString(this._nodeTab.labBDSidebar, "前往抖音侧边栏") } else if (stage == 2) { //领奖 this._nodeTab.btnBDSidebar.active = true Utils.setString(this._nodeTab.labBDSidebar, "领取抖音侧边栏") } else { //版本不支持 this._nodeTab.btnBDSidebar.active = false } } //刷新玩家信息完毕 userInited() { this.refreshSdkUI() this.refreshLevelList() this.refreshXiangqinTicket() } //刷新剩余相亲次数 private refreshXiangqinTicket() { let xqnum = HttpUnit.GetXiangqinTickets() let xqmax = HttpUnit.GetXiangqinMaxTickets() Utils.setString(this._nodeTab.labTZCount, xqnum + "/" + xqmax) Utils.setString(this._nodeTab.labBtnTZCount, "" + xqnum) } //刷新关卡列表 private refreshLevelList() { HttpUnit.ins.getLevelList((levelList) => { if (levelList) { GameManager.SetLevelCfg(levelList) this.levelData = levelList this.levelData.unshift({} as any) //在最前面插入一个占位数据,用于数组排版显示 this.Level_List.numItems = this.levelData.length if (this.curLevelIdx < 1) { this.curLevelIdx = 1 for (let i = 1; i < this.levelData.length; i++) { if (this.levelData[i].is_unlock == true) { if (this.curLevelIdx < i) { this.curLevelIdx = i } } else { break } } if (this.curLevelIdx > 2) { this.Level_List.scrollTo(this.curLevelIdx-2) } } this.changeLevel(this.curLevelIdx, true) } }) } //刷新SDK相关的UI refreshSdkUI() { console.log("主界面:刷新SDK相关的UI...") SDKManager.getUserInfo((data) => { //头像 let spt = this._nodeTab.headIcon.getComponent(Sprite) ResManager.I.changeRemoteSpriteFrame(spt, data.avatarUrl) //名字 let nickName = this._nodeTab.nickName.getComponent(Label) nickName.string = data.nickName console.log("主界面 设置头像和名字:", data.avatarUrl, data.nickName) }) //刷新id let id = HttpUnit.GetID() Utils.setString(this._nodeTab.userId, `ID:${id}`) } //关卡列表渲染 onRenderItemList(node: any, idx: number) { if(!isValid(node)) {return} if (!node.inited) { node.inited = true; Utils.parseNode(node); } GButton.RemoveClick(node) //第一个是占位用的 if (idx == 0) { node.l_rotateN.active = false node.zhanweiNode.active = true return } node.l_rotateN.active = true node.zhanweiNode.active = false let data = this.levelData[idx] //头像 let headPath = `headLevel/${data.icon}` ResManager.I.changeBundleSpriteFrame(node.head1.getComponent(Sprite), headPath, "Raw") //解锁状态 node.lockNode.active = data.is_unlock ? false : true node.unlockNode.active = data.is_unlock ? true : false if (data.is_unlock) { //分数 Utils.setString(node.labScore, data.score) //星级 if (data.star == 3) { ResManager.I.changeBundleSpriteFrame(node.l_xingji.getComponent(Sprite), "zjm_11", "Zhujiemian") } else if (data.star == 2) { ResManager.I.changeBundleSpriteFrame(node.l_xingji.getComponent(Sprite), "zjm_10", "Zhujiemian") } else if (data.star == 1) { ResManager.I.changeBundleSpriteFrame(node.l_xingji.getComponent(Sprite), "zjm_9", "Zhujiemian") } else { ResManager.I.changeBundleSpriteFrame(node.l_xingji.getComponent(Sprite), "zjm_8", "Zhujiemian") } //满星效果 node.l_manxing.active = data.star == 3 ? true : false if (data.star == 3) { ResManager.I.changeBundleSpriteFrame(node.l_bg.getComponent(Sprite), "zjm_6", "Zhujiemian") } else { ResManager.I.changeBundleSpriteFrame(node.l_bg.getComponent(Sprite), "zjm_5", "Zhujiemian") } } GButton.BandClick(node, ()=>{ this.changeLevel(idx) }, this) } //切换关卡 changeLevel(idx:number, force:boolean = false) { if (this.curLevelIdx == idx && !force) { return } this.curLevelIdx = idx let data = this.levelData[idx] //名字 Utils.setString(this._nodeTab.labNpcName, data.characterName) //介绍 Utils.setString(this._nodeTab.labNpcTalk, data.description) let bgPath = data.bgImage let rolePath = data.characterFullLengthPortrait Utils.sendInnerMsg(InnerMsgCode.SceneLayerBgUp, {bgPath:bgPath, rolePath:rolePath}) } //开始游戏 onStartClick() { Utils.Log("点击开始游戏"); this.finishGuide() if (this.curLevelIdx == 0) { console.error("当前关卡为0,此关卡是占位用的") return } let data = this.levelData[this.curLevelIdx] //未解锁 if (data.is_unlock != true) { SubManager.ShowPrompt("关卡未解锁") return } if (HttpUnit.GetXiangqinTickets() <= 0) { SubManager.ShowPrompt("今日相亲次数已用完"); return; } let level_id = data.id GameManager.CurLevelId = level_id GameManager.ClearStepScore() GameManager.ClearTalkRecord() HttpUnit.ins.levelStart({level_id:level_id}, (data) => { this.setUIVisible(false) GameManager.CurLevelData = data.level GameManager.RecordId = data.record_id GameManager.I.connetSorcket(data.record_id) //连接socket ViewManager.I.openBundlesView("UI/StartUI/Talk_UI") }) } //增加相亲次数 onAddTZClick() { ViewManager.I.openBundlesView("UI/StartUI/TalkAdDialog", { type: E_AD_TARGET.xiangqin, //加相亲次数 content: "每天只有 5 次相亲次数,请谨慎使用。分享游戏,观看广告都可以获得 3 次相亲次数奖励,该奖励每日限领一次,每日 5:00 刷新相亲次数以及奖励获取次数。", adCallback: ()=>{ SDKManager.show_reward_video_ad(this.node.uuid, 1) }, shareCallback: ()=>{ SDKManager.show_reward_share(this.node.uuid, 1) } }) } //设置 onSettingClick() { ViewManager.I.openBundlesView("UI/StartUI/Setting_UI") } //gm onGMClick() { ViewManager.I.openBundlesView("UI/GM_UI") } //点击抖音侧边栏按钮 onBDSidebarClick() { if (!SDKManager.isByteDance()) { //不是抖音平台 return } ViewManager.I.openBundlesView("UI/StartUI/BDSidebar_UI") } //region 引导相关 private _guideInterval: number = 0.5 //引导间隔 //重置引导节点显示 private resetGuide() { this._nodeTab.guideStep1.active = false this._nodeTab.guideStep2.active = false this._nodeTab.guideHandNode.active = false this._nodeTab.btnStart.parent = this._nodeTab.startParent1 } //检查引导 private checkGuide() { if (PlayerDataManager.I.GuideMainFinished) { return } this.doGuideStep1() } //引导步骤1 显示介绍弹窗 private doGuideStep1() { GameRootUI.DisableOper(this._guideInterval) this.scheduleOnce(() => { this._nodeTab.guideStep1.active = true GButton.RemoveAndBandClick(this._nodeTab.btnGs1Ok, this.onGuide1OkClick, this); },this._guideInterval) } //引导步骤2 显示手 private doGuideStep2() { GameRootUI.DisableOper(this._guideInterval) this.scheduleOnce(() => { this._nodeTab.guideStep2.active = true this._nodeTab.guideHandNode.active = true this._nodeTab.btnStart.parent = this._nodeTab.startParent2 },this._guideInterval) } //引导完成 private finishGuide() { if (PlayerDataManager.I.GuideMainFinished) { return } PlayerDataManager.I.SetGuideMainFinish(true) this.resetGuide() } onGuide1OkClick() { this._nodeTab.guideStep1.active = false this.doGuideStep2() } }