- commit
- 6f29c8969958bd46043f49e4fad5905fc2e8fe00
- parent
- 7d518304bdacb0ac1075a0ffb3e57cffb9278bda
- author
- dami <gazey55@gmail.com>
| M | site/ | 2 | +- |
| M | site/ | 12 | ++++++++---- |
@@ -753,7 +753,7 @@ export default function Viewer(
753753 }, [props.replay]);754754 755755 // checkpointed fold: a state every K revisions, folded forward on demand756- const cps = useRef(new Checkpoints(32));756+ const cps = useRef(new Checkpoints());757757 cps.current.feed(events);758758 useEffect(() => {759759 if (live) setRev(events.length - 1);@@ -11,19 +11,23 @@ export class Checkpoints {
1111 private cps: State[] = []; // cps[i] = state at revision i * K1212 private events: GameEvent[] = [];1313 private last: { rev: number; state: State } | null = null;14- readonly K: number;14+ private fixed: number | null;15+ K = 32;1516 16- constructor(K = 32) {17- this.K = K;17+ /** K fixed, or adaptive: at most ~24 checkpoints for a long log, since a18+ * checkpoint of a daily-sized field carries every known cell. */19+ constructor(K?: number) {20+ this.fixed = K ?? null;1821 }1922 2023 /** Replace or extend the event list (append-only in live mode). */2124 feed(events: GameEvent[]): void {2225 const shared = this.events.length <= events.length &&2326 this.events.every((e, i) => e === events[i]);24- if (!shared) {27+ if (!shared || this.cps.length === 0) {2528 this.cps = [];2629 this.last = null;30+ this.K = this.fixed ?? Math.max(32, Math.ceil(events.length / 24));2731 }2832 this.events = events;2933 }