//********************* // create by 流云 // time: Fri Nov 28 2025 // desc: 补充体力:广告 / 分享 //********************* import { _decorator, find, Label } from 'cc'; import { Auto_buyPower } from './Auto_buyPower'; import { ItemNumType, StatisticsType } from '../../game/GameData'; import MTools from '../../../mx/tools/MTools'; const { ccclass } = _decorator; /** 观看广告领取体力 */ const VIDEO_VIGOUR = 15; /** 分享领取体力 */ const SHARE_VIGOUR = 5; /** 分享冷却(毫秒) */ const SHARE_COOLDOWN_MS = 20 * 60 * 1000; @ccclass('UIbuyPower') export class UIbuyPower extends Auto_buyPower { /** ui_shareTime/time 倒计时标签 */ private _shareTimeLab: Label | null = null; onLoad(): void { super.onLoad(); this._shareTimeLab = find('ui_center/ui_shareTime/time', this.node)?.getComponent(Label) ?? null; if (!this._shareTimeLab) { console.log('[UIbuyPower] ui_shareTime/time Label 缺失'); } } onEnable(): void { super.onEnable(); this._refreshShareCooldownView(); this.schedule(this._tickShareCooldown, 1); } onDisable(): void { this.unschedule(this._tickShareCooldown); super.onDisable(); } onInit(): void { this._refreshShareCooldownView(); } click_bgMask(): void { this.close(2); } click_btnClose(): void { this.close(2); } /** 观看广告领取 10 体力 */ click_btnVideo(): void { gg.sdk.requestSubscribeVigourRecovery(); gg.sdk.showVideoAd(this._onVideoAdResult.bind(this)); } /** 分享领取 5 体力(20 分钟冷却) */ click_btnShare(): void { if (!this._canShareNow()) { gg.ui.showToast('分享冷却中,请稍后再试'); this._refreshShareCooldownView(); return; } gg.sdk.requestSubscribeVigourRecovery(); gg.sdk.share(2, this._onShareResult.bind(this)); } /** 广告回调 */ private _onVideoAdResult(res: boolean): void { if (!res) { gg.ui.showToast('观看视频失败'); return; } gg.sdk.reportDY('inLevel', `体力-AD-广告获得体力`); gg.data.addItemNum(ItemNumType.vigour, VIDEO_VIGOUR); gg.ui.showToast(gg.lang.get('体力增加{1}', [VIDEO_VIGOUR]), false); } /** 分享回调 */ private _onShareResult(res: boolean): void { if (!res) { gg.ui.showToast('分享失败'); return; } gg.sdk.reportDY('inLevel', '体力-分享获得体力'); /** 复用 buyPowerMoneyCount 存上次分享时间戳(毫秒) */ gg.data.setStatistics(StatisticsType.buyPowerMoneyCount, Date.now()); gg.data.addItemNum(ItemNumType.vigour, SHARE_VIGOUR); gg.ui.showToast(gg.lang.get('体力增加{1}', [SHARE_VIGOUR]), false); this._refreshShareCooldownView(); } /** 每秒刷新分享冷却展示 */ private _tickShareCooldown(): void { this._refreshShareCooldownView(); } /** 刷新 ui_shareTime 显隐与 mm:ss 倒计时 */ private _refreshShareCooldownView(): void { const remainMs = this._getShareCooldownRemainMs(); const show = remainMs > 0; if (this.ui_shareTime?.isValid) { this.ui_shareTime.active = show; } if (!show) return; if (this._shareTimeLab?.isValid) { this._shareTimeLab.string = MTools.formatTimeString(Math.ceil(remainMs / 1000), 'mm:ss'); } } /** 是否已过分享冷却 */ private _canShareNow(): boolean { return this._getShareCooldownRemainMs() <= 0; } /** 分享冷却剩余毫秒;0 表示可分享 */ private _getShareCooldownRemainMs(): number { const lastShareTs = gg.data.getStatistics(StatisticsType.buyPowerMoneyCount); if (!(lastShareTs > 1_000_000_000_000)) return 0; const elapsed = Date.now() - lastShareTs; if (elapsed >= SHARE_COOLDOWN_MS) return 0; return SHARE_COOLDOWN_MS - elapsed; } }