simulationjsv2 0.6.0 → 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/TODO.md CHANGED
@@ -1,13 +1,17 @@
1
1
  # TODO
2
2
 
3
- - [ ] Add animation status handle to transition values
3
+ - [ ] Fix transparency
4
+ - [x] Update `updateModelMatrix2d`
5
+ - [x] Trace line element (wireframe strip for tracing paths)
6
+ - [x] Test new transform things on 3d stuff
7
+ - [x] Fix rotating nested children elements
8
+ - [x] Fix instancing
9
+ - [x] Remove SceneCollection and replace by elements with children
10
+ - Test this
4
11
  - [x] Change position/rotation to be matrix transform on gpu
5
12
  - [x] Add update square center offset position in-place + not
6
13
  - [x] Make getBuffer return cached Float32Array
7
14
  - [x] Make input buffer position vec3 not vec4
8
15
  - [x] Use line strip vertices for polygon buffers
9
16
  - [x] Scene collection wireframe
10
-
11
- ## Not Yet
12
-
13
- - [ ] Add rotateAround and rotateToAround methods to simulation element for absolute positioned vectors
17
+ - [ ] Add animation status handle to transition values
@@ -9,3 +9,4 @@ export declare const modelProjMatOffset: number;
9
9
  export declare const xAxis: import("./types.js").Vector3;
10
10
  export declare const yAxis: import("./types.js").Vector3;
11
11
  export declare const zAxis: import("./types.js").Vector3;
12
+ export declare const origin0: import("./types.js").Vector3;
package/dist/constants.js CHANGED
@@ -10,3 +10,4 @@ export const modelProjMatOffset = 4 * 16;
10
10
  export const xAxis = vector3(1);
11
11
  export const yAxis = vector3(0, 1);
12
12
  export const zAxis = vector3(0, 0, 1);
13
+ export const origin0 = vector3();
@@ -1,4 +1,4 @@
1
- import { VertexParamGeneratorInfo, CircleGeometryParams, CubeGeometryParams, EmptyParams, PolygonGeometryParams, Spline2dGeometryParams, SquareGeometryParams, Vector2, Vector3, VertexColorMap, LineGeometryParams } from './types.js';
1
+ import { VertexParamGeneratorInfo, CircleGeometryParams, CubeGeometryParams, EmptyParams, PolygonGeometryParams, Spline2dGeometryParams, SquareGeometryParams, Vector2, Vector3, VertexColorMap, LineGeometryParams, TraceLinesParams } from './types.js';
2
2
  import { Color, Vertex } from './utils.js';
3
3
  import { CubicBezierCurve2d, SplinePoint2d } from './graphics.js';
4
4
  export declare abstract class Geometry<T extends EmptyParams> {
@@ -114,3 +114,13 @@ export declare class PolygonGeometry extends Geometry<PolygonGeometryParams> {
114
114
  recompute(): void;
115
115
  getTriangleBuffer(color: Color): number[];
116
116
  }
117
+ export declare class TraceLines2dGeometry extends Geometry<EmptyParams> {
118
+ protected wireframeOrder: never[];
119
+ protected triangleOrder: never[];
120
+ protected params: TraceLinesParams;
121
+ constructor(maxLen?: number);
122
+ recompute(): void;
123
+ getWireframeBuffer(color: Color, vertexParamGenerator?: VertexParamGeneratorInfo | undefined): number[];
124
+ getWireframeVertexCount(): number;
125
+ addVertex(vert: Vertex): void;
126
+ }
package/dist/geometry.js CHANGED
@@ -475,3 +475,34 @@ export class PolygonGeometry extends Geometry {
475
475
  .flat();
476
476
  }
477
477
  }
478
+ export class TraceLines2dGeometry extends Geometry {
479
+ wireframeOrder = [];
480
+ triangleOrder = [];
481
+ params;
482
+ constructor(maxLen) {
483
+ super([], 'strip');
484
+ this.params = {
485
+ vertices: [],
486
+ maxLength: maxLen || null
487
+ };
488
+ this.wireframeOrder = [];
489
+ }
490
+ recompute() { }
491
+ getWireframeBuffer(color, vertexParamGenerator) {
492
+ return this.params.vertices
493
+ .map((item) => {
494
+ const pos = item.getPos();
495
+ return bufferGenerator.generate(pos[0], pos[1], pos[2], item.getColor() || color, vector2(), vertexParamGenerator);
496
+ })
497
+ .flat();
498
+ }
499
+ getWireframeVertexCount() {
500
+ return this.params.vertices.length;
501
+ }
502
+ addVertex(vert) {
503
+ this.params.vertices.push(vert);
504
+ if (this.params.maxLength && this.params.vertices.length > this.params.maxLength) {
505
+ this.params.vertices.shift();
506
+ }
507
+ }
508
+ }
@@ -1,59 +1,87 @@
1
1
  /// <reference types="@webgpu/types" />
2
- import { Camera } from './simulation.js';
3
2
  import type { Vector2, Vector3, LerpFunc, VertexColorMap, Mat4, AnySimulationElement, VertexParamGeneratorInfo } from './types.js';
4
3
  import { Vertex, Color } from './utils.js';
5
- import { BlankGeometry, CircleGeometry, CubeGeometry, Geometry, Line2dGeometry, Line3dGeometry, PlaneGeometry, PolygonGeometry, Spline2dGeometry, SquareGeometry } from './geometry.js';
6
- import { VertexCache } from './internalUtils.js';
7
- export declare abstract class SimulationElement {
4
+ import { BlankGeometry, CircleGeometry, CubeGeometry, Geometry, Line2dGeometry, Line3dGeometry, PlaneGeometry, PolygonGeometry, Spline2dGeometry, SquareGeometry, TraceLines2dGeometry as TraceLinesGeometry } from './geometry.js';
5
+ import { SimSceneObjInfo, VertexCache } from './internalUtils.js';
6
+ export declare abstract class SimulationElement3d {
7
+ private children;
8
+ private uniformBuffer;
9
+ protected parent: SimulationElement3d | null;
10
+ protected centerOffset: Vector3;
11
+ protected rotationOffset: Vector3;
8
12
  protected pos: Vector3;
9
- protected abstract geometry: Geometry<any>;
13
+ protected abstract geometry: Geometry<object>;
10
14
  protected color: Color;
11
15
  protected wireframe: boolean;
12
16
  protected vertexCache: VertexCache;
13
17
  protected rotation: Vector3;
14
18
  protected modelMatrix: Mat4;
15
- private uniformBuffer;
19
+ isInstance: boolean;
16
20
  isInstanced: boolean;
21
+ is3d: boolean;
22
+ isEmpty: boolean;
17
23
  /**
18
24
  * @param pos - Expected to be adjusted to devicePixelRatio before reaching constructor
19
25
  */
20
26
  constructor(pos: Vector3, rotation: Vector3, color?: Color);
21
- getModelMatrix(_: Camera): Mat4;
27
+ add(el: SimulationElement3d, id?: string): void;
28
+ remove(el: SimulationElement3d): void;
29
+ getChildren(): SimulationElement3d[];
30
+ getChildrenInfos(): SimSceneObjInfo[];
31
+ hasChildren(): boolean;
32
+ setParent(parent: SimulationElement3d): void;
33
+ getParent(): SimulationElement3d | null;
34
+ setCenterOffset(offset: Vector3): void;
35
+ setRotationOffset(offset: Vector3): void;
36
+ resetCenterOffset(): void;
37
+ propagateDevice(device: GPUDevice): void;
38
+ getModelMatrix(): Mat4;
22
39
  getUniformBuffer(device: GPUDevice, mat: Mat4): GPUBuffer;
40
+ protected mirrorParentTransforms3d(mat: Mat4): void;
23
41
  protected updateModelMatrix3d(): void;
42
+ protected mirrorParentTransforms2d(mat: Mat4): void;
43
+ protected updateModelMatrix2d(): void;
24
44
  getGeometryType(): "list" | "strip";
25
45
  setWireframe(wireframe: boolean): void;
26
46
  isWireframe(): boolean;
27
47
  getColor(): Color;
28
48
  getPos(): Vector3;
49
+ getAbsolutePos(): Vector3;
29
50
  getRotation(): Vector3;
51
+ getCenterOffset(): Vector3;
30
52
  fill(newColor: Color, t?: number, f?: LerpFunc): Promise<void>;
31
- move(amount: Vector3, t?: number, f?: LerpFunc): Promise<void>;
32
- moveTo(pos: Vector3, t?: number, f?: LerpFunc): Promise<void>;
53
+ private moveChildren;
54
+ move(amount: Vector3, t?: number, f?: LerpFunc, fromDevicePixelRatio?: boolean): Promise<void>;
55
+ moveTo(pos: Vector3, t?: number, f?: LerpFunc, fromDevicePixelRatio?: boolean): Promise<void>;
56
+ rotateChildrenTo(angle: Vector3): void;
57
+ rotateChildren(angle: Vector3): void;
33
58
  rotate(amount: Vector3, t?: number, f?: LerpFunc): Promise<void>;
34
59
  rotateTo(rot: Vector3, t?: number, f?: LerpFunc): Promise<void>;
35
60
  getVertexCount(): number;
36
- protected defaultUpdateMatrix(_: Camera): void;
37
61
  getBuffer(vertexParamGenerator?: VertexParamGeneratorInfo): Float32Array | number[];
62
+ protected abstract onDeviceChange(device: GPUDevice): void;
38
63
  }
39
- export declare abstract class SimulationElement3d extends SimulationElement {
40
- protected pos: Vector3;
41
- protected rotation: Vector3;
42
- is3d: boolean;
43
- constructor(pos: Vector3, rotation?: Vector3, color?: Color);
64
+ export declare class EmptyElement extends SimulationElement3d {
65
+ protected geometry: BlankGeometry;
66
+ private label;
67
+ isEmpty: boolean;
68
+ constructor(label?: string);
69
+ getLabel(): string | null;
70
+ protected onDeviceChange(_device: GPUDevice): void;
44
71
  }
45
- export declare abstract class SimulationElement2d extends SimulationElement {
72
+ export declare abstract class SimulationElement2d extends SimulationElement3d {
73
+ is3d: boolean;
46
74
  constructor(pos: Vector2, rotation?: Vector3, color?: Color);
47
75
  rotate2d(amount: number, t?: number, f?: LerpFunc): Promise<void>;
48
76
  rotateTo2d(rot: number, t?: number, f?: LerpFunc): Promise<void>;
49
- private updateModelMatrix2d;
50
- getModelMatrix(camera: Camera): Mat4;
77
+ getModelMatrix(): Mat4;
51
78
  }
52
79
  export declare class Plane extends SimulationElement3d {
53
80
  protected geometry: PlaneGeometry;
54
81
  points: Vertex[];
55
82
  constructor(pos: Vector3, points: Vertex[], color?: Color, rotation?: Vector3);
56
83
  setPoints(newPoints: Vertex[]): void;
84
+ protected onDeviceChange(_device: GPUDevice): void;
57
85
  }
58
86
  export declare class Square extends SimulationElement2d {
59
87
  protected geometry: SquareGeometry;
@@ -74,6 +102,7 @@ export declare class Square extends SimulationElement2d {
74
102
  scale(amount: number, t?: number, f?: LerpFunc): Promise<void>;
75
103
  setWidth(num: number, t?: number, f?: LerpFunc): Promise<void>;
76
104
  setHeight(num: number, t?: number, f?: LerpFunc): Promise<void>;
105
+ protected onDeviceChange(_device: GPUDevice): void;
77
106
  }
78
107
  export declare class Circle extends SimulationElement2d {
79
108
  protected geometry: CircleGeometry;
@@ -82,6 +111,7 @@ export declare class Circle extends SimulationElement2d {
82
111
  constructor(pos: Vector2, radius: number, color?: Color, detail?: number);
83
112
  setRadius(num: number, t?: number, f?: LerpFunc): Promise<void>;
84
113
  scale(amount: number, t?: number, f?: LerpFunc): Promise<void>;
114
+ protected onDeviceChange(_device: GPUDevice): void;
85
115
  }
86
116
  export declare class Polygon extends SimulationElement2d {
87
117
  protected geometry: PolygonGeometry;
@@ -89,6 +119,7 @@ export declare class Polygon extends SimulationElement2d {
89
119
  constructor(pos: Vector2, points: Vertex[], color?: Color, rotation?: number);
90
120
  getVertices(): Vertex[];
91
121
  setVertices(newVertices: Vertex[], t?: number, f?: LerpFunc): Promise<void>;
122
+ protected onDeviceChange(_device: GPUDevice): void;
92
123
  }
93
124
  export declare class Line3d extends SimulationElement3d {
94
125
  protected geometry: Line3dGeometry;
@@ -97,6 +128,7 @@ export declare class Line3d extends SimulationElement3d {
97
128
  constructor(pos: Vertex, to: Vertex, thickness: number);
98
129
  setStart(pos: Vector3, t?: number, f?: LerpFunc): Promise<void>;
99
130
  setEnd(pos: Vector3, t?: number, f?: LerpFunc): Promise<void>;
131
+ protected onDeviceChange(_device: GPUDevice): void;
100
132
  }
101
133
  export declare class Line2d extends SimulationElement2d {
102
134
  protected geometry: Line2dGeometry;
@@ -105,6 +137,7 @@ export declare class Line2d extends SimulationElement2d {
105
137
  constructor(from: Vertex, to: Vertex, thickness?: number);
106
138
  setStart(pos: Vector3, t?: number, f?: LerpFunc): Promise<void>;
107
139
  setEnd(pos: Vector3, t?: number, f?: LerpFunc): Promise<void>;
140
+ protected onDeviceChange(_device: GPUDevice): void;
108
141
  }
109
142
  export declare class Cube extends SimulationElement3d {
110
143
  protected geometry: CubeGeometry;
@@ -116,6 +149,7 @@ export declare class Cube extends SimulationElement3d {
116
149
  setHeight(height: number, t?: number, f?: LerpFunc): Promise<void>;
117
150
  setDepth(depth: number, t?: number, f?: LerpFunc): Promise<void>;
118
151
  scale(amount: number, t?: number, f?: LerpFunc): Promise<void>;
152
+ protected onDeviceChange(_device: GPUDevice): void;
119
153
  }
120
154
  export declare class BezierCurve2d {
121
155
  private points;
@@ -168,14 +202,15 @@ export declare class Spline2d extends SimulationElement2d {
168
202
  setThickness(thickness: number, t?: number, f?: LerpFunc): Promise<void>;
169
203
  interpolateSlope(t: number): Vector2[] | readonly [Vector2, Vector2];
170
204
  interpolate(t: number): Vector2;
205
+ protected onDeviceChange(_device: GPUDevice): void;
171
206
  }
172
207
  export declare class Instance<T extends AnySimulationElement> extends SimulationElement3d {
173
208
  protected geometry: BlankGeometry;
174
209
  private obj;
175
210
  private instanceMatrix;
176
211
  private matrixBuffer;
177
- private device;
178
212
  private baseMat;
213
+ isInstance: boolean;
179
214
  constructor(obj: T, numInstances: number);
180
215
  setNumInstances(numInstances: number): void;
181
216
  setInstance(instance: number, transformation: Mat4): void;
@@ -186,4 +221,20 @@ export declare class Instance<T extends AnySimulationElement> extends Simulation
186
221
  getVertexCount(): number;
187
222
  getGeometryType(): "list" | "strip";
188
223
  getBuffer(): Float32Array | number[];
224
+ protected onDeviceChange(device: GPUDevice): void;
225
+ getModelMatrix(): Mat4;
226
+ }
227
+ export declare class TraceLines2d extends SimulationElement2d {
228
+ protected geometry: TraceLinesGeometry;
229
+ constructor(color?: Color, maxLen?: number);
230
+ addPoint(point: Vector2 | Vector3, color?: Color): void;
231
+ isWireframe(): boolean;
232
+ protected onDeviceChange(_: GPUDevice): void;
233
+ }
234
+ export declare class TraceLines3d extends SimulationElement3d {
235
+ protected geometry: TraceLinesGeometry;
236
+ constructor(color?: Color, maxLen?: number);
237
+ addPoint(point: Vector2 | Vector3, color?: Color): void;
238
+ isWireframe(): boolean;
239
+ protected onDeviceChange(_: GPUDevice): void;
189
240
  }