matrix-engine-wgpu 1.1.1 → 1.2.0
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/examples/games/jamb/html-content.js +123 -0
- package/examples/games/jamb/jamb.js +240 -87
- package/examples/unlit-textures.js +18 -17
- package/main.js +503 -453
- package/package.json +1 -1
- package/public/app.js +706 -192
- package/public/css/style.css +229 -80
- package/public/examples.js +609 -187
- package/public/index.html +0 -3
- package/public/res/audios/kenney/Kenney.url +2 -0
- package/public/res/audios/kenney/License.txt +22 -0
- package/public/res/audios/kenney/Patreon.url +2 -0
- package/public/res/audios/kenney/audios/back_001.ogg +0 -0
- package/public/res/audios/kenney/audios/back_002.ogg +0 -0
- package/public/res/audios/kenney/audios/back_003.ogg +0 -0
- package/public/res/audios/kenney/audios/back_004.ogg +0 -0
- package/public/res/audios/kenney/audios/bong_001.ogg +0 -0
- package/public/res/audios/kenney/audios/click_001.ogg +0 -0
- package/public/res/audios/kenney/audios/click_002.ogg +0 -0
- package/public/res/audios/kenney/audios/click_003.ogg +0 -0
- package/public/res/audios/kenney/audios/click_004.ogg +0 -0
- package/public/res/audios/kenney/audios/click_005.ogg +0 -0
- package/public/res/audios/kenney/audios/close_001.ogg +0 -0
- package/public/res/audios/kenney/audios/close_002.ogg +0 -0
- package/public/res/audios/kenney/audios/close_003.ogg +0 -0
- package/public/res/audios/kenney/audios/close_004.ogg +0 -0
- package/public/res/audios/kenney/audios/confirmation_001.ogg +0 -0
- package/public/res/audios/kenney/audios/confirmation_002.ogg +0 -0
- package/public/res/audios/kenney/audios/confirmation_003.ogg +0 -0
- package/public/res/audios/kenney/audios/confirmation_004.ogg +0 -0
- package/public/res/audios/kenney/audios/drop_001.ogg +0 -0
- package/public/res/audios/kenney/audios/drop_002.ogg +0 -0
- package/public/res/audios/kenney/audios/drop_003.ogg +0 -0
- package/public/res/audios/kenney/audios/drop_004.ogg +0 -0
- package/public/res/audios/kenney/audios/error_001.ogg +0 -0
- package/public/res/audios/kenney/audios/error_002.ogg +0 -0
- package/public/res/audios/kenney/audios/error_003.ogg +0 -0
- package/public/res/audios/kenney/audios/error_004.ogg +0 -0
- package/public/res/audios/kenney/audios/error_005.ogg +0 -0
- package/public/res/audios/kenney/audios/error_006.ogg +0 -0
- package/public/res/audios/kenney/audios/error_007.ogg +0 -0
- package/public/res/audios/kenney/audios/error_008.ogg +0 -0
- package/public/res/audios/kenney/audios/glass_001.ogg +0 -0
- package/public/res/audios/kenney/audios/glass_002.ogg +0 -0
- package/public/res/audios/kenney/audios/glass_003.ogg +0 -0
- package/public/res/audios/kenney/audios/glass_004.ogg +0 -0
- package/public/res/audios/kenney/audios/glass_005.ogg +0 -0
- package/public/res/audios/kenney/audios/glass_006.ogg +0 -0
- package/public/res/audios/kenney/audios/glitch_001.ogg +0 -0
- package/public/res/audios/kenney/audios/glitch_002.ogg +0 -0
- package/public/res/audios/kenney/audios/glitch_003.ogg +0 -0
- package/public/res/audios/kenney/audios/glitch_004.ogg +0 -0
- package/public/res/audios/kenney/audios/maximize_001.ogg +0 -0
- package/public/res/audios/kenney/audios/maximize_002.ogg +0 -0
- package/public/res/audios/kenney/audios/maximize_003.ogg +0 -0
- package/public/res/audios/kenney/audios/maximize_004.ogg +0 -0
- package/public/res/audios/kenney/audios/maximize_005.ogg +0 -0
- package/public/res/audios/kenney/audios/maximize_006.ogg +0 -0
- package/public/res/audios/kenney/audios/maximize_007.ogg +0 -0
- package/public/res/audios/kenney/audios/maximize_008.ogg +0 -0
- package/public/res/audios/kenney/audios/maximize_009.ogg +0 -0
- package/public/res/audios/kenney/audios/minimize_001.ogg +0 -0
- package/public/res/audios/kenney/audios/minimize_002.ogg +0 -0
- package/public/res/audios/kenney/audios/minimize_003.ogg +0 -0
- package/public/res/audios/kenney/audios/minimize_004.ogg +0 -0
- package/public/res/audios/kenney/audios/minimize_005.ogg +0 -0
- package/public/res/audios/kenney/audios/minimize_006.ogg +0 -0
- package/public/res/audios/kenney/audios/minimize_007.ogg +0 -0
- package/public/res/audios/kenney/audios/minimize_008.ogg +0 -0
- package/public/res/audios/kenney/audios/minimize_009.ogg +0 -0
- package/public/res/audios/kenney/audios/open_001.ogg +0 -0
- package/public/res/audios/kenney/audios/open_002.ogg +0 -0
- package/public/res/audios/kenney/audios/open_003.ogg +0 -0
- package/public/res/audios/kenney/audios/open_004.ogg +0 -0
- package/public/res/audios/kenney/audios/pluck_001.ogg +0 -0
- package/public/res/audios/kenney/audios/pluck_002.ogg +0 -0
- package/public/res/audios/kenney/audios/question_001.ogg +0 -0
- package/public/res/audios/kenney/audios/question_002.ogg +0 -0
- package/public/res/audios/kenney/audios/question_003.ogg +0 -0
- package/public/res/audios/kenney/audios/question_004.ogg +0 -0
- package/public/res/audios/kenney/audios/scratch_001.ogg +0 -0
- package/public/res/audios/kenney/audios/scratch_002.ogg +0 -0
- package/public/res/audios/kenney/audios/scratch_003.ogg +0 -0
- package/public/res/audios/kenney/audios/scratch_004.ogg +0 -0
- package/public/res/audios/kenney/audios/scratch_005.ogg +0 -0
- package/public/res/audios/kenney/audios/scroll_001.ogg +0 -0
- package/public/res/audios/kenney/audios/scroll_002.ogg +0 -0
- package/public/res/audios/kenney/audios/scroll_003.ogg +0 -0
- package/public/res/audios/kenney/audios/scroll_004.ogg +0 -0
- package/public/res/audios/kenney/audios/scroll_005.ogg +0 -0
- package/public/res/audios/kenney/audios/select_001.ogg +0 -0
- package/public/res/audios/kenney/audios/select_002.ogg +0 -0
- package/public/res/audios/kenney/audios/select_003.ogg +0 -0
- package/public/res/audios/kenney/audios/select_004.ogg +0 -0
- package/public/res/audios/kenney/audios/select_005.ogg +0 -0
- package/public/res/audios/kenney/audios/select_006.ogg +0 -0
- package/public/res/audios/kenney/audios/select_007.ogg +0 -0
- package/public/res/audios/kenney/audios/select_008.ogg +0 -0
- package/public/res/audios/kenney/audios/switch_001.ogg +0 -0
- package/public/res/audios/kenney/audios/switch_002.ogg +0 -0
- package/public/res/audios/kenney/audios/switch_003.ogg +0 -0
- package/public/res/audios/kenney/audios/switch_004.ogg +0 -0
- package/public/res/audios/kenney/audios/switch_005.ogg +0 -0
- package/public/res/audios/kenney/audios/switch_006.ogg +0 -0
- package/public/res/audios/kenney/audios/switch_007.ogg +0 -0
- package/public/res/audios/kenney/audios/tick_001.ogg +0 -0
- package/public/res/audios/kenney/audios/tick_002.ogg +0 -0
- package/public/res/audios/kenney/audios/tick_004.ogg +0 -0
- package/public/res/audios/kenney/audios/toggle_001.ogg +0 -0
- package/public/res/audios/kenney/audios/toggle_002.ogg +0 -0
- package/public/res/audios/kenney/audios/toggle_003.ogg +0 -0
- package/public/res/audios/kenney/audios/toggle_004.ogg +0 -0
- package/public/res/audios/toggle_002.mp3 +0 -0
- package/public/res/meshes/shapes/star1.obj +60 -0
- package/public/res/multilang/en.json +8 -1
- package/public/res/multilang/sr.json +7 -1
- package/readme.md +16 -0
- package/src/engine/ball.js +0 -3
- package/src/engine/cube.js +0 -1
- package/src/engine/mesh-obj.js +0 -7
- package/src/engine/utils.js +71 -1
- package/src/physics/matrix-ammo.js +64 -26
- package/src/sounds/sounds.js +32 -10
- package/src/world.js +361 -307
|
@@ -11,9 +11,9 @@ export default class MatrixAmmo {
|
|
|
11
11
|
undefined,
|
|
12
12
|
this.init,
|
|
13
13
|
);
|
|
14
|
-
|
|
15
14
|
this.lastRoll = '';
|
|
16
15
|
this.presentScore = '';
|
|
16
|
+
this.speedUpSimulation = 1;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
init = () => {
|
|
@@ -86,6 +86,8 @@ export default class MatrixAmmo {
|
|
|
86
86
|
rbInfo = new Ammo.btRigidBodyConstructionInfo(mass, myMotionState, colShape, localInertia),
|
|
87
87
|
body = new Ammo.btRigidBody(rbInfo);
|
|
88
88
|
|
|
89
|
+
console.log("TEST ADDING PHYSICS ");
|
|
90
|
+
|
|
89
91
|
body.MEObject = MEObject;
|
|
90
92
|
this.dynamicsWorld.addRigidBody(body);
|
|
91
93
|
this.rigidBodies.push(body);
|
|
@@ -159,8 +161,6 @@ export default class MatrixAmmo {
|
|
|
159
161
|
pos.setX(pos.x() + x)
|
|
160
162
|
pos.setY(pos.y() + y)
|
|
161
163
|
pos.setZ(pos.z() + z)
|
|
162
|
-
// console.log('position kinematic move : ', pos)
|
|
163
|
-
// console.log('position localRot : ', localRot)
|
|
164
164
|
localRot.setX(rx)
|
|
165
165
|
localRot.setY(ry)
|
|
166
166
|
localRot.setZ(rz)
|
|
@@ -168,14 +168,12 @@ export default class MatrixAmmo {
|
|
|
168
168
|
let ms = physicsBody.getMotionState();
|
|
169
169
|
if(ms) {
|
|
170
170
|
var tmpTrans = new Ammo.btTransform();
|
|
171
|
-
|
|
172
171
|
// quat.setValue(quat.x(), quat.y(), quat.z(), quat.w());
|
|
173
172
|
tmpTrans.setIdentity();
|
|
174
173
|
tmpTrans.setOrigin(pos);
|
|
175
174
|
tmpTrans.setRotation(localRot);
|
|
176
175
|
ms.setWorldTransform(tmpTrans);
|
|
177
176
|
}
|
|
178
|
-
// console.log('body, ', body)
|
|
179
177
|
}
|
|
180
178
|
|
|
181
179
|
getBodyByName(name) {
|
|
@@ -266,28 +264,68 @@ export default class MatrixAmmo {
|
|
|
266
264
|
}
|
|
267
265
|
|
|
268
266
|
updatePhysics() {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
267
|
+
if(!Ammo) return;
|
|
268
|
+
const trans = new Ammo.btTransform();
|
|
269
|
+
const transform = new Ammo.btTransform();
|
|
270
|
+
|
|
273
271
|
this.rigidBodies.forEach(function(body) {
|
|
274
|
-
if(body.
|
|
272
|
+
if(body.isKinematic) {
|
|
273
|
+
transform.setIdentity();
|
|
274
|
+
transform.setOrigin(new Ammo.btVector3(
|
|
275
|
+
body.MEObject.position.x,
|
|
276
|
+
body.MEObject.position.y,
|
|
277
|
+
body.MEObject.position.z
|
|
278
|
+
));
|
|
279
|
+
const quat = new Ammo.btQuaternion();
|
|
280
|
+
quat.setRotation(
|
|
281
|
+
new Ammo.btVector3(
|
|
282
|
+
body.MEObject.rotation.axis.x,
|
|
283
|
+
body.MEObject.rotation.axis.y,
|
|
284
|
+
body.MEObject.rotation.axis.z
|
|
285
|
+
),
|
|
286
|
+
degToRad(body.MEObject.rotation.angle)
|
|
287
|
+
);
|
|
288
|
+
transform.setRotation(quat);
|
|
289
|
+
|
|
290
|
+
body.setWorldTransform(transform);
|
|
291
|
+
const ms = body.getMotionState();
|
|
292
|
+
if(ms) ms.setWorldTransform(transform);
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
Ammo.destroy(transform);
|
|
297
|
+
|
|
298
|
+
// Step simulation AFTER setting kinematic transforms
|
|
299
|
+
const timeStep = 1 / 60;
|
|
300
|
+
const maxSubSteps = 10;
|
|
301
|
+
|
|
302
|
+
for(let i = 0;i < this.speedUpSimulation;i++) {
|
|
303
|
+
this.dynamicsWorld.stepSimulation(timeStep, maxSubSteps);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
this.rigidBodies.forEach(function(body) {
|
|
307
|
+
if(!body.isKinematic && body.getMotionState()) {
|
|
275
308
|
body.getMotionState().getWorldTransform(trans);
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
body.MEObject.rotation.
|
|
309
|
+
|
|
310
|
+
const _x = +trans.getOrigin().x().toFixed(2);
|
|
311
|
+
const _y = +trans.getOrigin().y().toFixed(2);
|
|
312
|
+
const _z = +trans.getOrigin().z().toFixed(2);
|
|
313
|
+
|
|
314
|
+
body.MEObject.position.setPosition(_x, _y, _z);
|
|
315
|
+
|
|
316
|
+
const rot = trans.getRotation();
|
|
317
|
+
const rotAxis = rot.getAxis();
|
|
318
|
+
rot.normalize();
|
|
319
|
+
|
|
320
|
+
body.MEObject.rotation.axis.x = rotAxis.x();
|
|
321
|
+
body.MEObject.rotation.axis.y = rotAxis.y();
|
|
322
|
+
body.MEObject.rotation.axis.z = rotAxis.z();
|
|
323
|
+
body.MEObject.rotation.matrixRotation = quaternion_rotation_matrix(rot);
|
|
324
|
+
body.MEObject.rotation.angle = radToDeg(parseFloat(rot.getAngle().toFixed(2)));
|
|
288
325
|
}
|
|
289
|
-
})
|
|
290
|
-
|
|
291
|
-
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
Ammo.destroy(trans);
|
|
329
|
+
this.detectCollision();
|
|
292
330
|
}
|
|
293
|
-
}
|
|
331
|
+
}
|
package/src/sounds/sounds.js
CHANGED
|
@@ -1,14 +1,23 @@
|
|
|
1
|
-
|
|
2
1
|
export class MatrixSounds {
|
|
3
2
|
|
|
4
3
|
constructor() {
|
|
5
4
|
this.volume = 0.5;
|
|
6
5
|
this.audios = {};
|
|
6
|
+
this.enabled = true; // 🔇 global flag to mute/allow audio
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
muteAll() {
|
|
10
|
+
this.enabled = false;
|
|
11
|
+
Object.values(this.audios).forEach(audio => audio.pause());
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
unmuteAll() {
|
|
15
|
+
this.enabled = true;
|
|
7
16
|
}
|
|
8
17
|
|
|
9
18
|
createClones(c, name, path) {
|
|
10
|
-
for(
|
|
11
|
-
|
|
19
|
+
for(let x = 1;x < c;x++) {
|
|
20
|
+
const a = new Audio(path);
|
|
12
21
|
a.id = name + x;
|
|
13
22
|
a.volume = this.volume;
|
|
14
23
|
this.audios[name + x] = a;
|
|
@@ -17,7 +26,7 @@ export class MatrixSounds {
|
|
|
17
26
|
}
|
|
18
27
|
|
|
19
28
|
createAudio(name, path, useClones) {
|
|
20
|
-
|
|
29
|
+
const a = new Audio(path);
|
|
21
30
|
a.id = name;
|
|
22
31
|
a.volume = this.volume;
|
|
23
32
|
this.audios[name] = a;
|
|
@@ -28,20 +37,33 @@ export class MatrixSounds {
|
|
|
28
37
|
}
|
|
29
38
|
|
|
30
39
|
play(name) {
|
|
31
|
-
if(this.
|
|
32
|
-
|
|
40
|
+
if(!this.enabled) return; // 🔇 prevent playing if muted
|
|
41
|
+
|
|
42
|
+
const audio = this.audios[name];
|
|
43
|
+
if(!audio) return;
|
|
44
|
+
|
|
45
|
+
if(audio.paused) {
|
|
46
|
+
audio.play().catch((e) => {
|
|
47
|
+
if(e.name !== 'NotAllowedError') console.warn("sounds error:", e);
|
|
48
|
+
});
|
|
33
49
|
} else {
|
|
34
50
|
this.tryClone(name);
|
|
35
51
|
}
|
|
36
52
|
}
|
|
37
53
|
|
|
38
54
|
tryClone(name) {
|
|
39
|
-
|
|
55
|
+
if(!this.enabled) return; // 🔇 prevent playing clones
|
|
56
|
+
|
|
57
|
+
let cc = 1;
|
|
40
58
|
try {
|
|
41
|
-
while(this.audios[name + cc].paused
|
|
59
|
+
while(this.audios[name + cc] && this.audios[name + cc].paused === false) {
|
|
42
60
|
cc++;
|
|
43
61
|
}
|
|
44
|
-
if
|
|
45
|
-
|
|
62
|
+
if(this.audios[name + cc]) {
|
|
63
|
+
this.audios[name + cc].play();
|
|
64
|
+
}
|
|
65
|
+
} catch(err) {
|
|
66
|
+
console.warn("Clone play failed:", err);
|
|
67
|
+
}
|
|
46
68
|
}
|
|
47
69
|
}
|