196 lines
5.9 KiB
TypeScript
196 lines
5.9 KiB
TypeScript
|
|
import { _decorator, Component, Node, Label, sys } from 'cc';
|
||
|
|
const { ccclass, property } = _decorator;
|
||
|
|
|
||
|
|
@ccclass('ButtonBadge')
|
||
|
|
export class ButtonBadge extends Component {
|
||
|
|
@property(Node)
|
||
|
|
hint_badge: Node | null = null;
|
||
|
|
|
||
|
|
@property(Label)
|
||
|
|
hint_countLabel: Label | null = null;
|
||
|
|
|
||
|
|
@property(Node)
|
||
|
|
hint_adIcon: Node | null = null;
|
||
|
|
|
||
|
|
@property(Node)
|
||
|
|
shuffle_badge: Node | null = null;
|
||
|
|
|
||
|
|
@property(Label)
|
||
|
|
shuffle_countLabel: Label | null = null;
|
||
|
|
|
||
|
|
@property(Node)
|
||
|
|
shuffle_adIcon: Node | null = null;
|
||
|
|
|
||
|
|
@property(Node)
|
||
|
|
magic_badge: Node | null = null;
|
||
|
|
|
||
|
|
@property(Label)
|
||
|
|
magic_countLabel: Label | null = null;
|
||
|
|
|
||
|
|
@property(Node)
|
||
|
|
magic_adIcon: Node | null = null;
|
||
|
|
|
||
|
|
private _hint_count: number = 0;
|
||
|
|
private _hint_storageKey: string = "hint_button_usage_count";
|
||
|
|
|
||
|
|
private _shuffle_count: number = 0;
|
||
|
|
private _shuffle_storageKey: string = "shuffle_button_usage_count";
|
||
|
|
|
||
|
|
private _magic_count: number = 0;
|
||
|
|
private _magic_storageKey: string = "magic_button_usage_count";
|
||
|
|
|
||
|
|
onLoad() {
|
||
|
|
// 从本地缓存读取
|
||
|
|
const hintSaved = sys.localStorage.getItem(this._hint_storageKey);
|
||
|
|
const shuffleSaved = sys.localStorage.getItem(this._shuffle_storageKey);
|
||
|
|
const magicSaved = sys.localStorage.getItem(this._magic_storageKey);
|
||
|
|
this._hint_count = hintSaved ? parseInt(hintSaved) : 3; // 默认初始 3 次
|
||
|
|
this._shuffle_count = shuffleSaved ? parseInt(shuffleSaved) : 3; // 默认初始 3 次
|
||
|
|
this._magic_count = magicSaved ? parseInt(magicSaved) : 3; // 默认初始 3 次
|
||
|
|
console.log('load', this._shuffle_count, this._magic_count)
|
||
|
|
this.updateHintView();
|
||
|
|
this.updateShuffleView();
|
||
|
|
this.updateMagicView();
|
||
|
|
}
|
||
|
|
|
||
|
|
private updateHintView() {
|
||
|
|
if (!this.hint_badge) return;
|
||
|
|
|
||
|
|
if (this._hint_count > 0) {
|
||
|
|
this.hint_badge.active = true;
|
||
|
|
if (this.hint_countLabel) {
|
||
|
|
this.hint_countLabel.string = this._hint_count.toString();
|
||
|
|
this.hint_countLabel.node.active = true;
|
||
|
|
}
|
||
|
|
if (this.hint_adIcon) this.hint_adIcon.active = false;
|
||
|
|
} else {
|
||
|
|
this.hint_badge.active = true;
|
||
|
|
if (this.hint_countLabel) this.hint_countLabel.node.active = false;
|
||
|
|
if (this.hint_adIcon) this.hint_adIcon.active = true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private updateShuffleView() {
|
||
|
|
if (!this.shuffle_badge) return;
|
||
|
|
|
||
|
|
if (this._shuffle_count > 0) {
|
||
|
|
this.shuffle_badge.active = true;
|
||
|
|
if (this.shuffle_countLabel) {
|
||
|
|
this.shuffle_countLabel.string = this._shuffle_count.toString();
|
||
|
|
this.shuffle_countLabel.node.active = true;
|
||
|
|
}
|
||
|
|
if (this.shuffle_adIcon) this.shuffle_adIcon.active = false;
|
||
|
|
} else {
|
||
|
|
this.shuffle_badge.active = true;
|
||
|
|
if (this.shuffle_countLabel) this.shuffle_countLabel.node.active = false;
|
||
|
|
if (this.shuffle_adIcon) this.shuffle_adIcon.active = true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private updateMagicView() {
|
||
|
|
if (!this.magic_badge) return;
|
||
|
|
|
||
|
|
if (this._magic_count > 0) {
|
||
|
|
this.magic_badge.active = true;
|
||
|
|
if (this.magic_countLabel) {
|
||
|
|
this.magic_countLabel.string = this._magic_count.toString();
|
||
|
|
this.magic_countLabel.node.active = true;
|
||
|
|
}
|
||
|
|
if (this.magic_adIcon) this.magic_adIcon.active = false;
|
||
|
|
} else {
|
||
|
|
this.magic_badge.active = true;
|
||
|
|
if (this.magic_countLabel) this.magic_countLabel.node.active = false;
|
||
|
|
if (this.magic_adIcon) this.magic_adIcon.active = true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private saveHint() {
|
||
|
|
sys.localStorage.setItem(this._hint_storageKey, this._hint_count.toString());
|
||
|
|
}
|
||
|
|
|
||
|
|
private saveShuffle() {
|
||
|
|
sys.localStorage.setItem(this._shuffle_storageKey, this._shuffle_count.toString());
|
||
|
|
}
|
||
|
|
|
||
|
|
private saveMagic() {
|
||
|
|
sys.localStorage.setItem(this._magic_storageKey, this._magic_count.toString());
|
||
|
|
}
|
||
|
|
|
||
|
|
public useHintOnce(): boolean {
|
||
|
|
if (this._hint_count > 0) {
|
||
|
|
this._hint_count--;
|
||
|
|
this.saveHint();
|
||
|
|
this.updateHintView();
|
||
|
|
return true; // 成功使用
|
||
|
|
} else {
|
||
|
|
// this.showAdAndReward();
|
||
|
|
return false; // 没次数,去看广告
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public useShuffleOnce(): boolean {
|
||
|
|
if (this._shuffle_count > 0) {
|
||
|
|
this._shuffle_count--;
|
||
|
|
this.saveShuffle();
|
||
|
|
this.updateShuffleView();
|
||
|
|
return true; // 成功使用
|
||
|
|
} else {
|
||
|
|
// this.showAdAndReward();
|
||
|
|
return false; // 没次数,去看广告
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public useMagicOnce(): boolean {
|
||
|
|
if (this._magic_count > 0) {
|
||
|
|
this._magic_count--;
|
||
|
|
this.saveMagic();
|
||
|
|
this.updateMagicView();
|
||
|
|
return true; // 成功使用
|
||
|
|
} else {
|
||
|
|
// this.showAdAndReward();
|
||
|
|
return false; // 没次数,去看广告
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public getHintCount() {
|
||
|
|
return this._hint_count;
|
||
|
|
}
|
||
|
|
|
||
|
|
public getShuffleCount() {
|
||
|
|
return this._shuffle_count;
|
||
|
|
}
|
||
|
|
|
||
|
|
public getMagicCount() {
|
||
|
|
return this._magic_count;
|
||
|
|
}
|
||
|
|
|
||
|
|
public showAdAndReward(type) {
|
||
|
|
// ⚠️ 这里接入广告 SDK
|
||
|
|
console.log("显示广告...");
|
||
|
|
|
||
|
|
// 假设广告结束回调
|
||
|
|
if(type === 'hint') this.onAdHintComplete();
|
||
|
|
if(type === 'shuffle') this.onAdShuffleComplete();
|
||
|
|
if(type === 'magic') this.onAdMagicComplete();
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
private onAdHintComplete() {
|
||
|
|
this._hint_count += 3;
|
||
|
|
this.saveHint();
|
||
|
|
this.updateHintView();
|
||
|
|
}
|
||
|
|
|
||
|
|
private onAdShuffleComplete() {
|
||
|
|
this._shuffle_count += 3;
|
||
|
|
this.saveShuffle();
|
||
|
|
this.updateShuffleView();
|
||
|
|
}
|
||
|
|
|
||
|
|
private onAdMagicComplete() {
|
||
|
|
this._magic_count += 3;
|
||
|
|
this.saveMagic();
|
||
|
|
this.updateMagicView();
|
||
|
|
}
|
||
|
|
}
|