Files
ZYZ/shared/domain/activityField/chongyangField.ts
2023-09-13 10:42:17 +08:00

93 lines
3.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 节日活动 - 重阳集会
import { ActivityModelType } from '../../db/Activity';
import { ActivityChongYangRecModelType, ChongYangBuyRecord, ChongYangGameRecord } from '../../db/ActivityChongYangRec';
import { ActivityBase } from './activityField';
// 后台格式
interface ChongYangSceneDataInDb {
dayIndex: number; // 第几天(层)
buyCost: string; // 购买一次次数的消耗type&id&count
dailyBuyCnt: number; // 每天可以购买的次数
dailyFreeCnt: number; // 每天可以免费的次数
rewards: string; // 每局的奖励 type&id&count
}
interface ChongYangDataReturn extends ChongYangSceneDataInDb {
// maxFreeCnt: number; // 累计到现在可以免费的次数
// freeCnt: number; // 累计到现在已经使用免费的次数
// maxBuyCnt: number; // 累积到现在可以购买的次数
buyCnt: number; // 累积到现在已经购买了的次数buyCnt < maxBuyCnt 的时候才能购买
playCnt: number; // 累计到现在游戏的次数
maxPlayCnt: number; // 累计到现在可以游戏的最大次数
isPushBuyRecord?: boolean; //
}
export class ChongYangData extends ActivityBase {
sceneMap = new Map<number, ChongYangDataReturn>();
gameRecords: ChongYangGameRecord[] = [];
buyRecords: ChongYangBuyRecord[] = [];
dayIndexUnlock: number = 1; //当前开启到了第几天
constructor(activityData: ActivityModelType, createTime: number, serverTime: number) {
super(activityData, createTime, serverTime)
this.initData(activityData.data)
}
public initData(data: string): void {
let chongyangData: ChongYangSceneDataInDb[] = JSON.parse(data);
if (!chongyangData || chongyangData.length == 0) return;
for (const obj of chongyangData) {
const { dayIndex, dailyFreeCnt } = obj;
let maxFreeCnt = dailyFreeCnt;
this.sceneMap.set(dayIndex, { ...obj, buyCnt: 0, playCnt: 0, maxPlayCnt: maxFreeCnt, isPushBuyRecord: true });
}
}
public setPlayerRecords(playerData: ActivityChongYangRecModelType) {
this.updatePlayerRecord(playerData);
}
public updatePlayerRecord(playerData: ActivityChongYangRecModelType) {
if (!playerData) return;
let dayIndexUnlockAndSuccess = 0;
if (playerData.gameRecords) {
this.gameRecords = playerData.gameRecords;
for (const { isSuccess, dayIndex } of playerData.gameRecords) {
if (isSuccess) {
dayIndexUnlockAndSuccess = Math.max(dayIndexUnlockAndSuccess, dayIndex);
let scene = this.sceneMap.get(dayIndex);
scene.playCnt += 1;
this.sceneMap.set(dayIndex, scene);
};
this.dayIndexUnlock = Math.max(this.dayIndexUnlock, dayIndex);
}
}
if (playerData.buyRecords) {
for (const { dayIndex, buyCnt = 0 } of playerData.buyRecords) {
let scene = this.sceneMap.get(dayIndex);
scene.isPushBuyRecord = false;
scene.buyCnt = buyCnt;
scene.maxPlayCnt = scene.buyCnt + scene.dailyFreeCnt;
this.sceneMap.set(dayIndex, scene);
}
}
if (this.todayIndex > this.dayIndexUnlock && this.dayIndexUnlock == dayIndexUnlockAndSuccess) {
this.dayIndexUnlock += 1;
}
}
public getShowResult() {
return {
...this.getBaseKeys(),
scenes: [...this.sceneMap.values()],
dayIndexUnlock: this.dayIndexUnlock,
}
}
}