Spaces:
Sleeping
Sleeping
| 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], | |
| }; | |
| } | |