Skip to content

Commit 436175c

Browse files
fix: fix animation lags (#34)
1 parent 011d82b commit 436175c

File tree

6 files changed

+27
-22
lines changed

6 files changed

+27
-22
lines changed

CHANGELOG.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
# [1.11.0](https://github.com/vault-developer/event-loop-explorer/compare/v1.10.2...v1.11.0) (2025-01-12)
22

3-
43
### Features
54

6-
* **ds:** update design system ([#33](https://github.com/vault-developer/event-loop-explorer/issues/33)) ([e746d3d](https://github.com/vault-developer/event-loop-explorer/commit/e746d3d983db1bb5c292ecdff6229e830f9eb566))
5+
- **ds:** update design system ([#33](https://github.com/vault-developer/event-loop-explorer/issues/33)) ([e746d3d](https://github.com/vault-developer/event-loop-explorer/commit/e746d3d983db1bb5c292ecdff6229e830f9eb566))
76

87
## [1.10.2](https://github.com/vault-developer/event-loop-explorer/compare/v1.10.1...v1.10.2) (2024-12-31)
98

src/pages/home/sections/WebApiQueue/WebApiTask.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { forwardRef, Ref, useEffect, useState } from 'react';
22
import * as Styled from './WebApiTask.styled.ts';
33
import { WebApiSectionElement } from 'src/types.ts';
4-
import { useSimulatorStore } from 'store/store.ts';
4+
import { useTimeStore } from 'store/store.ts';
55

66
const WebApiTask = forwardRef(
77
({ task }: { task: WebApiSectionElement }, ref: Ref<HTMLDivElement>) => {
@@ -10,7 +10,7 @@ const WebApiTask = forwardRef(
1010

1111
useEffect(() => {
1212
const checkProgress = () => {
13-
const remainingTime = task.end - useSimulatorStore.getState().time;
13+
const remainingTime = task.end - useTimeStore.getState().time;
1414
const progressPercentage = Math.trunc((remainingTime / delay) * 100);
1515
const newProgress = Math.max(0, Math.min(progressPercentage, 100));
1616
setProgress(newProgress);

src/pages/home/sections/Wheel/Pointer/Pointer.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import * as Styled from './Pointer.styled.ts';
2-
import { useWheelStore } from 'store/store.ts';
2+
import { useTimeStore } from 'store/store.ts';
33

44
function Pointer() {
5-
const grad = useWheelStore((state) => state.grad);
5+
const grad = useTimeStore((state) => state.grad);
66

77
// TODO: consider direct style change w/o component re-render
88
return (

src/store/store.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
QueueManager,
55
Simulator,
66
ThemeState,
7+
Time,
78
Wheel,
89
} from './store.types.ts';
910
import { indexToRowColumn } from 'utils/editor.ts';
@@ -55,27 +56,30 @@ export const useQueueManagerStore = create<QueueManager>((set) => ({
5556
}),
5657
}));
5758

58-
export const useWheelStore = create<Wheel>((set) => ({
59+
export const useTimeStore = create<Time>((set) => ({
60+
time: 0,
5961
grad: 0,
62+
setTime: (time) => set({ time, grad: time % 360 }),
63+
}));
64+
65+
export const useWheelStore = create<Wheel>((set) => ({
6066
render: false,
6167
macrotask: false,
6268
microtask: false,
63-
setGrad: (grad) => set({ grad }),
6469
setStop: ({ stop, enabled }) => set({ [stop]: enabled }),
65-
clear: () =>
70+
clear: () => {
71+
useTimeStore.getState().setTime(0);
6672
set(() => ({
67-
grad: 0,
6873
render: false,
6974
macrotask: false,
7075
microtask: false,
71-
})),
76+
}));
77+
},
7278
}));
7379

7480
export const useSimulatorStore = create<Simulator>((set) => ({
7581
speed: 1,
7682
setSpeed: (speed) => set(() => ({ speed })),
77-
time: 0,
78-
setTime: (time) => set(() => ({ time })),
7983
status: 'idle',
8084
setStatus: (status) => set(() => ({ status })),
8185
clear: () =>

src/store/store.types.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ export interface QueueManager {
2424
}
2525

2626
export interface Simulator {
27-
time: number;
28-
setTime(time: number): void;
2927
speed: number;
3028
setSpeed(time: number): void;
3129
status: 'idle' | 'running' | 'paused';
@@ -34,12 +32,10 @@ export interface Simulator {
3432
}
3533

3634
export interface Wheel {
37-
grad: number;
3835
render: boolean;
3936
macrotask: boolean;
4037
microtask: boolean;
4138
clear: () => void;
42-
setGrad(grad: number): void;
4339
setStop({
4440
stop,
4541
enabled,
@@ -49,6 +45,12 @@ export interface Wheel {
4945
}): void;
5046
}
5147

48+
export interface Time {
49+
time: number;
50+
grad: number;
51+
setTime(grad: number): void;
52+
}
53+
5254
export interface Editor {
5355
ref: RefObject<AceEditor | null> | null;
5456
setRef(ref: RefObject<AceEditor>): void;

src/utils/simulate.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
useEditorStore,
44
useQueueManagerStore,
55
useSimulatorStore,
6+
useTimeStore,
67
useWheelStore,
78
} from 'store/store.ts';
89
import { delay } from 'utils/delay.ts';
@@ -28,7 +29,7 @@ export const simulate = (steps: ELSerialisedStep[], onStop: () => void) => {
2829
await delay(250);
2930
}
3031
if (useSimulatorStore.getState().status === 'idle') return;
31-
const time = useSimulatorStore.getState().time;
32+
const time = useTimeStore.getState().time;
3233
const steps = groupedSteps[time];
3334
if (steps !== undefined) {
3435
for (const step of steps) {
@@ -44,9 +45,7 @@ export const simulate = (steps: ELSerialisedStep[], onStop: () => void) => {
4445
const speed = useSimulatorStore.getState().speed;
4546
const nextTime = getNextTime({ time, speed, groupedSteps });
4647

47-
useSimulatorStore.getState().setTime(nextTime);
48-
useWheelStore.getState().setGrad(nextTime % 360);
49-
48+
useTimeStore.getState().setTime(nextTime);
5049
requestAnimationFrame(animate);
5150
};
5251
animate();
@@ -71,7 +70,8 @@ const getNextTime = ({
7170
};
7271

7372
const considerDelay = async () => {
74-
const { grad, macrotask, microtask, render } = useWheelStore.getState();
73+
const { macrotask, microtask, render } = useWheelStore.getState();
74+
const { grad } = useTimeStore.getState();
7575
const { renders, microtasks, macrotasks } = EVENT_LOOP_WHEEL_STOPS;
7676
const speed = useSimulatorStore.getState().speed;
7777

0 commit comments

Comments
 (0)