diff --git a/README.md b/README.md index 0501d81..d2c0d8f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -![logo](./logo.png) +![logo](.artwork/logo.svg) # StateBuddy -dependencies, bla, bla \ No newline at end of file +dependencies, bla, bla diff --git a/artwork/logo.pdf b/artwork/logo.pdf new file mode 100644 index 0000000..758303c Binary files /dev/null and b/artwork/logo.pdf differ diff --git a/artwork/logo.svg b/artwork/logo.svg new file mode 100644 index 0000000..7d48fd7 --- /dev/null +++ b/artwork/logo.svg @@ -0,0 +1,4593 @@ + + + +StateBuddy© 2025 Joeri Exelmans diff --git a/artwork/logo.xopp b/artwork/logo.xopp new file mode 100644 index 0000000..661e50f Binary files /dev/null and b/artwork/logo.xopp differ diff --git a/logo.png b/artwork/old_logo.png similarity index 67% rename from logo.png rename to artwork/old_logo.png index 95a12d3..f765876 100644 Binary files a/logo.png and b/artwork/old_logo.png differ diff --git a/src/App/TopPanel.tsx b/src/App/TopPanel.tsx index 421756a..b8ab889 100644 --- a/src/App/TopPanel.tsx +++ b/src/App/TopPanel.tsx @@ -75,7 +75,7 @@ export function TopPanel({rt, rtIdx, time, setTime, onInit, onClear, onRaise, on if (e.key === " ") { e.preventDefault(); if (rt) - onChangePaused(time.kind !== "paused", performance.now()); + onChangePaused(time.kind !== "paused", Math.round(performance.now())); }; if (e.key === "i") { e.preventDefault(); @@ -122,15 +122,16 @@ export function TopPanel({rt, rtIdx, time, setTime, onInit, onClear, onRaise, on }, []) function updateDisplayedTime() { - const now = performance.now(); + const now = Math.round(performance.now()); const timeMs = getSimTime(time, now); setDisplayTime(formatTime(timeMs)); } useEffect(() => { + // This has no effect on statechart execution. In between events, the statechart is doing nothing. However, by updating the displayed time, we give the illusion of continuous progress. const interval = setInterval(() => { updateDisplayedTime(); - }, 20); + }, 43); // every X ms -> we want a value that makes the numbers 'dance' while not using too much CPU return () => { clearInterval(interval); } @@ -171,7 +172,7 @@ export function TopPanel({rt, rtIdx, time, setTime, onInit, onClear, onRaise, on const nextTimedTransition: [number, TimerElapseEvent] | undefined = timers[0]; function onSkip() { - const now = performance.now(); + const now = Math.round(performance.now()); if (nextTimedTransition) { setTime(time => { if (time.kind === "paused") { @@ -185,10 +186,10 @@ export function TopPanel({rt, rtIdx, time, setTime, onInit, onClear, onRaise, on } function onSlower() { - onTimeScaleChange((timescale/2).toString(), performance.now()); + onTimeScaleChange((timescale/2).toString(), Math.round(performance.now())); } function onFaster() { - onTimeScaleChange((timescale*2).toString(), performance.now()); + onTimeScaleChange((timescale*2).toString(), Math.round(performance.now())); } return <> @@ -240,8 +241,8 @@ export function TopPanel({rt, rtIdx, time, setTime, onInit, onClear, onRaise, on   Space toggles}> - - + +   @@ -250,7 +251,7 @@ export function TopPanel({rt, rtIdx, time, setTime, onInit, onClear, onRaise, on S}> - onTimeScaleChange(e.target.value, performance.now())}/> + onTimeScaleChange(e.target.value, Math.round(performance.now()))}/> F}>