大侠
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

304 lines
12 KiB

//#region 文件引入
import { _decorator, Button, Component, Label, Node, sp, Sprite,Animation, RichText, ProgressBar, Toggle, random, SpriteFrame, Material } from "cc";
import BaseUIForm from "../../Mgr_UI/BaseUIForm";
import { ResUrlLoad } from "../../CComEx/ResUrlLoad";
import FrameScrollView from "../../CComEx/FrameScrollView";
import { IData, IGoodsData } from "../../const/GameInterface";
import { EBundleName, GameTotalType, PropType } from "../../const/GameEnum";
import MathUtils from "../../ExUtils/MathUtils";
import { Global } from "../../Global";
import TimeUtils from "../../ExUtils/TimeUtils";
import UIMgr from "../../Mgr_UI/UIMgr";
import { EUIForms } from "../../const/UIFormCnf";
import MesMgr from "../../MesEvent/MesMgr";
import { EGlobalEvent } from "../../MesEvent/EGlobalEvent";
import { MINIGAME } from "cc/env";
//#endregion 文件引入
const {ccclass, property,menu} = _decorator;
@ccclass("FinalTrialUI_Proxy")
export default class FinalTrialUI_Proxy extends BaseUIForm{
//#region 节点自动生成
@property(Label)
lab_title: Label = null;
@property(Node)
n_trial: Node = null;
@property(Node)
n_binfo: Node = null;
@property(ProgressBar)
pro_BossHp: ProgressBar = null;
@property(Label)
lab_bossName: Label = null;
@property(Label)
lab_bossHp: Label = null;
@property(Label)
lab_refreshDesc: Label = null;
@property(sp.Skeleton)
spi_boss: sp.Skeleton = null;
@property(Node)
n_dialogue: Node = null;
@property(Label)
lab_dialogue: Label = null;
@property(Label)
lab_challengenum: Label = null;
@property(Button)
btn_help: Button = null;
@property(Node)
n_times: Node = null;
@property(Label)
lab_lefttimes: Label = null;
@property(Label)
lab_addhurt: Label = null;
@property(Node)
n_coin: Node = null;
@property(Label)
lab_rankreward: Label = null;
@property(Button)
btn_rankhurt: Button = null;
@property(Button)
btn_chanllenge: Button = null;
@property(Button)
btn_nochanllenge: Button = null;
@property(Button)
btn_rankreward: Button = null;
@property(Node)
n_CanNotLabel: Node = null;
@property(Node)
n_shop: Node = null;
@property(sp.Skeleton)
spi_redlight: sp.Skeleton = null;
//#endregion 节点自动生成
//#region 试炼
@property(ResUrlLoad)
rewardIcon:ResUrlLoad = null;
@property({type:[Node]})
chanllengeNode:Node[] = [];
//#endregion 试炼
//#region 藏经阁
@property(FrameScrollView)
protected mScrollViewFrame: FrameScrollView;
@property({type:[Label]})
tokenlabels:Label[] = [];
//#endregion 藏经阁
@property({type:[SpriteFrame]})
protected mBgs: SpriteFrame[] = [];
@property(Material)
protected mSpineGrayMat: Material;
private mToggleType:string = "";
private mSelectedBoss: number = -1;
private _leftSec: number = 0; // 挑战刷新时间
onButtonClick(button:Button){
/**点击事件触发*/
switch (button) {
case this.btn_help:
UIMgr.Ins.ShowUI(EUIForms.FinalTrialDetailsUI)
break;
case this.btn_rankhurt:
UIMgr.Ins.ShowUI(EUIForms.FinalTrialRankUI, { param: this.mSelectedBoss })
break;
case this.btn_chanllenge:
this.mDataMgr.Trial.startTrial(this.mSelectedBoss);
this.CloseUI();
break;
case this.btn_rankreward:
UIMgr.Ins.ShowUI(EUIForms.FinalTrialReWardUI, { param: this.mSelectedBoss })
break;
default:
ConsoleEx.Log(button);
break;
}
}
protected CloseUI(btn?: Node): void {
this.mSelectedBoss = -1;
this.unscheduleAllCallbacks();
super.CloseUI(btn);
}
addEvent(): void {
this.mScrollViewFrame.m_ItemRendererFuntion = this.ItemRenderer.bind(this);
MesMgr.on(EGlobalEvent.SHOP_REFRESH, this.refreshTrialShop, this);
MesMgr.on(EGlobalEvent.TRIALREWARD_REFRESH, this.refreshRankReward, this);
}
protected start(): void {
for (let i = 0; i < this.chanllengeNode.length; i++) {
const btn_boss = this.chanllengeNode[i];
this.initBossInfo(btn_boss, i);
btn_boss.off("click");
btn_boss.on("click", () => {
this.selectTrialInfo(i);
})
}
// 剩余时间
this._leftSec = TimeUtils.GetRemainingTime();
CNodeUtils.switchText(this.lab_lefttimes, TimeUtils.makeTimeLeftString(this._leftSec));
this.schedule(()=>{
if(--this._leftSec >= 0){
CNodeUtils.switchText(this.lab_lefttimes, TimeUtils.makeTimeLeftString(this._leftSec));
}else{
this._leftSec = 0;
this.CloseUI();
}
}, 1)
this.selectTrialInfo(this.mDataMgr.Trial.getCurrTrialBossIdx());
this.switchToggle("trial");
this.refreshTrialShop();
this.reflashScrollView();
}
onToggle_ToggleGroup(tToggle:Toggle){
this.switchToggle(tToggle.node.name);
}
switchToggle(type) {
this.mToggleType = type;
switch (type) {
case 'trial':
CNodeUtils.setActive(this.n_trial,true);
CNodeUtils.setActive(this.n_shop,false);
break;
case 'shop':
CNodeUtils.setActive(this.n_trial,false);
CNodeUtils.setActive(this.n_shop,true);
break;
}
}
//#region 挑战
// 只有在非周末领奖之后,才会关闭对应周末的领奖入口
private refreshRankReward(idx:number) {
const tweek = TimeUtils.getWeek();
if(MINIGAME && ((tweek !== 6 && idx === 1) || (tweek !== 7 && idx === 2))){
CNodeUtils.setActive(this.btn_rankreward, false);
}
}
private initBossInfo(node:Node, idx:number){
const icon = node.getChildByName("icon");
let data:IData = {
type: GameTotalType.ENEMYICON,
id: this.mDataMgr.Trial.getTrialConfig(idx).bossid,
num:0
}
CNodeUtils.SwitchTextureByData(icon, data);
}
selectTrialInfo(idx:number){
if(this.mSelectedBoss == idx)
return;
if(this.mSelectedBoss !== -1){
const goldbg = this.chanllengeNode[this.mSelectedBoss].getChildByName("goldbg");
CNodeUtils.setActive(goldbg, false);
}
this.mSelectedBoss = idx;
const goldbg = this.chanllengeNode[idx].getChildByName("goldbg");
CNodeUtils.setActive(goldbg, true);
// info
const cfg = this.mDataMgr.Trial.getTrialConfig(idx);
const bossConfig = Global.CsvMgr.Enemy_csv[cfg.bossid];
CNodeUtils.switchText(this.lab_bossName, bossConfig.name);
// spine
if(this.spi_boss.skeletonData?.name !== bossConfig.sp){
ConsoleEx.Warn("目标皮肤:",bossConfig.sp)
CNodeUtils.SwitchSpine(this.spi_boss, `${bossConfig.sp}/${bossConfig.sp}`, EBundleName.Spine);
}
const tweek = TimeUtils.getWeek();
if(!MINIGAME || (idx === 0) || (tweek === 6 && idx === 1) || (tweek === 7 && idx === 2)){
CNodeUtils.setActive(this.btn_rankreward, true);
CNodeUtils.setActive(this.n_binfo, true);
CNodeUtils.setActive(this.n_CanNotLabel, false);
this.spi_boss.customMaterial = null;
}else{
CNodeUtils.setActive(this.btn_rankreward, this.mDataMgr.Trial.canGetReWards(idx));
CNodeUtils.setActive(this.n_binfo, false);
CNodeUtils.setActive(this.n_CanNotLabel, true);
this.spi_boss.customMaterial = this.mSpineGrayMat;
return;
}
// hp
const HpInfo = this.mDataMgr.Trial.getTrialBossHp(idx);
let pro = HpInfo.hp / HpInfo.totalHP;
const fixed = MathUtils.fixedDecimal(pro * 100, 2);
CNodeUtils.switchText(this.lab_bossHp, fixed + "%");
this.pro_BossHp.progress = pro;
CNodeUtils.setActive(this.btn_nochanllenge, HpInfo.hp <= 0);
CNodeUtils.setActive(this.n_times, HpInfo.hp > 0);
// dialog
CNodeUtils.switchText(this.lab_dialogue, cfg.dialog);
// 挑战人数
const passSec = TimeUtils.OneDayTime - this._leftSec;
const passMin = Math.floor(passSec / 60);
let addnum = passSec;
if(passMin > 10){
addnum += MathUtils.randomRangeInt(0, passMin);
}
CNodeUtils.switchText(this.lab_challengenum, addnum);
// 奖励
const tokenicon = this.n_coin.getComponent(ResUrlLoad);
tokenicon.showResInfo(GameTotalType.TOKEN, cfg.rewardtoken);
CNodeUtils.switchText(this.lab_addhurt, `+${this.mDataMgr.Pass.passed_times * 5}%`);
CNodeUtils.switchText(this.lab_rankreward, `+${this.mDataMgr.Pass.passed_times * 10}`);
}
//#endregion
//#region 商店
private refreshTrialShop(){
for (let i = 0; i < this.tokenlabels.length; i++) {
const token = this.tokenlabels[i];
CNodeUtils.switchText(token, this.mDataMgr.Token.getTokenCount(i + PropType.eJXStone));
}
}
ItemRenderer(idx:number,tNode:Node){
const shop = this.mDataMgr.Trial.getTrialShopConfig(idx);
const itemcfg = Global.CsvMgr.Items_csv[shop.id];
const tokenicon = tNode.getChildByPath("Layout/coin").getComponent(ResUrlLoad);
const tokennum = tNode.getChildByPath("Layout/num");
const item_bg = tNode.getChildByName("item_bg").getComponent(Sprite);
const item_icon = tNode.getChildByName("item_icon");
const item_name = tNode.getChildByName("item_name");
// 图标
item_bg.spriteFrame = this.mBgs[itemcfg.quality - 1];
const iData:IData = {
type: GameTotalType.ITEM,
id: shop.id,
num:0,
}
CNodeUtils.SwitchTextureByData(item_icon, iData);
CNodeUtils.switchTextByQuality(item_name, itemcfg.name, itemcfg.quality);
// CNodeUtils.switchText(item_name, itemcfg.name);
CNodeUtils.switchText(tokennum, itemcfg.price);
tokenicon.showResInfo(GameTotalType.TOKEN, itemcfg.pricetype);
// 品质特效
// if(itemcfg.quality === 6){
// CNodeUtils.setActive(this.spi_redlight, true);
// this.spi_redlight.setAnimation(0, "idle", true);
// }else{
// CNodeUtils.setActive(this.spi_redlight, false);
// }
// 道具
const goodData:IGoodsData = {
id: shop.id,
lock: false,
};
CNodeUtils.addBtnComponent(tNode, this.ItemClick.bind(this, goodData, "trial"), this);
}
private ItemClick(gData: IGoodsData, stype:string) {
UIMgr.Ins.ShowUI(EUIForms.ShopInfoUI, { param: {gData:gData, stype:stype} });
// UIMgr.Ins.ShowUI(EUIForms.ShopInfoUI, { param: gData });
}
private reflashScrollView(){
this.mScrollViewFrame.m_ItemCount = this.mDataMgr.Trial.getTrialShopNum();
}
//#endregion
}