Files
18xchat/assets/Scripts/chat18x/data/CommercialData.ts
T
2025-08-15 13:55:26 +08:00

107 lines
2.7 KiB
TypeScript

import LanguageUtils from "../../Main/Common/LanguageUtils";
import Utils from "../../Main/Common/Utils";
import { InnerEventCode } from "../../Main/Config/InnerMsgCode";
export class CommercialData {
private static _instance: CommercialData;
public static get Instance(): CommercialData {
if (!CommercialData._instance) {
CommercialData._instance = new CommercialData();
}
return CommercialData._instance;
}
private _diamondCount: number = 0;
private _isVip: boolean = false;
private _vipEndTime: number = 0;
public get diamondCount(): number {
return this._diamondCount;
}
public set diamondCount(value: number) {
if (this._diamondCount !== value) {
this._diamondCount = Math.max(0, value);
Utils.sendInnerMsg(InnerEventCode.DiamondCountChanged, {
count: this._diamondCount,
});
}
}
public get isVip(): boolean {
return this._isVip;
}
public set isVip(value: boolean) {
if (this._isVip !== value) {
this._isVip = value;
Utils.sendInnerMsg(InnerEventCode.IsVipChanged, { isVip: this._isVip });
}
}
public get vipEndTime(): number {
return this._vipEndTime;
}
public set vipEndTime(value: number) {
if (this._vipEndTime !== value) {
this._vipEndTime = Math.max(0, value);
Utils.sendInnerMsg(InnerEventCode.VipEndDayChange, {
vipEndTime: this._vipEndTime,
});
}
}
private constructor() {
this.loadData();
}
public addDiamonds(amount: number): void {
if (amount > 0) {
this.diamondCount += amount;
}
}
public spendDiamonds(amount: number): boolean {
if (amount > 0 && this._diamondCount >= amount) {
this.diamondCount -= amount;
return true;
}
return false;
}
public setVipTime(timeInSeconds: number): void {
this._vipEndTime = timeInSeconds;
if (timeInSeconds > 0) {
this.isVip = true;
}
}
public getVipLeftTime(): string {
const dateNow = new Date();
const timeDiff = Math.abs(this._vipEndTime - dateNow.getTime());
const hours = Math.floor(timeDiff / (1000 * 60 * 60));
if (hours >= 24) {
return (
(hours % 24).toString() + LanguageUtils.getText("purchasepanel.day")
);
}
const minutes = Math.floor((timeDiff / (1000 * 60)) % 60);
//const seconds = Math.floor((timeDiff / 1000) % 60);
return `${hours}${LanguageUtils.getText(
"purchasepanel.hour"
)}:${minutes}${LanguageUtils.getText("purchasepanel.minute")}`;
}
private loadData(): void {
//假数据
this._diamondCount = 18556;
this._isVip = true;
//const dateNow = new Date();
const dateEndTime = new Date("2025-08-30T12:00:00Z");
this._vipEndTime = dateEndTime.getTime();
}
}