//********************* // create by 流云 // time: Thu Mar 26 2026 // desc: //********************* import { _decorator, Component, Node, find, v3, Label, Color } from 'cc'; import { Auto_ReplicaBox } from './Auto_ReplicaBox'; import { ColorDefance, ItemData } from '../../game/ConfigProjectData'; import { SpriteLoad } from 'db://assets/mx/components/SpriteLoad'; import { GBundle, GPath, UIID } from '../../game/ConfigRes'; import { BattleType, ChapterDifficulty } from '../../manager/ChapterDataManager'; import { OtherDataType } from '../../game/GameData'; import { TableNames } from '../../game/ConfigTableData'; import { ItemGrid } from '../../com/ItemGrid'; const { ccclass, property } = _decorator; @ccclass('UIReplicaBox') export class UIReplicaBox extends Auto_ReplicaBox { onLoad(): void { super.onLoad(); } onEnable(): void { super.onEnable(); } onDisable(): void { super.onDisable(); } onInit(): void { this.showOpenCenterEff(); this.showOpenMaskEff(2); this.Data = this.prema; let numStr = gg.data.getkeyKeyValue(OtherDataType.LastDifficultySelect, this.Data.id, true); this.difficulty = parseInt(numStr) || ChapterDifficulty.Easy; if (this.difficulty < this.Data.opendifficulty[0]) this.difficulty = this.Data.opendifficulty[0]; if (this.difficulty > this.Data.opendifficulty[1]) this.difficulty = this.Data.opendifficulty[1]; let str = gg.data.getkeyKeyValue(OtherDataType.ReplicaCanEnterCountToday, this.Data.id); this.maxCount = this.Data.count; this.curentCount = Number(str) || 0;; this.haveCount = Math.max(0, this.maxCount - this.curentCount); let sweepStr = gg.data.getkeyKeyValue(OtherDataType.SweepNum, this.Data.id); this.dailySweepCount = Number(sweepStr) || 0; this.dailySweepCountMax = this.Data.sweepFree + this.Data.sweepAd; this.updateUI(); } chapter: ITableChapter = null; Data: ITableReplica = null; itemRewards: ItemData[] = null; haveCount: number = 0; curentCount: number = 0; maxCount: number = 0; difficulty: ChapterDifficulty = ChapterDifficulty.Easy; /**每日扫荡次数 */ dailySweepCount: number = 0; /**每日扫荡次数上限 */ dailySweepCountMax: number = 0; /**今日是否已经通关 */ isCompleteToday: boolean = false; updateUI() { this.chapter = gg.data.table.getTableData(TableNames.Chapter, this.Data.chapterID[this.difficulty - 1]); gg.data.project.vigourCost = this.chapter.chapter_enery; let rewardStr = gg.data.project.getChapterRewardStr(this.chapter.id, this.difficulty); this.itemRewards = gg.game.parseRewardStr(rewardStr); this.lb_name.string = this.Data.name; this.ui_titleBg.getOrAddComponent(SpriteLoad).setSprite(GPath.texture("bg_" + this.Data.id), GBundle.Replica); this.ui_difficultybg.getOrAddComponent(SpriteLoad).setSprite(GPath.texture("difficultybg_" + this.difficulty), GBundle.Replica); this.ui_finish.active = gg.data.project.isReplicaComplete(this.Data.id, this.difficulty); //判断当前副本难度到了那一个难度 this.ui_difficut.children.forEach((item, index) => { item.active = index == this.difficulty - 1; }) this.ui_layNode.children.map(x => x.active = false); for (let i = 0; i < this.itemRewards.length; i++) { let item = this.itemRewards[i]; let n: Node = null; if (i < this.ui_layNode.children.length) { n = this.ui_layNode.children[i]; } else { n = gg.res.getNode("prefab/", "ItemGrid", GBundle.Comm2); if (!n) { console.warn("UIReplicaBox: ItemGrid prefab not ready", GBundle.Comm2); continue; } n.parent = this.ui_layNode; n.active = true; } n.active = true; n.scale = v3(0.8, 0.8, 0.8); n.getComponent(ItemGrid)?.setData(item); } this.lb_tiaozhan.string = `(${this.haveCount}/${this.maxCount})`; let currentVigour = gg.data.getVigour(); let needVigour = gg.data.project.vigourCost; this.lb_needTili.string = `x${needVigour}`; this.lb_needTili.outlineColor = currentVigour >= needVigour ? Color.BLACK : Color.RED; this.btnLeft.active = this.difficulty > this.Data.opendifficulty[0]; this.btnRight.active = this.difficulty < this.Data.opendifficulty[1]; this.btnTiaozhan.active = this.haveCount > 0 && (this.difficulty == ChapterDifficulty.Easy || gg.data.project.isReplicaComplete(this.Data.id, this.difficulty - 1)); this.ui_selectDiff.active = this.Data.opendifficulty[1] > this.Data.opendifficulty[0]; this.btnSweep.active = this.ui_finish.active && this.dailySweepCount < this.dailySweepCountMax; this.btnSweep.getChildByName("video").active = this.dailySweepCount >= this.Data.sweepFree; this.btnSweep.getChildByName("descLab").getComponent(Label).string = `剩余次数:${this.dailySweepCountMax - this.dailySweepCount}次`; if(this.ui_selectDiff.active){ //有难度选择显示才有没有结算的ui显示 //当前 if(!this.btnTiaozhan.active){ this.ui_unlock.active = true; }else{ this.ui_unlock.active = false; } }else{ this.ui_unlock.active = false; } } click_bgMask(): void { this.close(2); } click_btnClose(): void { this.close(2); } click_btnLeft(): void { this.difficulty--; if (this.difficulty < this.Data.opendifficulty[0]) { this.difficulty = this.Data.opendifficulty[0]; } this.updateUI(); } click_btnRight(): void { this.difficulty++; if (this.difficulty > this.Data.opendifficulty[1]) { this.difficulty = this.Data.opendifficulty[1]; } this.updateUI(); } click_btnSweep(): void { if (this.dailySweepCount < this.Data.sweepFree) { this.sweep(); } else { gg.sdk.showVideoAd((res) => { if (res) { this.sweep(); } }) } } click_btnTiaozhan(): void { gg.game.CurentSelectReplica = this.Data; gg.game.CurentSelectBattleType = this.Data.id; gg.game.CurentSelectBattleDifficulty = this.difficulty; gg.game.CurentSelectChapterId = this.Data.chapterID[this.difficulty - 1]; let ret = gg.game.enterBattle(); if (ret === 1) { let str = gg.data.getkeyKeyValue(OtherDataType.ReplicaCanEnterCountToday, this.Data.id); let next = (Number(str) || 0) + 1; gg.data.setkeyKeyValue(OtherDataType.ReplicaCanEnterCountToday, this.Data.id, next); } } sweep() { this.dailySweepCount++; this.curentCount++; gg.data.setkeyKeyValue(OtherDataType.SweepNum, this.Data.id, this.dailySweepCount); this.haveCount--; gg.data.setkeyKeyValue(OtherDataType.ReplicaCanEnterCountToday, this.Data.id, this.curentCount); this.updateUI(); let rewardStr = gg.data.project.getChapterRewardStr(this.chapter.id, this.difficulty); gg.game.showGetRewardByReardStr(rewardStr); } }