zenno/race/stam: beginning of stamina calculator
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
<script lang="ts">
|
||||
import * as course from '$lib/course';
|
||||
import * as race from '$lib/race';
|
||||
|
||||
let rawStats = $state({
|
||||
[race.Stat.Speed]: 1200,
|
||||
[race.Stat.Stamina]: 1200,
|
||||
[race.Stat.Power]: 1200,
|
||||
[race.Stat.Guts]: 1200,
|
||||
[race.Stat.Wit]: 1200,
|
||||
});
|
||||
let style = $state(race.RunningStyle.FrontRunner);
|
||||
let surfaceApt = $state(race.AptitudeLevel.A);
|
||||
let distanceApt = $state(race.AptitudeLevel.S);
|
||||
let styleApt = $state(race.AptitudeLevel.A);
|
||||
let mood = $state(race.Mood.Normal);
|
||||
let isCareer = $state(false);
|
||||
let skillStatBonus = $state({
|
||||
[race.Stat.Speed]: 0,
|
||||
[race.Stat.Stamina]: 0,
|
||||
[race.Stat.Power]: 0,
|
||||
[race.Stat.Guts]: 0,
|
||||
[race.Stat.Wit]: 0,
|
||||
});
|
||||
|
||||
let raceLen = $state(2000);
|
||||
let slopesRaw: course.Slope[] = $state([]);
|
||||
let surface = $state(race.Surface.Turf);
|
||||
let conditions = $state(race.GroundConditions.Firm);
|
||||
let thresh1: race.Stat | undefined = $state();
|
||||
let thresh2: race.Stat | undefined = $state();
|
||||
|
||||
const baseStats = $derived({
|
||||
[race.Stat.Speed]: race.baseStat(mood, rawStats[race.Stat.Speed]),
|
||||
[race.Stat.Stamina]: race.baseStat(mood, rawStats[race.Stat.Stamina]),
|
||||
[race.Stat.Power]: race.baseStat(mood, rawStats[race.Stat.Power]),
|
||||
[race.Stat.Guts]: race.baseStat(mood, rawStats[race.Stat.Guts]),
|
||||
[race.Stat.Wit]: race.baseStat(mood, rawStats[race.Stat.Wit]),
|
||||
});
|
||||
|
||||
const thresholdMod = $derived.by(() => {
|
||||
if (thresh1 == null) {
|
||||
if (thresh2 == null) {
|
||||
return 1;
|
||||
}
|
||||
return race.thresholdMod(baseStats[thresh2]);
|
||||
}
|
||||
if (thresh2 == null) {
|
||||
return race.thresholdMod(baseStats[thresh1]);
|
||||
}
|
||||
return race.thresholdMod(baseStats[thresh1], baseStats[thresh2]);
|
||||
});
|
||||
|
||||
const adjStats = $derived({
|
||||
[race.Stat.Speed]: race.adjustedStat(race.Stat.Speed, baseStats[race.Stat.Speed], isCareer, surface, conditions, thresholdMod),
|
||||
[race.Stat.Stamina]: race.adjustedStat(race.Stat.Stamina, baseStats[race.Stat.Stamina], isCareer),
|
||||
[race.Stat.Power]: race.adjustedStat(race.Stat.Power, baseStats[race.Stat.Power], isCareer, surface, conditions),
|
||||
[race.Stat.Guts]: race.adjustedStat(race.Stat.Guts, baseStats[race.Stat.Guts], isCareer),
|
||||
[race.Stat.Wit]: race.adjustedStat(race.Stat.Wit, baseStats[race.Stat.Wit], isCareer, styleApt),
|
||||
});
|
||||
|
||||
const stats = $derived({
|
||||
[race.Stat.Speed]: race.finalStat(adjStats[race.Stat.Speed], skillStatBonus[race.Stat.Speed]),
|
||||
[race.Stat.Stamina]: race.finalStat(adjStats[race.Stat.Stamina], skillStatBonus[race.Stat.Stamina]),
|
||||
[race.Stat.Power]: race.finalStat(adjStats[race.Stat.Power], skillStatBonus[race.Stat.Power]),
|
||||
[race.Stat.Guts]: race.finalStat(adjStats[race.Stat.Guts], skillStatBonus[race.Stat.Guts]),
|
||||
[race.Stat.Wit]: race.finalStat(adjStats[race.Stat.Wit], skillStatBonus[race.Stat.Wit]),
|
||||
});
|
||||
|
||||
let pdmTime = $state(0);
|
||||
let rushedEnabled = $state(true);
|
||||
let spotStruggleEnabled = $state(true);
|
||||
|
||||
const phases = $derived(course.phases(raceLen));
|
||||
const sectionSlopes = $derived(course.splitSectionSlopes(raceLen, slopesRaw));
|
||||
|
||||
const sectionLen = $derived(raceLen / course.SECTIONS.length);
|
||||
const phaseSpeed = $derived({
|
||||
[race.Phase.EarlyRace]: race.sectionSpeed(raceLen, baseStats[race.Stat.Wit], stats[race.Stat.Wit], style, race.Phase.EarlyRace),
|
||||
[race.Phase.MidRace]: race.sectionSpeed(raceLen, baseStats[race.Stat.Wit], stats[race.Stat.Wit], style, race.Phase.MidRace),
|
||||
});
|
||||
|
||||
const spurtSpeed = $derived(race.spurtSpeed(stats[race.Stat.Speed], stats[race.Stat.Guts], style, distanceApt, raceLen));
|
||||
const spurtHPRate = $derived(race.hpPerSecond(raceLen, surface, conditions, stats[race.Stat.Guts], race.Phase.LateRace, spurtSpeed));
|
||||
const needHP = $derived(race.fullSpurtHP(raceLen, spurtSpeed, spurtHPRate));
|
||||
</script>
|
||||
Reference in New Issue
Block a user