UNPKG

press-plus

Version:
232 lines (207 loc) 6.75 kB
import { timeStampFormat } from 't-comm/es/time/time'; import { NUMBER_CHI_MAP } from 't-comm/lib/base/number/number'; import { SCHEDULE_CARD_STATE_MAP, GAME_RESULT_UI_MAP, GAME_STATUS_MAP, BATTLE_STATUS_MAP, GAME_RESULT_MAP, } from './config'; function getCardState({ gameStatus, battleList, curBattleNo, gameStateRemain, }: Record<string, any>) { if (gameStatus <= GAME_STATUS_MAP.WILL_START) { return { cardState: SCHEDULE_CARD_STATE_MAP.GAME_WILL_START, countdown: gameStateRemain, }; } battleList.forEach((battle: Record<string, any>) => { if (!battle.battle_status) { battle.battle_status = 0; } // battle.can_enter_game = true; }); const getBattleCountDown = (battleIndex: number) => { const battle = battleList[battleIndex]; if (battle.battle_start_remain) { return battle.battle_start_remain; } const countdown = (battle.start_time || 0) - parseInt(`${Date.now() / 1000}`, 10); return countdown || 0; }; if (gameStatus <= GAME_STATUS_MAP.PLAYING) { if (curBattleNo === 1) { if (battleList[0].battle_status === BATTLE_STATUS_MAP.PLAYING) { if (battleList[0].can_enter_game) { return { cardState: SCHEDULE_CARD_STATE_MAP.BATTLE_STARTED, roomId: battleList[0].room_id, roomPwd: battleList[0].room_pwd, buttonTip: '第一局已开赛', }; } return { cardState: SCHEDULE_CARD_STATE_MAP.BATTLE_PLAYING, }; } if (battleList[0].battle_status < BATTLE_STATUS_MAP.PLAYING) { return { cardState: SCHEDULE_CARD_STATE_MAP.GAME_WILL_START, countdown: getBattleCountDown(0) || gameStateRemain, }; } if (battleList[0].battle_status > BATTLE_STATUS_MAP.PLAYING) { if (battleList.length === 1) { return { cardState: SCHEDULE_CARD_STATE_MAP.GAME_END, }; } return { cardState: SCHEDULE_CARD_STATE_MAP.BATTLE_PLAYING, }; } } else { const index = curBattleNo - 1; if (battleList[index].battle_status === BATTLE_STATUS_MAP.PLAYING) { if (battleList[index].can_enter_game) { return { cardState: SCHEDULE_CARD_STATE_MAP.BATTLE_STARTED, roomId: battleList[index].room_id, roomPwd: battleList[index].room_pwd, buttonTip: `第${NUMBER_CHI_MAP[index + 1 as keyof typeof NUMBER_CHI_MAP]}局已开赛`, }; } return { cardState: SCHEDULE_CARD_STATE_MAP.BATTLE_PLAYING, }; } if (battleList[index].battle_status < BATTLE_STATUS_MAP.PLAYING) { return { cardState: SCHEDULE_CARD_STATE_MAP.BATTLE_NEXT_WILL_START, buttonCountDown: getBattleCountDown(index), }; } if (battleList[index].battle_status > BATTLE_STATUS_MAP.PLAYING) { return { cardState: SCHEDULE_CARD_STATE_MAP.GAME_END, }; } } } else if (gameStatus <= GAME_STATUS_MAP.EMD) { return { cardState: SCHEDULE_CARD_STATE_MAP.GAME_END, }; } return { cardState: SCHEDULE_CARD_STATE_MAP.GAME_WILL_START, countdown: gameStateRemain, }; } function getGameAutoStartTime(labels: Record<string, any> = {}) { const str = labels.battle_mode_confs || ''; let autoStartTime; try { const config = JSON.parse(str); autoStartTime = config[0]?.auto_start_time; } catch (err) {} return autoStartTime; } export function parseScheduleData(data: Record<string, any> = {}, childInfo: Record<string, any> = {}) { const { game_status: gameStatus = 0, cur_battle_no: curBattleNo, battle_list: battleList = [], // game_start_time: gameStartTime, game_start_remain: gameStateRemain, game_result: gameResult = GAME_RESULT_MAP.PENDING, game_rank: gameRank = '-', battle_user_list: battleUserList = [], } = data; let newGameStateRemain = gameStateRemain; const actStartTime = getGameAutoStartTime(childInfo.labels); if (actStartTime) { newGameStateRemain = Math.max(actStartTime - parseInt(`${Date.now() / 1000}`, 10), 0); } // if (gameStateRemain === undefined // && gameStartTime === undefined // && childInfo.act_start_time // ) { // newGameStateRemain = childInfo.act_start_time - parseInt(Date.now() / 1000, 10); // } const { cardState, countdown = 0, buttonCountDown = 0, roomId = '', roomPwd = '', buttonTip, } = getCardState({ gameStatus, battleList, curBattleNo, gameStateRemain: newGameStateRemain, }) || {}; const parsedBattleList = battleList.map((item: Record<string, any>, index: number) => { const { start_time: startTime } = item; return { title: `第${NUMBER_CHI_MAP[index + 1 as keyof typeof NUMBER_CHI_MAP]}局`, time: timeStampFormat(startTime, 'hh:mm'), isCurrent: index === curBattleNo - 1, }; }); const scoreList = battleList.map((item: Record<string, any>, index: number) => { if (index > curBattleNo) { return { title: `第${NUMBER_CHI_MAP[index + 1 as keyof typeof NUMBER_CHI_MAP]}局`, score: '--', isWinner: 3, // 1 胜 2 负 3 -- }; } return { title: `第${NUMBER_CHI_MAP[index + 1 as keyof typeof NUMBER_CHI_MAP]}局`, score: item.score || '-', isWinner: item.isvictor, }; }); const battleIndexStr = battleList .map((_: Record<string, any>, index: number) => NUMBER_CHI_MAP[index + 1 as keyof typeof NUMBER_CHI_MAP]) .join('/'); const battleScoreStr = battleList .map((item: Record<string, any>) => item.score || '-').join('/'); const resultList = [{ name: '总积分排名', num: gameRank, }, { name: `单局积分(${battleIndexStr})`, num: battleScoreStr, }]; return { // 比赛状态 10未开始 100进行中 200已结束 // 300未被签到(人数不够,队员有黑名单) 400被裁判取消 ...data, cardState, // cardState: SCHEDULE_CARD_STATE_MAP.BATTLE_STARTED, countdown: countdown * 1000, // to ms buttonCountDown: buttonCountDown * 1000, buttonTip: buttonTip || '', // failResult: gameResult === GAME_RESULT_MAP.FAIL, resultType: GAME_RESULT_UI_MAP[gameResult], // pendingResult: gameResult === GAME_RESULT_MAP.PENDING, parsedBattleList, curBattleNo, stepList: parsedBattleList, scoreList, resultList, roomId, roomPwd, siteId: data.site_id || childInfo.site_id || '', childId: data.child_id || data.game_id || childInfo.child_id || childInfo.game_id || '', teamList: battleUserList, actStartTime, }; }