import { MissionTabType } from '../types/mission'; import { ProcessedTab } from '../processors/mission-processor'; import { MissionItem } from './MissionItem'; /** * 任务活动类 * 封装任务活动相关的数据和操作方法 */ export class MissionActivity { /** 任务活动code */ public readonly missionActivityCode: string; /** 活动开始时间 */ public readonly activityStartTime: number; /** 活动结束时间 */ public readonly activityEndTime: number; /** 是否进行中 */ public readonly isActive: boolean; /** 剩余时间(毫秒) */ public readonly timeRemaining: number; /** 格式化的剩余时间 */ public readonly timeRemainingText: string; /** 预处理后的Tab列表 */ public readonly tabList: ProcessedTab[]; constructor(data: { missionActivityCode: string; activityStartTime: number; activityEndTime: number; isActive: boolean; timeRemaining: number; timeRemainingText: string; tabList: ProcessedTab[]; }) { this.missionActivityCode = data.missionActivityCode; this.activityStartTime = data.activityStartTime; this.activityEndTime = data.activityEndTime; this.isActive = data.isActive; this.timeRemaining = data.timeRemaining; this.timeRemainingText = data.timeRemainingText; this.tabList = data.tabList; } /** * 获取指定类型的Tab */ getTabByType(tabType: MissionTabType): ProcessedTab | undefined { return this.tabList.find(tab => tab.tabType === tabType); } /** * 获取所有任务列表 */ getAllMissions(): MissionItem[] { const allMissions: MissionItem[] = []; this.tabList.forEach(tab => { allMissions.push(...tab.missions); }); return allMissions; } /** * 获取阶段任务列表 * 阶段任务是指具有stepRewardList且不为空的任务 */ getStepMission(): MissionItem[] { const stepMissions: MissionItem[] = []; this.tabList.forEach(tab => { tab.missions.forEach(mission => { // 检查任务是否有阶段奖励列表且不为空 if (mission.info.stepRewardList && mission.info.stepRewardList.length > 0) { stepMissions.push(mission); } }); }); return stepMissions; } /** 判断活动未开始 */ isNotStarted(): boolean { const now = Date.now(); return now < this.activityStartTime; } /** 判断活动已结束 */ isEnded(): boolean { const now = Date.now(); return now > this.activityEndTime; } /** * 转换为JSON对象 */ toJSON() { return { missionActivityCode: this.missionActivityCode, activityStartTime: this.activityStartTime, activityEndTime: this.activityEndTime, isActive: this.isActive, timeRemaining: this.timeRemaining, timeRemainingText: this.timeRemainingText, tabList: this.tabList }; } }