simulationjsv2 0.5.2 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/types.d.ts CHANGED
@@ -23,6 +23,7 @@ export type Mat4 = FloatArray & [
23
23
  number,
24
24
  number
25
25
  ];
26
+ export type Quat = Float32Array & [number, number, number, number];
26
27
  export type LerpFunc = (n: number) => number;
27
28
  export type VertexColorMap = Record<number, Color>;
28
29
  export type ElementRotation<T extends Vector2 | Vector3> = T extends Vector2 ? number : T;
@@ -54,26 +55,26 @@ export type Spline2dGeometryParams = {
54
55
  color: Color;
55
56
  vertexColors: Color[];
56
57
  };
57
- export type LineGeometryParams<T extends Vector2 | Vector3> = {
58
- pos: T;
59
- to: T;
58
+ export type LineGeometryParams = {
59
+ pos: Vector3;
60
+ to: Vector3;
61
+ fromColor: Color | null;
62
+ toColor: Color | null;
60
63
  thickness: number;
61
64
  };
62
- export type Line2dGeometryParams = LineGeometryParams<Vector2>;
63
- export type Line3dGeometryParams = LineGeometryParams<Vector3>;
64
65
  export type PolygonGeometryParams = {
65
66
  points: Vertex[];
66
67
  };
68
+ export type TraceLinesParams = {
69
+ vertices: Vertex[];
70
+ maxLength: number | null;
71
+ };
67
72
  export type PipelineGroup = {
68
- triangleList2d: GPURenderPipeline;
69
- triangleStrip2d: GPURenderPipeline;
70
- lineStrip2d: GPURenderPipeline;
71
- triangleList3d: GPURenderPipeline;
72
- triangleStrip3d: GPURenderPipeline;
73
- lineStrip3d: GPURenderPipeline;
73
+ triangleList: GPURenderPipeline;
74
+ triangleStrip: GPURenderPipeline;
75
+ lineStrip: GPURenderPipeline;
74
76
  };
75
77
  export type RenderInfo = {
76
- uniformBuffer: GPUBuffer;
77
78
  instanceBuffer: GPUBuffer;
78
79
  bindGroupLayout: GPUBindGroupLayout;
79
80
  vertexBuffer: GPUBuffer | null;
@@ -81,7 +82,6 @@ export type RenderInfo = {
81
82
  export type VertexParamGeneratorInfo = {
82
83
  bufferSize: number;
83
84
  createBuffer: (x: number, y: number, z: number, color: Color) => number[];
84
- shouldEvaluate?: () => boolean;
85
85
  };
86
86
  export type ShaderInfo = {
87
87
  pipeline: GPURenderPipeline;
package/dist/utils.d.ts CHANGED
@@ -21,9 +21,8 @@ export declare class Color {
21
21
  export declare class Vertex {
22
22
  private pos;
23
23
  private color;
24
- private is3d;
25
24
  private uv;
26
- constructor(x?: number, y?: number, z?: number, color?: Color, is3dPoint?: boolean, uv?: Vector2);
25
+ constructor(x?: number, y?: number, z?: number, color?: Color, uv?: Vector2);
27
26
  getPos(): Vector3;
28
27
  setPos(pos: Vector3): void;
29
28
  getColor(): Color | null;
@@ -33,18 +32,19 @@ export declare class Vertex {
33
32
  setX(x: number): void;
34
33
  setY(y: number): void;
35
34
  setZ(z: number): void;
36
- setIs3d(is3d: boolean): void;
37
35
  clone(): Vertex;
38
36
  toBuffer(defaultColor: Color): number[];
39
37
  }
40
38
  /**
41
- * @param callback1 - called every frame until the animation is finished
42
- * @param callback2 - called after animation is finished (called immediately when t = 0)
39
+ * @param onFrame - called every frame until the animation is finished
40
+ * @param adjustment - called after animation is finished (called immediately when t = 0) if t > 0 it will only be called if `transformAdjustments` is enabled in settings
43
41
  * @param t - animation time (seconds)
44
42
  * @returns {Promise<void>}
45
43
  */
46
- export declare function transitionValues(callback1: (deltaT: number, t: number) => void, callback2: () => void, transitionLength: number, func?: (n: number) => number): Promise<void>;
47
- export declare function frameLoop<T extends (dt: number, ...args: any[]) => any>(cb: T): (...params: Parameters<T>) => void;
44
+ export declare function transitionValues(onFrame: (deltaT: number, t: number, total: number) => void, adjustment: () => void, transitionLength: number, func?: (n: number) => number): Promise<void>;
45
+ type Shift<T extends any[]> = T extends [] ? [] : T extends [unknown, ...infer R] ? R : never;
46
+ export declare function frameLoop<T extends (dt: number, ...args: any[]) => any>(cb: T): (...params: Shift<Parameters<T>>) => void;
47
+ export declare function clamp(num: number, min: number, max: number): number;
48
48
  export declare function lerp(a: number, b: number, t: number): number;
49
49
  export declare function smoothStep(t: number): number;
50
50
  export declare function linearStep(t: number): number;
@@ -67,7 +67,7 @@ export declare function vector2FromVector3(vec: Vector3): Vector2;
67
67
  export declare function colorFromVector4(vec: Vector4): Color;
68
68
  export declare function randomInt(range: number, min?: number): number;
69
69
  export declare function randomColor(a?: number): Color;
70
- export declare function vertex(x?: number, y?: number, z?: number, color?: Color, is3dPoint?: boolean, uv?: Vector2): Vertex;
70
+ export declare function vertex(x?: number, y?: number, z?: number, color?: Color, uv?: Vector2): Vertex;
71
71
  export declare function color(r?: number, g?: number, b?: number, a?: number): Color;
72
72
  export declare function colorf(val: number, a?: number): Color;
73
73
  export declare function splinePoint2d(end: Vertex, control1: Vector2, control2: Vector2, detail?: number): SplinePoint2d;
@@ -81,3 +81,4 @@ export declare function distance3d(vector1: Vector3, vector2: Vector3): number;
81
81
  export declare function toSceneObjInfo(el: AnySimulationElement, id?: string): SimSceneObjInfo;
82
82
  export declare function toSceneObjInfoMany(el: AnySimulationElement[], id?: (string | undefined)[]): SimSceneObjInfo[];
83
83
  export declare function interpolateColors(colors: Color[], t: number): Color;
84
+ export {};
package/dist/utils.js CHANGED
@@ -36,12 +36,10 @@ export class Color {
36
36
  export class Vertex {
37
37
  pos;
38
38
  color;
39
- is3d;
40
39
  uv;
41
- constructor(x = 0, y = 0, z = 0, color, is3dPoint = true, uv = vector2()) {
40
+ constructor(x = 0, y = 0, z = 0, color, uv = vector2()) {
42
41
  this.pos = vector3(x, y, z);
43
- this.color = color ? color : null;
44
- this.is3d = is3dPoint;
42
+ this.color = color || null;
45
43
  this.uv = uv;
46
44
  }
47
45
  getPos() {
@@ -71,37 +69,34 @@ export class Vertex {
71
69
  setZ(z) {
72
70
  this.pos[2] = z;
73
71
  }
74
- setIs3d(is3d) {
75
- this.is3d = is3d;
76
- }
77
72
  clone() {
78
- return new Vertex(this.pos[0], this.pos[1], this.pos[2], this.color?.clone(), this.is3d, cloneBuf(this.uv));
73
+ return new Vertex(this.pos[0], this.pos[1], this.pos[2], this.color?.clone(), cloneBuf(this.uv));
79
74
  }
80
75
  toBuffer(defaultColor) {
81
- if (this.is3d)
82
- return bufferGenerator.generate(this.pos[0], this.pos[1], this.pos[2], this.color || defaultColor, this.uv);
83
- else
84
- return bufferGenerator.generate(this.pos[0], this.pos[1], 0, this.color || defaultColor, this.uv);
76
+ return bufferGenerator.generate(this.pos[0], this.pos[1], this.pos[2], this.color || defaultColor, this.uv);
85
77
  }
86
78
  }
87
79
  /**
88
- * @param callback1 - called every frame until the animation is finished
89
- * @param callback2 - called after animation is finished (called immediately when t = 0)
80
+ * @param onFrame - called every frame until the animation is finished
81
+ * @param adjustment - called after animation is finished (called immediately when t = 0) if t > 0 it will only be called if `transformAdjustments` is enabled in settings
90
82
  * @param t - animation time (seconds)
91
83
  * @returns {Promise<void>}
92
84
  */
93
- export function transitionValues(callback1, callback2, transitionLength, func) {
85
+ export function transitionValues(onFrame, adjustment, transitionLength, func) {
94
86
  return new Promise((resolve) => {
95
87
  if (transitionLength == 0) {
96
- callback2();
88
+ adjustment();
97
89
  resolve();
98
90
  }
99
91
  else {
100
92
  let prevPercent = 0;
101
93
  let prevTime = Date.now();
94
+ let totalTime = 0;
102
95
  const step = (t, f) => {
103
96
  const newT = f(t);
104
- callback1(newT - prevPercent, t);
97
+ const deltaT = newT - prevPercent;
98
+ onFrame(deltaT, t, totalTime);
99
+ totalTime += deltaT;
105
100
  prevPercent = newT;
106
101
  const now = Date.now();
107
102
  let diff = now - prevTime;
@@ -113,7 +108,7 @@ export function transitionValues(callback1, callback2, transitionLength, func) {
113
108
  window.requestAnimationFrame(() => step(t + inc, f));
114
109
  }
115
110
  else {
116
- callback2();
111
+ adjustment();
117
112
  resolve();
118
113
  }
119
114
  };
@@ -143,6 +138,9 @@ export function frameLoop(cb) {
143
138
  start(0, ...p);
144
139
  };
145
140
  }
141
+ export function clamp(num, min, max) {
142
+ return Math.min(max, Math.max(min, num));
143
+ }
146
144
  export function lerp(a, b, t) {
147
145
  return a + (b - a) * t;
148
146
  }
@@ -217,8 +215,8 @@ export function randomInt(range, min = 0) {
217
215
  export function randomColor(a = 1) {
218
216
  return new Color(randomInt(255), randomInt(255), randomInt(255), a);
219
217
  }
220
- export function vertex(x, y, z, color, is3dPoint, uv) {
221
- return new Vertex(x, y, z, color, is3dPoint, uv);
218
+ export function vertex(x, y, z, color, uv) {
219
+ return new Vertex(x, y, z, color, uv);
222
220
  }
223
221
  export function color(r, g, b, a) {
224
222
  return new Color(r, g, b, a);
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "types": "./dist/index.d.ts",
6
6
  "author": "Jackson Otto",
7
7
  "description": "A simple graphics library using WebGPU",
8
- "version": "0.5.2",
8
+ "version": "0.7.1",
9
9
  "exports": {
10
10
  ".": {
11
11
  "import": "./dist/index.js",