//********************* // create by 流云 // time: Tue Sep 09 2025 // desc: //********************* import { _decorator, Component, Node, find, instantiate, Label, tween, v3, Tween, Vec3, ProgressBar, sp, Sprite } from 'cc'; import { Auto_pageWeapon } from './Auto_pageWeapon'; import { SpriteLoad } from 'db://assets/mx/components/SpriteLoad'; import { GPath, GBundle, UIID } from '../../game/ConfigRes'; import { GEvent } from 'db://assets/mx/module/event/GEvent'; import { WeaponType } from '../../manager/WeaponDataManager'; import { OtherDataType, StatisticsType } from '../../game/GameData'; import { ConstEnum } from '../../manager/ConstManager'; import { sdkConfig } from '../../sdk/sdkConfig'; import { MonthCardType } from '../../purchase/Purchase'; import { TargetTaskType } from '../../manager/TargetTaskManager'; const { ccclass, property } = _decorator; @ccclass('UIpageWeapon') export class UIpageWeapon extends Auto_pageWeapon { weaponTypeList: ITableWeapon2[] = [] /**未拥有 */ noHaveArr: ITableWeapon2[] = [] /**已拥有 */ haveArr: ITableWeapon2[] = [] /**已装备 */ equippedArr: ITableWeapon2[] = [] /**装备区位置数量 */ equipPosAccount = 8 /**是否正在交换卡片 */ isExchangeCard: boolean = false changeData: ITableWeapon2 = null maxLevel: number = 50; onLoad(): void { super.onLoad(); } onEnable(): void { super.onEnable(); GEvent.Ins.on(GEvent.WeaponRemove, this.weaponRemove, this); GEvent.Ins.on(GEvent.WeaponUse, this.weaponUse, this); GEvent.Ins.on(GEvent.WeaponLevelUp, this.weaponLevelUp, this); GEvent.Ins.on(GEvent.LiulianGuideIndexEvent, this.showLiulianGuide, this); } onDisable(): void { super.onDisable(); GEvent.Ins.off(GEvent.WeaponRemove, this.weaponRemove, this); GEvent.Ins.off(GEvent.WeaponUse, this.weaponUse, this); GEvent.Ins.off(GEvent.LiulianGuideIndexEvent, this.showLiulianGuide, this); GEvent.Ins.off(GEvent.WeaponLevelUp, this.weaponLevelUp, this); } showGuide() { if (gg.data.getStatistics(StatisticsType.homeGuideIndex) == 2) { let toggle = this.ui_equippedLayout.children[0] gg.ui.openPanel(UIID.NewGuideMask, { data: [ [toggle], [''], () => { //点击彩虹飞弹 gg.data.setStatistics(StatisticsType.homeGuideIndex, 3) }, true, 255 ] }) }else{ this.showLiulianGuide() } } showLiulianGuide(){ if(gg.data.getStatistics(StatisticsType.LiulianGuideIndex) == 2){ gg.sdk.reportDY("inLevel", `章节1_5-引导点击榴莲`); let toggle = this.ui_haveLayout.children[0] gg.ui.openPanel(UIID.NewGuideMask, { data: [ [toggle], [''], () => { //点击榴莲换武器 gg.data.setStatistics(StatisticsType.LiulianGuideIndex, 3) gg.ui.openPanel(UIID.WeaponLevelUp, { data: [12] }); }, true, 255 ] }) }else if(gg.data.getStatistics(StatisticsType.LiulianGuideIndex) == 4){ gg.sdk.reportDY("inLevel", `章节1_5-引导替换手掌`); let toggle = this.ui_equippedLayout.children[5] gg.ui.openPanel(UIID.NewGuideMask, { data: [ [toggle], [gg.lang.get('让我们来替换它')], () => { // gg.data.setStatistics(StatisticsType.LiulianGuideIndex, 5) //关闭引导立马打开引导界面有问题所以加点延迟 setTimeout(()=>{ GEvent.Ins.emit(GEvent.LiulianGuideIndexEvent) },50) }, true, 255 ] }) } } weaponLevelUp(weaponId: number) { //刷新数据 this.playScaleAnim(false) } playScaleAnim(isPlayAnim) { this.initData() //this.ui_notHaveLayout/this.ui_haveLayout/this.ui_equippedLayout if (this.ui_notHaveLayout.children.length > 0) { //item播放动画 // this.refreshView() for (let i = 0; i < this.ui_notHaveLayout.children.length; i++) { let t = this.noHaveArr[i] if (t) { let level = gg.data.project.getWeaponLevel(t.weaponid); let conf = gg.data.project.getWeaponData(t.weaponid); let weaponSPNum = gg.data.getItemNum(conf.scrapId); let needNum = gg.data.project.getWeaponFlagNumByLevel(t.weaponid); let item = this.ui_notHaveLayout.children[i] item.getChildByName('lb_level').getComponent(Label).string = `Lv.${level}` if (level >= this.maxLevel) { item.getChildByName('progress').getComponent(Sprite).fillRange = 1 item.getChildByName('lb_progress').getComponent(Label).string = gg.lang.get('已满级')//'已满级' } else { item.getChildByName('lb_progress').getComponent(Label).string = `${weaponSPNum}/${needNum}` if (item.getChildByName('progress').getComponent(Sprite)) { item.getChildByName('progress').getComponent(Sprite).fillRange = weaponSPNum / needNum } } if (isPlayAnim) { item.scale = v3(0.1, 0.1, 0.1) tween(item) .delay(i * 0.02) .to(0.3, { scale: v3(1, 1, 1) }, { easing: 'elasticOut' }) .start() } } //let item = this.ui_notHaveLayout.children[i] } } if (this.ui_haveLayout.children.length > 0) { //item播放动画 for (let i3 = 0; i3 < this.ui_haveLayout.children.length; i3++) { let item = this.ui_haveLayout.children[i3] let t = this.haveArr[i3] let conf = gg.data.project.getWeaponData(t.weaponid); let weaponSPNum = gg.data.getItemNum(conf.scrapId); let needNum = gg.data.project.getWeaponFlagNumByLevel(t.weaponid); let level = gg.data.project.getWeaponLevel(t.weaponid); item.getChildByName('lb_level').getComponent(Label).string = `Lv.${level}` if (needNum && needNum == -1) { item.getChildByName('progress').getComponent(Sprite).fillRange = 1 item.getChildByName('lb_progress').getComponent(Label).string = gg.lang.get('已满级')//'已满级' item.getChildByName('红点').active = false item.getChildByName('碎片').active = true } else { item.getChildByName('lb_progress').getComponent(Label).string = `${weaponSPNum}/${needNum}` if (item.getChildByName('progress').getComponent(Sprite)) { item.getChildByName('progress').getComponent(Sprite).fillRange = weaponSPNum / needNum } if (weaponSPNum >= needNum) { item.getChildByName('红点').active = true item.getChildByName('碎片').active = false } else { item.getChildByName('红点').active = false item.getChildByName('碎片').active = true } } if (isPlayAnim && item) { item.scale = v3(0.1, 0.1, 0.1) tween(item) .delay(i3 * 0.02) .to(0.3, { scale: v3(1, 1, 1) }, { easing: 'elasticOut' }) .start() } } } if (this.ui_equippedLayout.children.length > 0) { //item播放动画 for (let i2 = 0; i2 < this.equippedArr.length; i2++) { let t = this.equippedArr[i2] if (t) { let conf = gg.data.project.getWeaponData(t.weaponid); let weaponSPNum = gg.data.getItemNum(conf.scrapId); let needNum = gg.data.project.getWeaponFlagNumByLevel(t.weaponid); let pos = gg.data.project.isWeaponEquipped(t.weaponid); let item = this.ui_equippedLayout.children[pos]; let level = gg.data.project.getWeaponLevel(t.weaponid); if (item && item.children.length > 0) { item.children[0].getChildByName('lb_level').getComponent(Label).string = `Lv.${level}` if (level >= this.maxLevel) { item.children[0].getChildByName('progress').getComponent(Sprite).fillRange = 1 item.children[0].getChildByName('lb_progress').getComponent(Label).string = gg.lang.get('已满级')//'已满级' item.children[0].getChildByName('红点').active = false item.children[0].getChildByName('碎片').active = true } else { item.children[0].getChildByName('lb_progress').getComponent(Label).string = `${weaponSPNum}/${needNum}` if (item.children[0].getChildByName('progress').getComponent(Sprite)) { item.children[0].getChildByName('progress').getComponent(Sprite).fillRange = weaponSPNum / needNum } } if (weaponSPNum >= needNum) { item.children[0].getChildByName('红点').active = true item.children[0].getChildByName('碎片').active = false } else { item.children[0].getChildByName('红点').active = false item.children[0].getChildByName('碎片').active = true } } if (isPlayAnim && item && item.children.length > 0) { item.children[0].scale = v3(0.1, 0.1, 0.1) tween(item.children[0]) .delay(i2 * 0.02) .to(0.3, { scale: v3(1, 1, 1) }, { easing: 'elasticOut' }) .start() } } } } } onInit(): void { // if (this.firtInGame) { // this.refreshView() // } // if (!this.firtInGame) { // this.firtInGame = true // } this.scheduleOnce(() => { this.showGuide() }, 0.1) this.refreshView() } /**刷新界面 */ refreshView() { this.initData() this.initView() } /**刷新数据 */ initData() { this.maxLevel = gg.data.table.getConst(ConstEnum.WeaponMaxLevel); this.weaponTypeList = gg.data.project.getWeaponDataList(); this.noHaveArr = gg.data.project.getNoHaveWeaponDataList() let haveList = gg.data.project.getHaveWeaponDataList() this.equippedArr = gg.data.project.getEquippedWeaponDataList() this.haveArr = haveList.filter(x => this.equippedArr.find(y => y.weaponid == x.weaponid) == null); } /**刷新界面 */ initView() { this.refreshNoHaveView() this.refreshHaveView() this.refreshEquippedView() } /**刷新未拥有 */ refreshNoHaveView() { this.ui_notHaveLayout.destroyAllChildren() for (let i = 0; i < this.noHaveArr.length; i++) { this.initSingleItem(this.noHaveArr[i], this.ui_notHaveLayout, 0.02 * i) } if(this.noHaveArr.length > 0){ this.ui_notHaveLayout.active = true; }else{ this.ui_notHaveLayout.active = false; } } /**刷新已拥有 */ refreshHaveView() { this.ui_haveLayout.destroyAllChildren() for (let i = 0; i < this.haveArr.length; i++) { this.initSingleItem(this.haveArr[i], this.ui_haveLayout, 0.02 * i) } if(this.haveArr.length > 0){ this.ui_haveLayout.active = true; }else{ this.ui_haveLayout.active = false; } } /**刷新已装备 */ refreshEquippedView() { for (let i = 0; i < this.equipPosAccount; i++) { this.ui_equippedLayout.children[i].destroyAllChildren() } for (let i = 0; i < this.equippedArr.length; i++) { let t = this.equippedArr[i] let pos = gg.data.project.isWeaponEquipped(t.weaponid); if (this.ui_equippedLayout.children[pos]) { this.initSingleItem(this.equippedArr[i], this.ui_equippedLayout.children[pos], 0.02 * i, true, true) } } } /**生成单个卡片 */ initSingleItem(weaponDdata: ITableWeapon2, parent, delaytime, canClick = true, isShowSpecialKuang = false) { let level = gg.data.project.getWeaponLevel(weaponDdata.weaponid); let item = instantiate(this.ui_singleItem) //增加动画 item.scale = v3(0.1, 0.1, 0.1) tween(item) .delay(delaytime) .to(0.3, { scale: v3(1, 1, 1) }, { easing: 'elasticOut' }) .start() item.active = true item.parent = parent let config = this.weaponTypeList.find(x => x.weaponid == weaponDdata.weaponid) // console.log('config==', config.name) // console.log('weaponDdata==', JSON.stringify(weaponDdata)); let itemData = gg.data.table.getItemData(config.itemID) if (config.quality == 3) { item.getChildByName('紫色').active = true item.getChildByName('橙色').active = false } else if (config.quality == 4) { item.getChildByName('紫色').active = false item.getChildByName('橙色').active = true } else { item.getChildByName('紫色').active = false item.getChildByName('橙色').active = false } item.getChildByName('itemSpr').getComponent(SpriteLoad).setSprite(GPath.WeaponBottom(`颜色${config.quality}`), GBundle.Weapon); item.getChildByName('iconSpr').getComponent(SpriteLoad).setSprite(GPath.Item(itemData.icon), GBundle.Items); item.getChildByName('lb_name').getComponent(Label).string = gg.lang.get(config.name) item.getChildByName('lb_level').getComponent(Label).string = `Lv.${level}` item.getChildByName('锁定框2').active = weaponDdata.weaponid == 1 let weaponSPNum = gg.data.getItemNum(weaponDdata.scrapId); let needNum = gg.data.project.getWeaponFlagNumByLevel(weaponDdata.weaponid) item.getChildByName('碎片').active = true if (level >= this.maxLevel) { item.getChildByName('progress').getComponent(Sprite).fillRange = 1 item.getChildByName('lb_progress').getComponent(Label).string = gg.lang.get('已满级')//'已满级' item.getChildByName('红点').active = false item.getChildByName('碎片').active = true } else { item.getChildByName('lb_progress').getComponent(Label).string = `${weaponSPNum}/${needNum}` if (item.getChildByName('progress').getComponent(Sprite)) { item.getChildByName('progress').getComponent(Sprite).fillRange = weaponSPNum / needNum } if (weaponSPNum >= needNum && (gg.data.project.isWeaponUnlocked(weaponDdata.weaponid) || gg.data.project.isWeaponEquipped(weaponDdata.weaponid) >= 0)) { item.getChildByName('红点').active = true item.getChildByName('碎片').active = false } else { item.getChildByName('红点').active = false item.getChildByName('碎片').active = true } } item.getChildByName('锁定遮罩').active = gg.data.project.isWeaponUnlocked(weaponDdata.weaponid) == false; if (canClick) { item.attr({ bindId: config.weaponid }) item.on(Node.EventType.TOUCH_END, this.clickSingleItem, this); } if (item.getChildByName('锁定遮罩').active) { item.getChildByName('lb_level').active = false item.getChildByName('进度条框').active = false item.getChildByName('progress').active = false item.getChildByName('碎片').active = false item.getChildByName('lb_progress').active = false let descLab = item.getChildByName('锁定遮罩').getChildByName('descLab').getComponent(Label) item.getChildByName('锁定遮罩').getChildByName('进度条框').active = false //解锁条件替换读表格数据 if(weaponDdata.unlockdesc!=""){ descLab.string = gg.lang.get(weaponDdata.unlockdesc); //橙武增加碎片显示 if(config.quality == 4 && config.weaponid != 16){ item.getChildByName('锁定遮罩').getChildByName('进度条框').active = true let progress = find('进度条框/progress',item.getChildByName('锁定遮罩') ) let frag = gg.data.getItemNum(config.scrapId); progress.getComponent(Sprite).fillRange = frag/3 descLab.string += `${gg.lang.get('碎片')}${frag}/3` } } } else { item.getChildByName('lb_level').active = true item.getChildByName('进度条框').active = true item.getChildByName('progress').active = true // item.getChildByName('碎片').active = true item.getChildByName('lb_progress').active = true } } /**点击卡片 */ clickSingleItem(e, d) { let id = e.target.bindId if (this.isExchangeCard) { //正在交换卡片 if ((!sdkConfig.isIAPVersion && id == 1) || (sdkConfig.isIAPVersion && !gg.purchase.isCanUninstallRainbowBullet()) && id == 1) { gg.ui.showToast("该武器不能卸下"); return } let pos = gg.data.project.isWeaponEquipped(id); if (pos >= 0) { gg.data.project.equipWeapon(this.changeData.weaponid, pos); gg.targetTaskManager.statisticalData(TargetTaskType.weaponInTeam, 1) this.hideExchangeCard(); this.refreshView(); gg.data.saveToServer(); } } else { //正常打开卡片 gg.ui.openPanel(UIID.WeaponLevelUp, { data: [id] }); } } /** * 武器移除 * @param weaponid 武器id */ weaponRemove(weaponid: number) { let pos = gg.data.project.isWeaponEquipped(weaponid); gg.data.project.unequipWeapon(pos); this.refreshView(); } /** * 武器使用 * @param weaponid 武器id */ weaponUse(weaponid: number) { //是否还有空位 let pos = gg.data.project.getEmptyPos(); if (pos >= 0) { //有空位,将武器放入空位 gg.data.project.equipWeapon(weaponid, pos); this.refreshView() gg.targetTaskManager.statisticalData(TargetTaskType.weaponInTeam, 1) } else { //无空位 let data = gg.data.project.getWeaponData(weaponid); this.showExchangeCard(data); } } /** * 展示交换卡片 * @param t 武器本地数据 */ showExchangeCard(data: ITableWeapon2) { this.changeData = data this.isExchangeCard = true this.ui_scrollView.active = false this.ui_changeCardNode.active = true //生成卡片 let parent = this.ui_changeCardNode.getChildByName('item_0') parent.destroyAllChildren() this.initSingleItem(data, parent, 0.02, false) if (this.ui_equippedLayout.children.length > 0) { //item播放动画 for (let i = 0; i < this.ui_equippedLayout.children.length; i++) { let item = this.ui_equippedLayout.children[i] let node = item.children[0] //呼吸效果 //先停止所有动画 Tween.stopAllByTarget(node) tween(node) .to(1, { scale: v3(0.96, 0.96, 0.96) }) .to(1, { scale: Vec3.ONE }) .union() .repeatForever() .start() } } } /**隐藏交换卡片 */ hideExchangeCard() { this.isExchangeCard = false this.ui_scrollView.active = true this.ui_changeCardNode.active = false //呼吸动画 if (this.ui_equippedLayout.children.length > 0) { //item播放动画 for (let i = 0; i < this.ui_equippedLayout.children.length; i++) { let item = this.ui_equippedLayout.children[i] let node = item.children[0] //呼吸效果 //先停止所有动画 Tween.stopAllByTarget(node) node.scale = Vec3.ONE } } } click_btnSuiPian() { gg.ui.openPanel(UIID.WeaponSuiPian) } /**取消交换卡片 */ click_btnCancelExchange() { this.hideExchangeCard() } click_btnweaponsui() { gg.ui.openPanel(UIID.WeaponSuiPian) } }