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/TODO.md +15 -3
- package/dist/constants.d.ts +10 -4
- package/dist/constants.js +11 -4
- package/dist/geometry.d.ts +25 -9
- package/dist/geometry.js +85 -25
- package/dist/graphics.d.ts +91 -52
- package/dist/graphics.js +371 -252
- package/dist/internalUtils.d.ts +15 -11
- package/dist/internalUtils.js +73 -47
- package/dist/settings.d.ts +7 -0
- package/dist/settings.js +9 -0
- package/dist/simulation.d.ts +29 -59
- package/dist/simulation.js +231 -383
- package/dist/types.d.ts +13 -13
- package/dist/utils.d.ts +9 -8
- package/dist/utils.js +18 -20
- package/package.json +1 -1
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
|
|
58
|
-
pos:
|
|
59
|
-
to:
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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,
|
|
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
|
|
42
|
-
* @param
|
|
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(
|
|
47
|
-
|
|
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,
|
|
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,
|
|
40
|
+
constructor(x = 0, y = 0, z = 0, color, uv = vector2()) {
|
|
42
41
|
this.pos = vector3(x, y, z);
|
|
43
|
-
this.color = color
|
|
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(),
|
|
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
|
-
|
|
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
|
|
89
|
-
* @param
|
|
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(
|
|
85
|
+
export function transitionValues(onFrame, adjustment, transitionLength, func) {
|
|
94
86
|
return new Promise((resolve) => {
|
|
95
87
|
if (transitionLength == 0) {
|
|
96
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
221
|
-
return new Vertex(x, y, z, color,
|
|
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);
|