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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -2,7 +2,7 @@
<head>
<title>🧩 jigsaw.hyottoko.club</title>
<script type="module" crossorigin src="/assets/index.2f18bf13.js"></script>
<script type="module" crossorigin src="/assets/index.85898c1b.js"></script>
<link rel="modulepreload" href="/assets/vendor.00b608ff.js">
<link rel="stylesheet" href="/assets/index.421011a7.css">
</head>

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;