From bddf63b6d602136c4bfc9a460b66709f85378e7f Mon Sep 17 00:00:00 2001 From: Tobias Mueller Date: Sat, 10 May 2025 14:08:04 +0200 Subject: [PATCH 1/6] added calculations and distance bar --- package-lock.json | 4 +-- src/app/storage/defaultDashboard.ts | 10 +++++++ src/frontend/App.tsx | 2 ++ .../FasterCarsFromBehind.stories.tsx | 20 +++++++++++++ .../FasterCarsFromBehind.tsx | 17 +++++++++++ .../hooks/useCarBehind.tsx | 29 +++++++++++++++++++ 6 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx create mode 100644 src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx create mode 100644 src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx diff --git a/package-lock.json b/package-lock.json index d95d770..e842055 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "irdashies", - "version": "0.0.10", + "version": "0.0.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "irdashies", - "version": "0.0.10", + "version": "0.0.12", "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.8.2", diff --git a/src/app/storage/defaultDashboard.ts b/src/app/storage/defaultDashboard.ts index f620ac5..7f75eaa 100644 --- a/src/app/storage/defaultDashboard.ts +++ b/src/app/storage/defaultDashboard.ts @@ -69,5 +69,15 @@ export const defaultDashboard: DashboardLayout = { height: 330, }, }, + { + id: 'fastercarsfrombehind', + enabled: true, + layout: { + x: 700, + y: 200, + width: 400, + height: 40, + }, + } ], }; diff --git a/src/frontend/App.tsx b/src/frontend/App.tsx index 36e668e..a685990 100644 --- a/src/frontend/App.tsx +++ b/src/frontend/App.tsx @@ -14,6 +14,7 @@ import { Settings } from './components/Settings/Settings'; import { Relative } from './components/Standings/Relative'; import { Weather } from './components/Weather'; import { TrackMap } from './components/TrackMap/TrackMap'; +import { FasterCarsFromBehind } from './components/FasterCarsFromBehind/FasterCarsFromBehind'; import { EditMode } from './components/EditMode/EditMode'; // TODO: type this better, right now the config comes from settings @@ -25,6 +26,7 @@ const WIDGET_MAP: Record React.JSX.Element> = { settings: Settings, map: TrackMap, weather: Weather, + fastercarsfrombehind: FasterCarsFromBehind, }; const AppRoutes = () => { diff --git a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx new file mode 100644 index 0000000..1bafdfd --- /dev/null +++ b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx @@ -0,0 +1,20 @@ +import { Meta, StoryObj } from '@storybook/react'; +import { FasterCarsFromBehind } from './FasterCarsFromBehind'; +//import { TelemetryDecorator } from '../../../../.storybook/telemetryDecorator'; +//import { DynamicTelemetrySelector, TEST_DATA_DIRS } from './DynamicTelemetrySelector'; +import { useState } from 'react'; + +export default { + component: FasterCarsFromBehind, + parameters: { + controls: { + exclude: ['telemetryPath'], + } + } +} as Meta; + +type Story = StoryObj; + +export const Primary: Story = { + //decorators: [TelemetryDecorator()], +}; \ No newline at end of file diff --git a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx new file mode 100644 index 0000000..0a81726 --- /dev/null +++ b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx @@ -0,0 +1,17 @@ +import { useAutoAnimate } from '@formkit/auto-animate/react'; +import { useCarBehind } from './hooks/useCarBehind'; + +export const FasterCarsFromBehind = () => { + const carBehind = useCarBehind(); + const [parent] = useAutoAnimate(); + if (!carBehind) return null; +console.log(carBehind); + return ( +
+
{carBehind.name}
+
{carBehind.distance}
+
+
+ ); +}; diff --git a/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx b/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx new file mode 100644 index 0000000..6682733 --- /dev/null +++ b/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx @@ -0,0 +1,29 @@ +import { useMemo } from 'react'; +import { useDriverRelatives } from '../../Standings/hooks/useDriverRelatives'; +import { getTailwindStyle } from '../../../utils/colors'; + +export const useCarBehind = () => { + const drivers = useDriverRelatives({ buffer: 1 }); + if(drivers.length == 0) return; + if(drivers[2].carClass.relativeSpeed >= drivers[1].carClass.relativeSpeed) return false; + + const carBehind = drivers[2]; + let background = getTailwindStyle(carBehind.carClass.color).classHeader; + + const FasterCarFromBehind = useMemo(() => { + let blink = false; + // Blink the background if the car is within 0.3s + if(carBehind.delta > -0.3) { + const blink = setInterval(() => { + background = background === '' ? getTailwindStyle(carBehind.carClass.color).classHeader : ''; + }, 500) + } else if(carBehind.delta < -0.3 || carBehind.delta > 0) { + if(blink) clearInterval(blink); + } + const percent = Math.abs(carBehind.delta) / 3; + + return { name: carBehind.driver?.name, distance: carBehind?.delta.toFixed(1), background: background, percent : percent }; + }, [carBehind]); + + return FasterCarFromBehind; +}; From ffa20f102565dee9ef0a6dd568ab1e4efa4252c3 Mon Sep 17 00:00:00 2001 From: DerMega Date: Mon, 12 May 2025 11:52:05 +0200 Subject: [PATCH 2/6] animation and hiding --- .../bridge/iracingSdk/mock-data/session.json | 2 +- .../irsdk/node/utils/mock-data/session.json | 2 +- .../FasterCarsFromBehind.tsx | 17 +++++++++----- .../hooks/useCarBehind.tsx | 22 ++++++------------- test-data/1733030013074/session.json | 2 +- 5 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/app/bridge/iracingSdk/mock-data/session.json b/src/app/bridge/iracingSdk/mock-data/session.json index 615512c..ff7c555 100644 --- a/src/app/bridge/iracingSdk/mock-data/session.json +++ b/src/app/bridge/iracingSdk/mock-data/session.json @@ -3426,7 +3426,7 @@ "CarClassPowerAdjust": "0.000 %", "CarClassDryTireSetLimit": "0 %", "CarClassColor": 16767577, - "CarClassEstLapTime": 113.6302, + "CarClassEstLapTime": 126.6302, "IRating": 1367, "LicLevel": 15, "LicSubLevel": 375, diff --git a/src/app/irsdk/node/utils/mock-data/session.json b/src/app/irsdk/node/utils/mock-data/session.json index 615512c..ff7c555 100644 --- a/src/app/irsdk/node/utils/mock-data/session.json +++ b/src/app/irsdk/node/utils/mock-data/session.json @@ -3426,7 +3426,7 @@ "CarClassPowerAdjust": "0.000 %", "CarClassDryTireSetLimit": "0 %", "CarClassColor": 16767577, - "CarClassEstLapTime": 113.6302, + "CarClassEstLapTime": 126.6302, "IRating": 1367, "LicLevel": 15, "LicSubLevel": 375, diff --git a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx index 0a81726..7f55ba3 100644 --- a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx +++ b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx @@ -4,14 +4,19 @@ import { useCarBehind } from './hooks/useCarBehind'; export const FasterCarsFromBehind = () => { const carBehind = useCarBehind(); const [parent] = useAutoAnimate(); - if (!carBehind) return null; -console.log(carBehind); + + //const hidden = carBehind.name === null ? 'hidden' : ''; + const hidden = ''; + const distanceMarkerWidth = (400-400*carBehind.percent).toFixed(0); + const dist = typeof carBehind.distance === 'string' ? parseFloat(carBehind.distance) : carBehind.distance; + const animate = dist > -0.3 ? 'animate-pulse' : ''; + return ( -
+
{carBehind.name}
-
{carBehind.distance}
-
+
{carBehind.distance}
+
); }; diff --git a/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx b/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx index 6682733..2aa6750 100644 --- a/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx +++ b/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx @@ -4,26 +4,18 @@ import { getTailwindStyle } from '../../../utils/colors'; export const useCarBehind = () => { const drivers = useDriverRelatives({ buffer: 1 }); - if(drivers.length == 0) return; - if(drivers[2].carClass.relativeSpeed >= drivers[1].carClass.relativeSpeed) return false; - const carBehind = drivers[2]; - let background = getTailwindStyle(carBehind.carClass.color).classHeader; + const myCar = drivers[1]; + + //if(carBehind.carClass.relativeSpeed > myCar.carClass.relativeSpeed || carBehind.delta < -3) return {name: null, distance: 0, background: null, percent: 0}; + let background = getTailwindStyle(carBehind.carClass.color).classHeader; + const FasterCarFromBehind = useMemo(() => { - let blink = false; - // Blink the background if the car is within 0.3s - if(carBehind.delta > -0.3) { - const blink = setInterval(() => { - background = background === '' ? getTailwindStyle(carBehind.carClass.color).classHeader : ''; - }, 500) - } else if(carBehind.delta < -0.3 || carBehind.delta > 0) { - if(blink) clearInterval(blink); - } const percent = Math.abs(carBehind.delta) / 3; - return { name: carBehind.driver?.name, distance: carBehind?.delta.toFixed(1), background: background, percent : percent }; + return { name: carBehind.driver.name, distance: carBehind.delta.toFixed(1), background: background, percent : percent }; }, [carBehind]); - + return FasterCarFromBehind; }; diff --git a/test-data/1733030013074/session.json b/test-data/1733030013074/session.json index 615512c..ff7c555 100644 --- a/test-data/1733030013074/session.json +++ b/test-data/1733030013074/session.json @@ -3426,7 +3426,7 @@ "CarClassPowerAdjust": "0.000 %", "CarClassDryTireSetLimit": "0 %", "CarClassColor": 16767577, - "CarClassEstLapTime": 113.6302, + "CarClassEstLapTime": 126.6302, "IRating": 1367, "LicLevel": 15, "LicSubLevel": 375, From 4fa4e094f2543da57ff1b11323716a5254d7c0bd Mon Sep 17 00:00:00 2001 From: Tobias Mueller Date: Tue, 13 May 2025 09:32:31 +0200 Subject: [PATCH 3/6] moved cautionahead out of this branch to its own branch. Fixed bugs of undefined variables from ir-sdk --- .../FasterCarsFromBehind.stories.tsx | 3 --- .../FasterCarsFromBehind/FasterCarsFromBehind.tsx | 3 +-- .../FasterCarsFromBehind/hooks/useCarBehind.tsx | 13 ++++++------- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx index 1bafdfd..1508bc5 100644 --- a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx +++ b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx @@ -1,8 +1,5 @@ import { Meta, StoryObj } from '@storybook/react'; import { FasterCarsFromBehind } from './FasterCarsFromBehind'; -//import { TelemetryDecorator } from '../../../../.storybook/telemetryDecorator'; -//import { DynamicTelemetrySelector, TEST_DATA_DIRS } from './DynamicTelemetrySelector'; -import { useState } from 'react'; export default { component: FasterCarsFromBehind, diff --git a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx index 7f55ba3..5886b00 100644 --- a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx +++ b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx @@ -5,8 +5,7 @@ export const FasterCarsFromBehind = () => { const carBehind = useCarBehind(); const [parent] = useAutoAnimate(); - //const hidden = carBehind.name === null ? 'hidden' : ''; - const hidden = ''; + const hidden = carBehind.name === null ? 'hidden' : ''; const distanceMarkerWidth = (400-400*carBehind.percent).toFixed(0); const dist = typeof carBehind.distance === 'string' ? parseFloat(carBehind.distance) : carBehind.distance; const animate = dist > -0.3 ? 'animate-pulse' : ''; diff --git a/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx b/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx index 2aa6750..d022a61 100644 --- a/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx +++ b/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx @@ -5,17 +5,16 @@ import { getTailwindStyle } from '../../../utils/colors'; export const useCarBehind = () => { const drivers = useDriverRelatives({ buffer: 1 }); const carBehind = drivers[2]; - const myCar = drivers[1]; + const myCar = drivers[1]; - //if(carBehind.carClass.relativeSpeed > myCar.carClass.relativeSpeed || carBehind.delta < -3) return {name: null, distance: 0, background: null, percent: 0}; - - let background = getTailwindStyle(carBehind.carClass.color).classHeader; + const background = getTailwindStyle(carBehind?.carClass?.color).classHeader; const FasterCarFromBehind = useMemo(() => { - const percent = Math.abs(carBehind.delta) / 3; + const percent = Math.abs(carBehind?.delta) / 3; - return { name: carBehind.driver.name, distance: carBehind.delta.toFixed(1), background: background, percent : percent }; - }, [carBehind]); + return { name: carBehind?.driver?.name, distance: carBehind?.delta.toFixed(1), background: background, percent : percent }; + }, [carBehind?.delta, carBehind?.driver?.name, background]); + if(carBehind?.carClass?.relativeSpeed > myCar?.carClass?.relativeSpeed || carBehind?.delta < -3) return {name: null, distance: 0, background: null, percent: 0}; return FasterCarFromBehind; }; From 6190686b28df54f5d8a435422db72abc07eab901 Mon Sep 17 00:00:00 2001 From: DerMega Date: Fri, 16 May 2025 21:59:03 +0200 Subject: [PATCH 4/6] added color change. logical fixes --- .../FasterCarsFromBehind.stories.tsx | 21 ++++++++++++++++++- .../FasterCarsFromBehind.tsx | 21 +++++++++++++------ .../hooks/useCarBehind.tsx | 8 +++---- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx index 1508bc5..da3af72 100644 --- a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx +++ b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx @@ -1,5 +1,8 @@ import { Meta, StoryObj } from '@storybook/react'; import { FasterCarsFromBehind } from './FasterCarsFromBehind'; +import { TelemetryDecorator } from '../../../../.storybook/telemetryDecorator'; +import { DynamicTelemetrySelector, TEST_DATA_DIRS } from '../Standings/DynamicTelemetrySelector'; +import { useState } from 'react'; export default { component: FasterCarsFromBehind, @@ -13,5 +16,21 @@ export default { type Story = StoryObj; export const Primary: Story = { - //decorators: [TelemetryDecorator()], + decorators: [TelemetryDecorator()], +}; + +export const DynamicTelemetry: Story = { + decorators: [(Story, context) => { + const [selectedPath, setSelectedPath] = useState('/test-data/1745291694179'); + + return ( + <> + + {TelemetryDecorator(selectedPath)(Story, context)} + + ); + }], }; \ No newline at end of file diff --git a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx index 5886b00..5d041f9 100644 --- a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx +++ b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.tsx @@ -1,3 +1,4 @@ +import { useMemo } from 'react'; import { useAutoAnimate } from '@formkit/auto-animate/react'; import { useCarBehind } from './hooks/useCarBehind'; @@ -5,17 +6,25 @@ export const FasterCarsFromBehind = () => { const carBehind = useCarBehind(); const [parent] = useAutoAnimate(); - const hidden = carBehind.name === null ? 'hidden' : ''; - const distanceMarkerWidth = (400-400*carBehind.percent).toFixed(0); - const dist = typeof carBehind.distance === 'string' ? parseFloat(carBehind.distance) : carBehind.distance; - const animate = dist > -0.3 ? 'animate-pulse' : ''; + const layout = useMemo(() => { + const hidden = carBehind.name === null || carBehind.name == undefined ? 'hidden' : ''; + const animate = carBehind.distance > -0.3 ? 'animate-pulse' : ''; + const red = carBehind.percent; + const green = 100 - carBehind.percent; + + return { hidden, animate, red, green }; + }, [ + carBehind.name, + carBehind.distance, + carBehind.percent + ]); return ( -
{carBehind.name}
{carBehind.distance}
-
+
); }; diff --git a/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx b/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx index d022a61..e09dc5c 100644 --- a/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx +++ b/src/frontend/components/FasterCarsFromBehind/hooks/useCarBehind.tsx @@ -10,11 +10,11 @@ export const useCarBehind = () => { const background = getTailwindStyle(carBehind?.carClass?.color).classHeader; const FasterCarFromBehind = useMemo(() => { - const percent = Math.abs(carBehind?.delta) / 3; - - return { name: carBehind?.driver?.name, distance: carBehind?.delta.toFixed(1), background: background, percent : percent }; + const percent = parseInt((100 - (Math.abs(carBehind?.delta) / 3 * 100)).toFixed(0)); + + return { name: carBehind?.driver?.name, distance: parseFloat(carBehind?.delta.toFixed(1)), background: background, percent : percent }; }, [carBehind?.delta, carBehind?.driver?.name, background]); - if(carBehind?.carClass?.relativeSpeed > myCar?.carClass?.relativeSpeed || carBehind?.delta < -3) return {name: null, distance: 0, background: null, percent: 0}; + if(carBehind?.carClass?.relativeSpeed <= myCar?.carClass?.relativeSpeed || carBehind?.delta < -3) return {name: null, distance: 0, background: null, percent: 0}; return FasterCarFromBehind; }; From 07e2377f6a6ddf5a839afff49ac5b1ead58b682d Mon Sep 17 00:00:00 2001 From: Tarik Alani Date: Thu, 22 May 2025 07:58:55 +1200 Subject: [PATCH 5/6] Update src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx --- .../FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx index da3af72..c70f212 100644 --- a/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx +++ b/src/frontend/components/FasterCarsFromBehind/FasterCarsFromBehind.stories.tsx @@ -1,7 +1,7 @@ import { Meta, StoryObj } from '@storybook/react'; import { FasterCarsFromBehind } from './FasterCarsFromBehind'; import { TelemetryDecorator } from '../../../../.storybook/telemetryDecorator'; -import { DynamicTelemetrySelector, TEST_DATA_DIRS } from '../Standings/DynamicTelemetrySelector'; +import { DynamicTelemetrySelector } from '../Standings/DynamicTelemetrySelector'; import { useState } from 'react'; export default { From 6ec20fc1e761809969ce3c06b39c6ab2031a515c Mon Sep 17 00:00:00 2001 From: Tarik Alani Date: Fri, 23 May 2025 15:13:13 +1200 Subject: [PATCH 6/6] Update src/app/storage/defaultDashboard.ts --- src/app/storage/defaultDashboard.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/storage/defaultDashboard.ts b/src/app/storage/defaultDashboard.ts index 7f75eaa..f4c8057 100644 --- a/src/app/storage/defaultDashboard.ts +++ b/src/app/storage/defaultDashboard.ts @@ -71,7 +71,7 @@ export const defaultDashboard: DashboardLayout = { }, { id: 'fastercarsfrombehind', - enabled: true, + enabled: false, layout: { x: 700, y: 200,