fix older replays

This commit is contained in:
Zutatensuppe 2021-07-08 00:00:17 +02:00
parent d009f84156
commit 2b0dc392da
10 changed files with 105 additions and 54 deletions

View file

@ -170,11 +170,11 @@ function setImageUrl(gameId: string, imageUrl: string): void {
}
function getScoreMode(gameId: string): ScoreMode {
return GAMES[gameId].scoreMode || ScoreMode.FINAL
return GAMES[gameId].scoreMode
}
function getSnapMode(gameId: string): SnapMode {
return GAMES[gameId].snapMode || SnapMode.NORMAL
return GAMES[gameId].snapMode
}
function isFinished(gameId: string): boolean {

View file

@ -75,9 +75,9 @@ export interface Game {
players: Array<EncodedPlayer>
puzzle: Puzzle
evtInfos: Record<string, EvtInfo>
scoreMode?: ScoreMode
shapeMode?: ShapeMode
snapMode?: SnapMode
scoreMode: ScoreMode
shapeMode: ShapeMode
snapMode: SnapMode
rng: GameRng
}
@ -216,3 +216,24 @@ export enum SnapMode {
NORMAL = 0,
REAL = 1,
}
export const DefaultScoreMode = (v: any): ScoreMode => {
if (v === ScoreMode.FINAL || v === ScoreMode.ANY) {
return v
}
return ScoreMode.FINAL
}
export const DefaultShapeMode = (v: any): ShapeMode => {
if (v === ShapeMode.NORMAL || v === ShapeMode.ANY || v === ShapeMode.FLAT) {
return v
}
return ShapeMode.NORMAL
}
export const DefaultSnapMode = (v: any): SnapMode => {
if (v === SnapMode.NORMAL || v === SnapMode.REAL) {
return v
}
return SnapMode.NORMAL
}

View file

@ -130,9 +130,9 @@ function encodeGame(data: Game): EncodedGame {
data.puzzle,
data.players,
data.evtInfos,
data.scoreMode || ScoreMode.FINAL,
data.shapeMode || ShapeMode.ANY,
data.snapMode || SnapMode.NORMAL,
data.scoreMode,
data.shapeMode,
data.snapMode,
]
}

View file

@ -1,7 +1,7 @@
import fs from 'fs'
import Protocol from '../common/Protocol'
import Time from '../common/Time'
import { Timestamp } from '../common/Types'
import { DefaultScoreMode, DefaultShapeMode, DefaultSnapMode, Timestamp } from '../common/Types'
import { logger } from './../common/Util'
import { DATA_DIR } from './../server/Dirs'
@ -82,10 +82,16 @@ const get = (
return []
}
const log = fs.readFileSync(file, 'utf-8').split("\n")
return log.filter(line => !!line).map(line => {
const lines = fs.readFileSync(file, 'utf-8').split("\n")
const log = lines.filter(line => !!line).map(line => {
return JSON.parse(`[${line}]`)
})
if (offset === 0 && log.length > 0) {
log[0][5] = DefaultScoreMode(log[0][5])
log[0][6] = DefaultShapeMode(log[0][6])
log[0][7] = DefaultSnapMode(log[0][7])
}
return log
}
export default {

View file

@ -1,6 +1,6 @@
import fs from 'fs'
import GameCommon from './../common/GameCommon'
import { Game, Piece, ScoreMode, ShapeMode, SnapMode } from './../common/Types'
import { DefaultScoreMode, DefaultShapeMode, DefaultSnapMode, Game, Piece } from './../common/Types'
import Util, { logger } from './../common/Util'
import { Rng } from './../common/Rng'
import { DATA_DIR } from './Dirs'
@ -58,9 +58,9 @@ function loadGame(gameId: string): void {
puzzle: game.puzzle,
players: game.players,
evtInfos: {},
scoreMode: game.scoreMode || ScoreMode.FINAL,
shapeMode: game.shapeMode || ShapeMode.ANY,
snapMode: game.snapMode || SnapMode.NORMAL,
scoreMode: DefaultScoreMode(game.scoreMode),
shapeMode: DefaultShapeMode(game.shapeMode),
snapMode: DefaultSnapMode(game.snapMode),
}
GameCommon.setGame(gameObject.id, gameObject)
}

View file

@ -89,9 +89,9 @@ app.get('/api/replay-data', async (req, res): Promise<void> => {
log[0][2],
log[0][3],
log[0][4],
log[0][5] || ScoreMode.FINAL,
log[0][6] || ShapeMode.NORMAL,
log[0][7] || SnapMode.NORMAL,
log[0][5],
log[0][6],
log[0][7],
)
}
res.send({ log, game: game ? Util.encodeGame(game) : null })