From bed0312df8668dbe0e4eb34c4d937e86708e4a37 Mon Sep 17 00:00:00 2001 From: NicEastvillage Date: Fri, 5 Jun 2026 09:53:35 +0200 Subject: [PATCH 1/3] Remove unnecessary allocations --- frontend/src/pages/Home.svelte | 35 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/frontend/src/pages/Home.svelte b/frontend/src/pages/Home.svelte index 21fced9..baed0c0 100644 --- a/frontend/src/pages/Home.svelte +++ b/frontend/src/pages/Home.svelte @@ -332,15 +332,12 @@ async function getLatestBotInfo(tomlPath: string): Promise { ); if (index !== -1) { - players[index] = { - ...players[index], - displayName: found.config.settings.name, - icon: found.icon, - info: botInfo, - tags: found.config.details.tags, - }; - players = [...players]; + players[index].info = botInfo + players[index].displayName = found.config.settings.name + players[index].icon = found.icon + players[index].tags = found.config.details.tags + bluePlayers = updateTeam(bluePlayers); orangePlayers = updateTeam(orangePlayers); } @@ -365,22 +362,14 @@ async function getLatestScriptInfo(tomlPath: string): Promise { const oldAgentId = scripts[index].info.config.settings.agentId; const newAgentId = found.config.settings.agentId; - scripts[index] = { - ...scripts[index], - displayName: found.config.settings.name, - icon: found.config.settings.logoFile, - info: found, - tags: found.config.details.tags, - }; - - scripts = [...scripts]; - - if (enabledScripts[newAgentId] === undefined) { - enabledScripts[newAgentId] = false; - } + scripts[index].displayName = found.config.settings.name + scripts[index].icon = found.config.settings.logoFile + scripts[index].info = found + scripts[index].tags = found.config.details.tags - if (oldAgentId !== newAgentId && enabledScripts[oldAgentId] === undefined) { - enabledScripts[oldAgentId] = false; + enabledScripts[newAgentId] = enabledScripts[oldAgentId] + if (oldAgentId !== newAgentId) { + delete enabledScripts[oldAgentId] } } From 77e9cf8db47086849f828d5d98842d82406988b4 Mon Sep 17 00:00:00 2001 From: NicEastvillage Date: Fri, 5 Jun 2026 10:57:19 +0200 Subject: [PATCH 2/3] Use null to indicate no name override --- frontend/src/base-players.ts | 10 +++++----- .../components/Teams/PlayerOverridesModal.svelte | 13 +++++++------ frontend/src/components/Teams/TeamBotList.svelte | 5 ++--- frontend/src/index.ts | 6 +++--- frontend/src/pages/Home.svelte | 2 +- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/frontend/src/base-players.ts b/frontend/src/base-players.ts index 54f478c..dda68c2 100644 --- a/frontend/src/base-players.ts +++ b/frontend/src/base-players.ts @@ -9,7 +9,7 @@ export const BASE_PLAYERS: DraggablePlayer[] = [ id: crypto.randomUUID(), info: new HumanInfo(), tags: ["human"], - overrides: { name: "Human", loadout: null, autoStart: true }, + overrides: { name: null, loadout: null, autoStart: true }, }, { displayName: "Psyonix Beginner", @@ -20,7 +20,7 @@ export const BASE_PLAYERS: DraggablePlayer[] = [ skill: 0, }), tags: ["psyonix"], - overrides: { name: "", loadout: null, autoStart: true }, + overrides: { name: null, loadout: null, autoStart: true }, }, { displayName: "Psyonix Rookie", @@ -31,7 +31,7 @@ export const BASE_PLAYERS: DraggablePlayer[] = [ skill: 1, }), tags: ["psyonix"], - overrides: { name: "", loadout: null, autoStart: true }, + overrides: { name: null, loadout: null, autoStart: true }, }, { displayName: "Psyonix Pro", @@ -42,7 +42,7 @@ export const BASE_PLAYERS: DraggablePlayer[] = [ skill: 2, }), tags: ["psyonix"], - overrides: { name: "", loadout: null, autoStart: true }, + overrides: { name: null, loadout: null, autoStart: true }, }, { displayName: "Psyonix Allstar", @@ -53,6 +53,6 @@ export const BASE_PLAYERS: DraggablePlayer[] = [ skill: 3, }), tags: ["psyonix"], - overrides: { name: "", loadout: null, autoStart: true }, + overrides: { name: null, loadout: null, autoStart: true }, }, ]; diff --git a/frontend/src/components/Teams/PlayerOverridesModal.svelte b/frontend/src/components/Teams/PlayerOverridesModal.svelte index ad80020..d9dd4df 100644 --- a/frontend/src/components/Teams/PlayerOverridesModal.svelte +++ b/frontend/src/components/Teams/PlayerOverridesModal.svelte @@ -13,8 +13,7 @@ let { function clearOverrides() { if (player) { - player.overrides.name = - player.info instanceof PsyonixBotInfo ? "" : player.displayName; + player.overrides.name = null; player.overrides.loadout = null; player.overrides.autoStart = true; } @@ -22,8 +21,7 @@ function clearOverrides() { function hasNameOverride(): boolean { if (!player) return false; - let expectedName = player.info instanceof BotInfo ? player.displayName : ""; - return player.overrides.name !== expectedName; + return player.overrides.name !== null; } async function pickLoadoutOverride() { @@ -39,9 +37,12 @@ async function pickLoadoutOverride() {

In-game name:

player?.overrides.name ?? player.displayName, + (v) => player.overrides.name = (v === player.displayName) ? null : v + } >

diff --git a/frontend/src/components/Teams/TeamBotList.svelte b/frontend/src/components/Teams/TeamBotList.svelte index edee50b..59b80bd 100644 --- a/frontend/src/components/Teams/TeamBotList.svelte +++ b/frontend/src/components/Teams/TeamBotList.svelte @@ -65,9 +65,8 @@ function canAutoStart(d: DraggablePlayer): boolean { } function hasOverrides(d: DraggablePlayer): boolean { - let expectedName = d.info instanceof BotInfo ? d.displayName : ""; return ( - d.overrides.name !== expectedName || + d.overrides.name !== null || !d.overrides.autoStart || d.overrides.loadout != null ); @@ -169,7 +168,7 @@ const dnd_container_namespace = `team_${crypto.randomUUID()}`; ? "filter: brightness(var(--icon-brightness))" : "" } /> -

{bot.displayName === bot.overrides.name || (bot.info instanceof PsyonixBotInfo && bot.overrides.name === "") ? bot.displayName : `${bot.overrides.name}`}

+

{bot.overrides.name === null ? bot.displayName : bot.overrides.name}

{#if bot.uniquePathSegment} ({bot.uniquePathSegment}) {/if} diff --git a/frontend/src/index.ts b/frontend/src/index.ts index 26e0c3e..6adf4f9 100644 --- a/frontend/src/index.ts +++ b/frontend/src/index.ts @@ -49,7 +49,7 @@ export function parseSuperJSON(item: string | null): any | null { } export interface PlayerFieldOverrides { - name: string; + name: string | null; loadout: LoadoutConfig | null; autoStart: boolean; } @@ -77,7 +77,7 @@ export function draggablePlayerToPlayerJs(d: DraggablePlayer): PlayerJs { if (d.info instanceof BotInfo) { const player = BotInfo.createFrom(structuredClone(d.info)); // Apply overrides - player.config.settings.name = d.overrides.name; + player.config.settings.name = d.overrides.name ?? player.config.settings.name; player.loadout = d.overrides.loadout ?? d.info.loadout; if (!d.overrides.autoStart) { player.config.settings.runCommand = ""; @@ -96,7 +96,7 @@ export function draggablePlayerToPlayerJs(d: DraggablePlayer): PlayerJs { if (d.info instanceof PsyonixBotInfo) { const player = PsyonixBotInfo.createFrom(structuredClone(d.info)); // Apply overrides - player.name = d.overrides.name; + player.name = d.overrides.name ?? ""; // Emptry string means random name for Psyonix bots player.loadout = d.overrides.loadout ?? d.info.loadout; return { diff --git a/frontend/src/pages/Home.svelte b/frontend/src/pages/Home.svelte index baed0c0..13ef08c 100644 --- a/frontend/src/pages/Home.svelte +++ b/frontend/src/pages/Home.svelte @@ -272,7 +272,7 @@ async function updateBots() { tags: x.config.details.tags, uniquePathSegment, overrides: { - name: x.config.settings.name, + name: null, loadout: null, autoStart: true, }, From c1e029435b78eedaa7db00ede3ff2c42d861c168 Mon Sep 17 00:00:00 2001 From: NicEastvillage Date: Fri, 5 Jun 2026 18:37:43 +0200 Subject: [PATCH 3/3] Fix typo --- frontend/src/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/src/index.ts b/frontend/src/index.ts index 6adf4f9..3aa5e94 100644 --- a/frontend/src/index.ts +++ b/frontend/src/index.ts @@ -77,7 +77,8 @@ export function draggablePlayerToPlayerJs(d: DraggablePlayer): PlayerJs { if (d.info instanceof BotInfo) { const player = BotInfo.createFrom(structuredClone(d.info)); // Apply overrides - player.config.settings.name = d.overrides.name ?? player.config.settings.name; + player.config.settings.name = + d.overrides.name ?? player.config.settings.name; player.loadout = d.overrides.loadout ?? d.info.loadout; if (!d.overrides.autoStart) { player.config.settings.runCommand = ""; @@ -96,7 +97,7 @@ export function draggablePlayerToPlayerJs(d: DraggablePlayer): PlayerJs { if (d.info instanceof PsyonixBotInfo) { const player = PsyonixBotInfo.createFrom(structuredClone(d.info)); // Apply overrides - player.name = d.overrides.name ?? ""; // Emptry string means random name for Psyonix bots + player.name = d.overrides.name ?? ""; // Empty names are replaced with random names for Psyonix bots player.loadout = d.overrides.loadout ?? d.info.loadout; return {