diff --git a/zenno/src/lib/all.ts b/zenno/src/lib/all.ts index 772088a..0e2c415 100644 --- a/zenno/src/lib/all.ts +++ b/zenno/src/lib/all.ts @@ -44,6 +44,11 @@ export const PAGES = { name: 'Gate Calculator', description: 'Calculate the importance of acceleration effects at the starting gate.', }, + { + route: resolve('/race/carryover'), + name: 'Carryover Calculator', + description: 'Calculate the importance of acceleration and speed carryover at the start of late race.', + }, ] satisfies Page[], career: [ { diff --git a/zenno/src/routes/race/carryover/+page.svelte b/zenno/src/routes/race/carryover/+page.svelte new file mode 100644 index 0000000..8748ddc --- /dev/null +++ b/zenno/src/routes/race/carryover/+page.svelte @@ -0,0 +1,343 @@ + + +

Carryover Calculator

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + {raceLen}m + + + +
+ +
+
+ Delay (m) + Duration + Accel + +
+ {#each rawAccels as skill, i (i)} +
+ {skill.x}m + {skill.dur}s + {skill.accel} + +
+ {/each} +
+ + + + +
+
+ + Quick Setup + +
+
+ {#each quick as q (q.name)} + + {/each} +
+
+ +
+
+ + +
+
+ = 0} class="peer my-auto h-6 w-6 align-middle" /> + +
+
+
+ +{#snippet info(name: string, unit: string, val: number, val2?: number)} + + {#if val2 == null} + {val.toFixed(3)} {unit} + {:else} + {val.toFixed(3)} – {val2.toFixed(3)} {unit} + {/if} + +{/snippet} + +
+ {@render info('Mid-Race Speed', 'm/s', midSpeed[0], midSpeed[1])} + {@render info('Base Acceleration', 'm/s²', lateAccel)} + {@render info('Spurt Speed', 'm/s', spurtSpeed)} +
+
+ {@render info('Accel Distance', 'm', distance[1] - phases[race.Phase.MidRace], distance[0] - phases[race.Phase.MidRace])} + {@render info('Accel Time', 's', time[1], time[0])} + {@render info('Finish Time', 's', finishTime[1], finishTime[0])} +
+
+ {@render info('Carryover Gain', 'L', carryoverGain[1], carryoverGain[0])} + {@render info('Carryover + Accel Gain', 'L', skillGain[1], skillGain[0])} +
+
+
the chart seems to have didn't
+