some more type hinting etc

This commit is contained in:
Zutatensuppe 2021-05-17 02:32:33 +02:00
parent 432e1b6668
commit ee7804a594
18 changed files with 161 additions and 150 deletions

View file

@ -74,9 +74,6 @@ const logger = (...pre) => {
// get a unique id
const uniqId = () => Date.now().toString(36) + Math.random().toString(36).substring(2);
function encodeShape(data) {
if (typeof data === 'number') {
return data;
}
/* encoded in 1 byte:
00000000
^^ top
@ -90,9 +87,6 @@ function encodeShape(data) {
| ((data.left + 1) << 6);
}
function decodeShape(data) {
if (typeof data !== 'number') {
return data;
}
return {
top: (data >> 0 & 0b11) - 1,
right: (data >> 2 & 0b11) - 1,
@ -101,15 +95,9 @@ function decodeShape(data) {
};
}
function encodeTile(data) {
if (Array.isArray(data)) {
return data;
}
return [data.idx, data.pos.x, data.pos.y, data.z, data.owner, data.group];
}
function decodeTile(data) {
if (!Array.isArray(data)) {
return data;
}
return {
idx: data[0],
pos: {
@ -122,9 +110,6 @@ function decodeTile(data) {
};
}
function encodePlayer(data) {
if (Array.isArray(data)) {
return data;
}
return [
data.id,
data.x,
@ -138,9 +123,6 @@ function encodePlayer(data) {
];
}
function decodePlayer(data) {
if (!Array.isArray(data)) {
return data;
}
return {
id: data[0],
x: data[1],
@ -461,8 +443,17 @@ var Time = {
durationStr,
};
const SCORE_MODE_FINAL = 0;
const SCORE_MODE_ANY = 1;
var PieceEdge;
(function (PieceEdge) {
PieceEdge[PieceEdge["Flat"] = 0] = "Flat";
PieceEdge[PieceEdge["Out"] = 1] = "Out";
PieceEdge[PieceEdge["In"] = -1] = "In";
})(PieceEdge || (PieceEdge = {}));
var ScoreMode;
(function (ScoreMode) {
ScoreMode[ScoreMode["FINAL"] = 0] = "FINAL";
ScoreMode[ScoreMode["ANY"] = 1] = "ANY";
})(ScoreMode || (ScoreMode = {}));
const IDLE_TIMEOUT_SEC = 30;
// Map<gameId, Game>
const GAMES = {};
@ -502,11 +493,11 @@ function getPlayerIdByIndex(gameId, playerIndex) {
return null;
}
function getPlayer(gameId, playerId) {
let idx = getPlayerIndexById(gameId, playerId);
const idx = getPlayerIndexById(gameId, playerId);
return Util.decodePlayer(GAMES[gameId].players[idx]);
}
function setPlayer(gameId, playerId, player) {
let idx = getPlayerIndexById(gameId, playerId);
const idx = getPlayerIndexById(gameId, playerId);
if (idx === -1) {
GAMES[gameId].players.push(Util.encodePlayer(player));
}
@ -580,7 +571,7 @@ function setImageUrl(gameId, imageUrl) {
GAMES[gameId].puzzle.info.imageUrl = imageUrl;
}
function getScoreMode(gameId) {
return GAMES[gameId].scoreMode || SCORE_MODE_FINAL;
return GAMES[gameId].scoreMode || ScoreMode.FINAL;
}
function isFinished(gameId) {
return getFinishedTileCount(gameId) === getTileCount(gameId);
@ -601,6 +592,7 @@ function getTilesSortedByZIndex(gameId) {
function changePlayer(gameId, playerId, change) {
const player = getPlayer(gameId, playerId);
for (let k of Object.keys(change)) {
// @ts-ignore
player[k] = change[k];
}
setPlayer(gameId, playerId, player);
@ -614,6 +606,7 @@ function changeData(gameId, change) {
function changeTile(gameId, tileIdx, change) {
for (let k of Object.keys(change)) {
const tile = Util.decodeTile(GAMES[gameId].puzzle.tiles[tileIdx]);
// @ts-ignore
tile[k] = change[k];
GAMES[gameId].puzzle.tiles[tileIdx] = Util.encodeTile(tile);
}
@ -832,7 +825,7 @@ const getPlayerName = (gameId, playerId) => {
};
const getPlayerPoints = (gameId, playerId) => {
const p = getPlayer(gameId, playerId);
return p ? p.points : null;
return p ? p.points : 0;
};
// determine if two tiles are grouped together
const areGrouped = (gameId, tileIdx1, tileIdx2) => {
@ -1023,10 +1016,10 @@ function handleInput$1(gameId, playerId, input, ts) {
finishTiles(gameId, tileIdxs);
_tileChanges(tileIdxs);
let points = getPlayerPoints(gameId, playerId);
if (getScoreMode(gameId) === SCORE_MODE_FINAL) {
if (getScoreMode(gameId) === ScoreMode.FINAL) {
points += tileIdxs.length;
}
else if (getScoreMode(gameId) === SCORE_MODE_ANY) {
else if (getScoreMode(gameId) === ScoreMode.ANY) {
points += 1;
}
else ;
@ -1075,7 +1068,7 @@ function handleInput$1(gameId, playerId, input, ts) {
break;
}
}
if (snapped && getScoreMode(gameId) === SCORE_MODE_ANY) {
if (snapped && getScoreMode(gameId) === ScoreMode.ANY) {
const points = getPlayerPoints(gameId, playerId) + 1;
changePlayer(gameId, playerId, { d, ts, points });
_playerChange();
@ -1150,8 +1143,6 @@ var GameCommon = {
getStartTs,
getFinishTs,
handleInput: handleInput$1,
SCORE_MODE_FINAL,
SCORE_MODE_ANY,
};
const __filename = fileURLToPath(import.meta.url);
@ -1343,7 +1334,7 @@ async function createPuzzle(rng, targetTiles, image, ts) {
}
// then shuffle the positions
positions = rng.shuffle(positions);
tiles = tiles.map(tile => {
const pieces = tiles.map(tile => {
return Util.encodeTile({
idx: tile.idx,
group: 0,
@ -1362,7 +1353,7 @@ async function createPuzzle(rng, targetTiles, image, ts) {
// Complete puzzle object
return {
// tiles array
tiles,
tiles: pieces,
// game data for puzzle, data changes during the game
data: {
// TODO: maybe calculate this each time?
@ -1500,7 +1491,7 @@ function loadGame(gameId) {
puzzle: game.puzzle,
players: game.players,
evtInfos: {},
scoreMode: game.scoreMode || GameCommon.SCORE_MODE_FINAL,
scoreMode: game.scoreMode || ScoreMode.FINAL,
};
GameCommon.setGame(gameObject.id, gameObject);
}
@ -1746,7 +1737,7 @@ wss.on('message', async ({ socket, data }) => {
throw `[gamelog ${gameId} does not exist... ]`;
}
const log = GameLog.get(gameId);
const game = await Game.createGameObject(gameId, log[0][2], log[0][3], log[0][4], log[0][5] || GameCommon.SCORE_MODE_FINAL);
const game = await Game.createGameObject(gameId, log[0][2], log[0][3], log[0][4], log[0][5] || ScoreMode.FINAL);
notify([Protocol.EV_SERVER_INIT_REPLAY, Util.encodeGame(game), log], [socket]);
}
break;