aboutsummaryrefslogtreecommitdiff
path: root/web/pw-server/src/lib/components/log_viewer/PlayerLog.svelte
diff options
context:
space:
mode:
Diffstat (limited to 'web/pw-server/src/lib/components/log_viewer/PlayerLog.svelte')
-rw-r--r--web/pw-server/src/lib/components/log_viewer/PlayerLog.svelte38
1 files changed, 33 insertions, 5 deletions
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}
<!-- The log should be rerendered when playerId changes -->
{#key playerId}
- <div class="log-contents">
- {#each playerLog as logTurn, turnNum}
- <LogTurn {logTurn} {turnNum} />
- {/each}
- </div>
+ <div class="log-contents">
+ {#each playerLog as logTurn, turnNum}
+ <LogTurn {logTurn} {turnNum} copyTurn={() => copyTurn(turnNum)} />
+ {/each}
+ </div>
{/key}
{/if}
</div>