From 4aa8ca8303b5d25b745e8cae71e283455945bdd1 Mon Sep 17 00:00:00 2001 From: Ilion Beyst Date: Sun, 13 Nov 2022 10:05:15 +0100 Subject: copy input gamestate from player log --- .../src/lib/components/log_viewer/PlayerLog.svelte | 38 +++++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'web/pw-server/src/lib/components/log_viewer/PlayerLog.svelte') diff --git a/web/pw-server/src/lib/components/log_viewer/PlayerLog.svelte b/web/pw-server/src/lib/components/log_viewer/PlayerLog.svelte index 450fdf2..f21a038 100644 --- a/web/pw-server/src/lib/components/log_viewer/PlayerLog.svelte +++ b/web/pw-server/src/lib/components/log_viewer/PlayerLog.svelte @@ -3,11 +3,39 @@ import LogTurn from "./LogTurn.svelte"; export let matchLog: string; + export let matchData: object; export let playerId: number; let playerLog: PlayerLog; let showRawStderr = false; + async function copyTurn(turnNum: number) { + // find state for turnNum + let gamestate = matchLog + .split("\n") + .slice(0, -1) + .map((line) => JSON.parse(line)) + .filter((json) => json["type"] == "gamestate") + .at(turnNum); + + let numPlayers = matchData["players"].length; + let rotatePlayerNum = (playerNum: number | null) => { + if (playerNum === null) { + return null; + } + return ((numPlayers + playerNum - playerId) % numPlayers) + 1; + }; + + gamestate["planets"].forEach((planet) => { + planet["owner"] = rotatePlayerNum(planet["owner"]); + }); + gamestate["expeditions"].forEach((expedition) => { + expedition["owner"] = rotatePlayerNum(expedition["owner"]); + }); + + await navigator.clipboard.writeText(JSON.stringify(gamestate)); + } + $: if (matchLog) { playerLog = parsePlayerLog(playerId, matchLog); } else { @@ -23,11 +51,11 @@ {:else} {#key playerId} -
- {#each playerLog as logTurn, turnNum} - - {/each} -
+
+ {#each playerLog as logTurn, turnNum} + copyTurn(turnNum)} /> + {/each} +
{/key} {/if} -- cgit v1.2.3