From ee84550dc357e3268a594d88cc43d4f0657a075d Mon Sep 17 00:00:00 2001 From: Andrew Reynolds Date: Sun, 13 Jul 2025 17:42:02 -0400 Subject: [PATCH] Adding filtering to only show best times. Add labels to clear up raw vs pax --- frontend/src/components/DisplayDriver.vue | 4 - frontend/src/components/DisplayRuns.vue | 127 ++++++++++++++++++---- 2 files changed, 105 insertions(+), 26 deletions(-) diff --git a/frontend/src/components/DisplayDriver.vue b/frontend/src/components/DisplayDriver.vue index 8982714..1e877ef 100644 --- a/frontend/src/components/DisplayDriver.vue +++ b/frontend/src/components/DisplayDriver.vue @@ -6,14 +6,10 @@ const driversName = ref(runs[0].driverName); const carNumber = ref(runs[0].carNumber); const carClass = ref(runs[0].carClass); - const bestRawTime = ref(Math.min(...runs.map(run => run.rawTime))); - const bestPaxTime = ref(Math.min(...runs.map(run => run.paxTime))); diff --git a/frontend/src/components/DisplayRuns.vue b/frontend/src/components/DisplayRuns.vue index 3060eb9..6617f6e 100644 --- a/frontend/src/components/DisplayRuns.vue +++ b/frontend/src/components/DisplayRuns.vue @@ -4,18 +4,72 @@ const props = defineProps(['runs', 'displayType', 'sortType']); function sort(runs, sortType){ - if(sortType === "raw"){ - const newRuns = [].slice.call(runs).sort((a, b) => a.rawTime - b.rawTime); - return newRuns; + // sort by created time + if (sortType === undefined) { + const newRuns = [].slice.call(runs).sort((a, b) => { + const runCreateA = Number(a.created); + const runCreateB = Number(b.created); + if (runCreateA < runCreateB) { + return 1; + } + if (runCreateA > runCreateB) { + return -1; + } + return 0; + }); + return newRuns } - else if(sortType === "pax"){ - const newRuns = [].slice.call(runs).sort((a, b) => a.paxTime - b.paxTime); - return newRuns; - } - else { - return runs; - } - }; + + // sort by run time, only show fastest per-car + const newRuns = [].slice.call(runs).sort((a, b) => { + const timeA = Number(sortType == 'raw' ? a.rawTime : a.paxTime); + const timeB = Number(sortType == 'raw' ? b.rawTime : b.paxTime); + + // Add 2 seconds per cone + const timePenA = Number(a.cones * 2); + const timePenB = Number(b.cones * 2); + + if (timeA + timePenA > timeB + timePenB) { + return 1; + } + if (timeA + timePenA < timeB + timePenB) { + return -1; + } + return 0; + }); + + // filter to only fastest run + const cars_seen = [] + const filterRuns = newRuns.filter((run) => { + if (cars_seen.includes(run.carNumber)) { + return false + } + cars_seen.push(run.carNumber) + return true + }); + return filterRuns + } + + function individualmeta(runs){ + // Find best run + var best_time = 999999999 + runs.forEach((run) => { + const runTime = Number(run.rawTime) + run.cones * 2; + if (runTime < best_time && run.isDnf!==1 && run.getsRerun!==1) { + if (best_time !== 999999999) { + run.delta = Math.round((best_time - runTime) * 1000) / 1000 + } + best_time = runTime + } + }); + runs.forEach((run) => { + const runTime = Number(run.rawTime) + run.cones * 2; + if (runTime == best_time) { + run.best = 1 + } + }); + return runs + }