From 919f8549ae59e8362c1965fbc704486042dedc0e Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Tue, 4 Feb 2025 23:38:00 +0100 Subject: [PATCH] restore bag when loading backup file --- server/trivabble-server.js | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/server/trivabble-server.js b/server/trivabble-server.js index dc036b4..b6ff155 100644 --- a/server/trivabble-server.js +++ b/server/trivabble-server.js @@ -106,6 +106,20 @@ function shuffleInPlace(a) { a[j] = x; } } +function expandAndShuffleBag(bag, factor) { + let newBag = []; + while (factor >= 1) { + newBag = newBag.concat(bag); + factor--; + } + if (Math.round(bag.length * factor) > 0) { + let shuffleBag = bag.slice (); + shuffleInPlace(shuffleBag); + newBag = newBag.concat(shuffleBag.slice(0, Math.round(shuffleBag.length * factor))); + } + shuffleInPlace(newBag); + return (newBag); +} function Game() { this.init(); @@ -239,17 +253,7 @@ Game.prototype.init = function (lang, label, factor) { this.lastUpdated = new Date(); this.currentPlayer = ""; - factor = this.factor; - this.bag = []; - while (factor > 1) { - this.bag = this.bag.concat(bag.slice()); - factor--; - } - if (Math.round(bag.length * factor) > 0) { - shuffleInPlace(bag); - this.bag = this.bag.concat(bag.slice(0, Math.round(bag.length * factor))); - } - shuffleInPlace(this.bag); + this.bag = expandAndShuffleBag(bag, this.factor); }; Game.prototype.toJSON = function () { @@ -273,7 +277,7 @@ Game.fromJSON = function (obj) { game.factor = obj.factor || DEFAULT_BAG_FACTOR; game.board = obj.board || newBoard(game.label); game.lang = obj.lang || DEFAULT_BOARD_LANG; - game.bag = boardTilesPerLang[game.lang].bag.slice(); + game.bag = obj.bag || expandAndShuffleBag(boardTilesPerLang[game.lang].bag.slice(), game.factor); game.letterValues = boardTilesPerLang[game.lang].letterValues; game.racks = obj.racks || {}; game.scores = obj.scores || {}; -- 2.30.2