zenno/race/spurt: add dueling info
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { ComputedSeries } from '$lib/chart';
|
import type { ComputedSeries } from '$lib/chart';
|
||||||
import { AptitudeLevel, inverseSpurtSpeed, RunningStyle, spurtSpeed, Stat } from '$lib/race';
|
import { AptitudeLevel, duelSpeedMod, inverseSpurtSpeed, RunningStyle, spurtSpeed, Stat } from '$lib/race';
|
||||||
import StatChart from '$lib/StatChart.svelte';
|
import StatChart from '$lib/StatChart.svelte';
|
||||||
import CalcInfo from '../CalcInfo.svelte';
|
import CalcInfo from '../CalcInfo.svelte';
|
||||||
|
|
||||||
@@ -26,6 +26,7 @@
|
|||||||
const speedStat = $derived(rawSpeed + careerMod);
|
const speedStat = $derived(rawSpeed + careerMod);
|
||||||
const gutsStat = $derived(rawGuts + careerMod);
|
const gutsStat = $derived(rawGuts + careerMod);
|
||||||
const speed = $derived(spurtSpeed(speedStat, gutsStat, style, distanceApt, raceLen));
|
const speed = $derived(spurtSpeed(speedStat, gutsStat, style, distanceApt, raceLen));
|
||||||
|
const duelBonus = $derived(duelSpeedMod(gutsStat));
|
||||||
|
|
||||||
const sProf = $derived([
|
const sProf = $derived([
|
||||||
inverseSpurtSpeed(speed, gutsStat, RunningStyle.FrontRunner, AptitudeLevel.S, raceLen) - careerMod,
|
inverseSpurtSpeed(speed, gutsStat, RunningStyle.FrontRunner, AptitudeLevel.S, raceLen) - careerMod,
|
||||||
@@ -45,17 +46,30 @@
|
|||||||
skillSpeeds.map((v) => [v, inverseSpurtSpeed(speed + v, gutsStat, opponentStyle, AptitudeLevel.S, raceLen) - careerMod]),
|
skillSpeeds.map((v) => [v, inverseSpurtSpeed(speed + v, gutsStat, opponentStyle, AptitudeLevel.S, raceLen) - careerMod]),
|
||||||
);
|
);
|
||||||
|
|
||||||
const y: Array<ComputedSeries | null> = $derived([
|
const speedChart: Array<ComputedSeries | null> = $derived([
|
||||||
{ label: 'Aptitude S', y: (x) => spurtSpeed(x, gutsStat, style, AptitudeLevel.S, raceLen) },
|
{ label: 'Aptitude S', y: (x) => spurtSpeed(x, gutsStat, style, AptitudeLevel.S, raceLen) },
|
||||||
{ label: 'Aptitude A', y: (x) => spurtSpeed(x, gutsStat, style, AptitudeLevel.A, raceLen) },
|
{
|
||||||
distanceApt < AptitudeLevel.A
|
label: `Aptitude ${AptitudeLevel[distanceApt]} + Dueling`,
|
||||||
|
y: (x) => spurtSpeed(x, gutsStat, style, distanceApt, raceLen) + duelBonus,
|
||||||
|
},
|
||||||
|
distanceApt !== AptitudeLevel.S
|
||||||
? { label: `Aptitude ${AptitudeLevel[distanceApt]}`, y: (x) => spurtSpeed(x, gutsStat, style, distanceApt, raceLen) }
|
? { label: `Aptitude ${AptitudeLevel[distanceApt]}`, y: (x) => spurtSpeed(x, gutsStat, style, distanceApt, raceLen) }
|
||||||
: null,
|
: null,
|
||||||
]);
|
]);
|
||||||
|
const gutsChart: Array<ComputedSeries | null> = $derived([
|
||||||
|
{ label: 'Aptitude S', y: (x) => spurtSpeed(speedStat, x, style, AptitudeLevel.S, raceLen) },
|
||||||
|
{
|
||||||
|
label: `Aptitude ${AptitudeLevel[distanceApt]} + Dueling`,
|
||||||
|
y: (x) => spurtSpeed(speedStat, x, style, distanceApt, raceLen) + duelSpeedMod(x),
|
||||||
|
},
|
||||||
|
distanceApt !== AptitudeLevel.S
|
||||||
|
? { label: `Aptitude ${AptitudeLevel[distanceApt]}`, y: (x) => spurtSpeed(speedStat, x, style, distanceApt, raceLen) }
|
||||||
|
: null,
|
||||||
|
]);
|
||||||
|
|
||||||
const range: [number, number] = $derived([
|
const range: [number, number] = $derived([
|
||||||
spurtSpeed(200, gutsStat, RunningStyle.GreatEscape, AptitudeLevel.C, raceLen),
|
spurtSpeed(200, gutsStat, RunningStyle.GreatEscape, AptitudeLevel.C, raceLen),
|
||||||
spurtSpeed(2000, gutsStat, RunningStyle.EndCloser, AptitudeLevel.S, raceLen),
|
spurtSpeed(2000, gutsStat, RunningStyle.EndCloser, AptitudeLevel.S, raceLen) + duelBonus,
|
||||||
]);
|
]);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -94,7 +108,10 @@
|
|||||||
<input type="checkbox" id="isCareer" role="switch" bind:checked={isCareer} class="min-h-6 min-w-6 align-middle" />
|
<input type="checkbox" id="isCareer" role="switch" bind:checked={isCareer} class="min-h-6 min-w-6 align-middle" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<CalcInfo title="Target Spurt Speed" class="mx-auto mt-8 max-w-md">{speed.toFixed(3)} m/s</CalcInfo>
|
<div class="mx-auto mt-8 flex max-w-3xl flex-col md:flex-row">
|
||||||
|
<CalcInfo title="Target Spurt Speed" class="flex-1">{speed.toFixed(3)} m/s</CalcInfo>
|
||||||
|
<CalcInfo title="Dueling Bonus" class="flex-1">+{duelBonus.toFixed(3)} m/s</CalcInfo>
|
||||||
|
</div>
|
||||||
{#each [[AptitudeLevel.A, aProf] as const, [AptitudeLevel.S, sProf] as const] as [level, inv] (level)}
|
{#each [[AptitudeLevel.A, aProf] as const, [AptitudeLevel.S, sProf] as const] as [level, inv] (level)}
|
||||||
<div class="mx-auto max-w-3xl">
|
<div class="mx-auto max-w-3xl">
|
||||||
<span class="mt-8 block w-full">
|
<span class="mt-8 block w-full">
|
||||||
@@ -123,6 +140,7 @@
|
|||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mx-auto h-60 max-w-3xl place-content-center py-4 md:h-96">
|
<div class="mx-auto grid h-96 grid-cols-1 py-4 md:grid-cols-2">
|
||||||
<StatChart stat={Stat.Speed} {y} yLabel="Spurt Speed (m/s)" xRule={speedStat} {range} />
|
<StatChart stat={Stat.Speed} y={speedChart} yLabel="Spurt Speed (m/s)" xRule={speedStat} {range} />
|
||||||
|
<StatChart stat={Stat.Guts} y={gutsChart} yLabel="Spurt Speed (m/s)" xRule={gutsStat} {range} />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user