diff options
Diffstat (limited to 'rules.js')
-rw-r--r-- | rules.js | 55 |
1 files changed, 42 insertions, 13 deletions
@@ -209,25 +209,54 @@ function logi(msg) { game.log.push(">" + msg) } -function clear_undo() { - game.undo = [] +function deep_copy(original) { + if (Array.isArray(original)) { + let n = original.length + let copy = new Array(n) + for (let i = 0; i < n; ++i) { + let v = original[i] + if (typeof v === "object" && v !== null) + copy[i] = deep_copy(v) + else + copy[i] = v + } + return copy + } else { + let copy = {} + for (let i in original) { + let v = original[i] + if (typeof v === "object" && v !== null) + copy[i] = deep_copy(v) + else + copy[i] = v + } + return copy + } } function push_undo() { - game.undo.push(JSON.stringify(game, (k,v) => { - if (k === 'undo') return 0 - if (k === 'log') return v.length - return v - })) + let copy = {} + for (let k in game) { + let v = game[k] + if (k === "undo") continue + else if (k === "log") v = v.length + else if (typeof v === "object" && v !== null) v = deep_copy(v) + copy[k] = v + } + game.undo.push(copy) } function pop_undo() { - let save_undo = game.undo let save_log = game.log - game = JSON.parse(save_undo.pop()) - game.undo = save_undo + let save_undo = game.undo + game = save_undo.pop() save_log.length = game.log game.log = save_log + game.undo = save_undo +} + +function clear_undo() { + game.undo = [] } function gen_action(action, argument=undefined) { @@ -3045,6 +3074,9 @@ exports.setup = function (seed, scenario, options) { game = { seed: seed, + log: [], + undo: [], + open: options.open_hands ? 1 : 0, active: 0, @@ -3074,9 +3106,6 @@ exports.setup = function (seed, scenario, options) { [0,0,0,0,0,0], ], players: [], - - log: [], - undo: [], } for (let i = 0; i < player_count; ++i) { |