File size: 984 Bytes
90cbf22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import { Infer, v } from 'convex/values';

export const point = v.object({
  x: v.number(),
  y: v.number(),
});
export type Point = Infer<typeof point>;

export const vector = v.object({
  dx: v.number(),
  dy: v.number(),
});
export type Vector = Infer<typeof vector>;

// Paths are arrays of [x, y, dx, dy, t] tuples;
export const path = v.array(v.array(v.number()));
export type Path = [number, number, number, number, number][];

export type PathComponent = { position: Point; facing: Vector; t: number };

export function queryPath(p: Path, at: number): PathComponent {
  return unpackPathComponent(p[at]);
}
export function packPathComponent(p: PathComponent): [number, number, number, number, number] {
  return [p.position.x, p.position.y, p.facing.dx, p.facing.dy, p.t];
}
export function unpackPathComponent(p: [number, number, number, number, number]): PathComponent {
  return {
    position: { x: p[0], y: p[1] },
    facing: { dx: p[2], dy: p[3] },
    t: p[4],
  };
}