export default class ch_sign{ private static _instance:ch_sign; public static getInstance():ch_sign{ if(!this._instance) this._instance = new ch_sign(); return this._instance; } private _sign_data:Set=new Set(); private _max:number = 7; private _creat_date:number=0; private _sign_count:number=0; private _mode:number=1; /**设定的签到天数*/ public get max_day():number{return this._max;} private getCreatDayCount():number{ if(this._creat_date==0){ chsdk.log.warn("签到模块没有初始化"); return 0; } return chsdk.date.getDiffDayNum(this._creat_date,chsdk.date.now())+1; } /** * 签到初始化 * @param mode =1可以补签 =2不可补签 * @param data 签到存档数据,可以为空为第一天 * @param max_day 签到最大天数 */ public init(mode:1|2,data:{sign_list:number[],creat_date:number}|{sign_count:number,last_date:number}|null,max_day:number=7):void{ this._mode=mode; if(this._mode==1){ if(data){ data =data as {sign_list:number[],creat_date:number}; const sign_list=data.sign_list ?? []; const creat_date=data.creat_date ?? chsdk.date.now(); for(let i=0;ithis._max)return 0; if(this._sign_data.has(day))return 1; const count = this.getCreatDayCount(); if(count <=0) return 0; if(day this._max)return false; return !this._sign_data.has(count); }else if(this._mode==2){ const count = this._sign_count; if(count>=this._max)return false; return !chsdk.date.isSameDate(this._creat_date,chsdk.date.now()); } return false; } /**签到是否全部完成*/ public checkSiginComplete():boolean{ const count = this._sign_count; return count>=this._max; } /** * 是否能补签 * 不能返回0, * 可以补签返回可以补签的那一天*/ public checkReSigin():number{ if(this._mode!=1) return 0; let count = this.getCreatDayCount()-1; if(count<=0)return 0; if(count>this._max)count=this._max; for(let i=1;i<=count;i++){ if(!this._sign_data.has(i)) return i; } return 0; } /**签到 * 失败返回 0 * 成功返回签到当天 */ public signIn(): number { if (!this.checkSigin()) { return 0; } if(this._mode==1){ const day = this.getCreatDayCount(); this._sign_data.add(day); this._sign_count=this._sign_data.size; return day; }else if(this._mode==2){ this._sign_count++; this._creat_date=chsdk.date.now(); return this._sign_count; } return 0; } /**补签 * 失败返回 0 * 成功返回补签那天 */ public reSignIn():number{ if(this._mode!=1)return 0; const index = this.checkReSigin(); if(index<=0 || index>this._max){ return 0; } this._sign_data.add(index); this._sign_count=this._sign_data.size; return index; } // }