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.
Files changed (124) hide show
  1. package/examples/games/jamb/html-content.js +123 -0
  2. package/examples/games/jamb/jamb.js +240 -87
  3. package/examples/unlit-textures.js +18 -17
  4. package/main.js +503 -453
  5. package/package.json +1 -1
  6. package/public/app.js +706 -192
  7. package/public/css/style.css +229 -80
  8. package/public/examples.js +609 -187
  9. package/public/index.html +0 -3
  10. package/public/res/audios/kenney/Kenney.url +2 -0
  11. package/public/res/audios/kenney/License.txt +22 -0
  12. package/public/res/audios/kenney/Patreon.url +2 -0
  13. package/public/res/audios/kenney/audios/back_001.ogg +0 -0
  14. package/public/res/audios/kenney/audios/back_002.ogg +0 -0
  15. package/public/res/audios/kenney/audios/back_003.ogg +0 -0
  16. package/public/res/audios/kenney/audios/back_004.ogg +0 -0
  17. package/public/res/audios/kenney/audios/bong_001.ogg +0 -0
  18. package/public/res/audios/kenney/audios/click_001.ogg +0 -0
  19. package/public/res/audios/kenney/audios/click_002.ogg +0 -0
  20. package/public/res/audios/kenney/audios/click_003.ogg +0 -0
  21. package/public/res/audios/kenney/audios/click_004.ogg +0 -0
  22. package/public/res/audios/kenney/audios/click_005.ogg +0 -0
  23. package/public/res/audios/kenney/audios/close_001.ogg +0 -0
  24. package/public/res/audios/kenney/audios/close_002.ogg +0 -0
  25. package/public/res/audios/kenney/audios/close_003.ogg +0 -0
  26. package/public/res/audios/kenney/audios/close_004.ogg +0 -0
  27. package/public/res/audios/kenney/audios/confirmation_001.ogg +0 -0
  28. package/public/res/audios/kenney/audios/confirmation_002.ogg +0 -0
  29. package/public/res/audios/kenney/audios/confirmation_003.ogg +0 -0
  30. package/public/res/audios/kenney/audios/confirmation_004.ogg +0 -0
  31. package/public/res/audios/kenney/audios/drop_001.ogg +0 -0
  32. package/public/res/audios/kenney/audios/drop_002.ogg +0 -0
  33. package/public/res/audios/kenney/audios/drop_003.ogg +0 -0
  34. package/public/res/audios/kenney/audios/drop_004.ogg +0 -0
  35. package/public/res/audios/kenney/audios/error_001.ogg +0 -0
  36. package/public/res/audios/kenney/audios/error_002.ogg +0 -0
  37. package/public/res/audios/kenney/audios/error_003.ogg +0 -0
  38. package/public/res/audios/kenney/audios/error_004.ogg +0 -0
  39. package/public/res/audios/kenney/audios/error_005.ogg +0 -0
  40. package/public/res/audios/kenney/audios/error_006.ogg +0 -0
  41. package/public/res/audios/kenney/audios/error_007.ogg +0 -0
  42. package/public/res/audios/kenney/audios/error_008.ogg +0 -0
  43. package/public/res/audios/kenney/audios/glass_001.ogg +0 -0
  44. package/public/res/audios/kenney/audios/glass_002.ogg +0 -0
  45. package/public/res/audios/kenney/audios/glass_003.ogg +0 -0
  46. package/public/res/audios/kenney/audios/glass_004.ogg +0 -0
  47. package/public/res/audios/kenney/audios/glass_005.ogg +0 -0
  48. package/public/res/audios/kenney/audios/glass_006.ogg +0 -0
  49. package/public/res/audios/kenney/audios/glitch_001.ogg +0 -0
  50. package/public/res/audios/kenney/audios/glitch_002.ogg +0 -0
  51. package/public/res/audios/kenney/audios/glitch_003.ogg +0 -0
  52. package/public/res/audios/kenney/audios/glitch_004.ogg +0 -0
  53. package/public/res/audios/kenney/audios/maximize_001.ogg +0 -0
  54. package/public/res/audios/kenney/audios/maximize_002.ogg +0 -0
  55. package/public/res/audios/kenney/audios/maximize_003.ogg +0 -0
  56. package/public/res/audios/kenney/audios/maximize_004.ogg +0 -0
  57. package/public/res/audios/kenney/audios/maximize_005.ogg +0 -0
  58. package/public/res/audios/kenney/audios/maximize_006.ogg +0 -0
  59. package/public/res/audios/kenney/audios/maximize_007.ogg +0 -0
  60. package/public/res/audios/kenney/audios/maximize_008.ogg +0 -0
  61. package/public/res/audios/kenney/audios/maximize_009.ogg +0 -0
  62. package/public/res/audios/kenney/audios/minimize_001.ogg +0 -0
  63. package/public/res/audios/kenney/audios/minimize_002.ogg +0 -0
  64. package/public/res/audios/kenney/audios/minimize_003.ogg +0 -0
  65. package/public/res/audios/kenney/audios/minimize_004.ogg +0 -0
  66. package/public/res/audios/kenney/audios/minimize_005.ogg +0 -0
  67. package/public/res/audios/kenney/audios/minimize_006.ogg +0 -0
  68. package/public/res/audios/kenney/audios/minimize_007.ogg +0 -0
  69. package/public/res/audios/kenney/audios/minimize_008.ogg +0 -0
  70. package/public/res/audios/kenney/audios/minimize_009.ogg +0 -0
  71. package/public/res/audios/kenney/audios/open_001.ogg +0 -0
  72. package/public/res/audios/kenney/audios/open_002.ogg +0 -0
  73. package/public/res/audios/kenney/audios/open_003.ogg +0 -0
  74. package/public/res/audios/kenney/audios/open_004.ogg +0 -0
  75. package/public/res/audios/kenney/audios/pluck_001.ogg +0 -0
  76. package/public/res/audios/kenney/audios/pluck_002.ogg +0 -0
  77. package/public/res/audios/kenney/audios/question_001.ogg +0 -0
  78. package/public/res/audios/kenney/audios/question_002.ogg +0 -0
  79. package/public/res/audios/kenney/audios/question_003.ogg +0 -0
  80. package/public/res/audios/kenney/audios/question_004.ogg +0 -0
  81. package/public/res/audios/kenney/audios/scratch_001.ogg +0 -0
  82. package/public/res/audios/kenney/audios/scratch_002.ogg +0 -0
  83. package/public/res/audios/kenney/audios/scratch_003.ogg +0 -0
  84. package/public/res/audios/kenney/audios/scratch_004.ogg +0 -0
  85. package/public/res/audios/kenney/audios/scratch_005.ogg +0 -0
  86. package/public/res/audios/kenney/audios/scroll_001.ogg +0 -0
  87. package/public/res/audios/kenney/audios/scroll_002.ogg +0 -0
  88. package/public/res/audios/kenney/audios/scroll_003.ogg +0 -0
  89. package/public/res/audios/kenney/audios/scroll_004.ogg +0 -0
  90. package/public/res/audios/kenney/audios/scroll_005.ogg +0 -0
  91. package/public/res/audios/kenney/audios/select_001.ogg +0 -0
  92. package/public/res/audios/kenney/audios/select_002.ogg +0 -0
  93. package/public/res/audios/kenney/audios/select_003.ogg +0 -0
  94. package/public/res/audios/kenney/audios/select_004.ogg +0 -0
  95. package/public/res/audios/kenney/audios/select_005.ogg +0 -0
  96. package/public/res/audios/kenney/audios/select_006.ogg +0 -0
  97. package/public/res/audios/kenney/audios/select_007.ogg +0 -0
  98. package/public/res/audios/kenney/audios/select_008.ogg +0 -0
  99. package/public/res/audios/kenney/audios/switch_001.ogg +0 -0
  100. package/public/res/audios/kenney/audios/switch_002.ogg +0 -0
  101. package/public/res/audios/kenney/audios/switch_003.ogg +0 -0
  102. package/public/res/audios/kenney/audios/switch_004.ogg +0 -0
  103. package/public/res/audios/kenney/audios/switch_005.ogg +0 -0
  104. package/public/res/audios/kenney/audios/switch_006.ogg +0 -0
  105. package/public/res/audios/kenney/audios/switch_007.ogg +0 -0
  106. package/public/res/audios/kenney/audios/tick_001.ogg +0 -0
  107. package/public/res/audios/kenney/audios/tick_002.ogg +0 -0
  108. package/public/res/audios/kenney/audios/tick_004.ogg +0 -0
  109. package/public/res/audios/kenney/audios/toggle_001.ogg +0 -0
  110. package/public/res/audios/kenney/audios/toggle_002.ogg +0 -0
  111. package/public/res/audios/kenney/audios/toggle_003.ogg +0 -0
  112. package/public/res/audios/kenney/audios/toggle_004.ogg +0 -0
  113. package/public/res/audios/toggle_002.mp3 +0 -0
  114. package/public/res/meshes/shapes/star1.obj +60 -0
  115. package/public/res/multilang/en.json +8 -1
  116. package/public/res/multilang/sr.json +7 -1
  117. package/readme.md +16 -0
  118. package/src/engine/ball.js +0 -3
  119. package/src/engine/cube.js +0 -1
  120. package/src/engine/mesh-obj.js +0 -7
  121. package/src/engine/utils.js +71 -1
  122. package/src/physics/matrix-ammo.js +64 -26
  123. package/src/sounds/sounds.js +32 -10
  124. package/src/world.js +361 -307
@@ -265,34 +265,65 @@ p {
265
265
  }
266
266
 
267
267
  .btn {
268
+ font-family: 'Orbitron', sans-serif;
269
+ font-weight: 600;
270
+ font-size: 16px;
271
+ color: #00ffff;
272
+ text-transform: uppercase;
273
+ letter-spacing: 1.5px;
274
+ padding: 12px 24px;
275
+ background: linear-gradient(145deg, #0f0f0f, #1a1a1a);
276
+ border: 2px solid #00ffff;
277
+ border-radius: 12px;
278
+ box-shadow: 0 0 10px #00ffff44, 0 0 20px #00ffff22 inset;
268
279
  cursor: pointer;
269
- background: #6e34d9;
270
- background-image: -webkit-linear-gradient(top, #6e34d9, #0a027a);
271
- background-image: -moz-linear-gradient(top, #6e34d9, #0a027a);
272
- background-image: -ms-linear-gradient(top, #6e34d9, #0a027a);
273
- background-image: -o-linear-gradient(top, #6e34d9, #0a027a);
274
- background-image: linear-gradient(to bottom, #6e34d9, #0a027a);
275
- -webkit-border-radius: 28;
276
- -moz-border-radius: 28;
277
- border-radius: 28px;
278
- text-shadow: 0px 0px 14px #ffd52e;
279
- -webkit-box-shadow: 0px 1px 26px #666666;
280
- -moz-box-shadow: 0px 1px 26px #666666;
281
- box-shadow: 0px 1px 26px #666666;
282
- color: #ffffff;
283
- font-size: 13px;
284
- padding: 4px 8px 4px 8px;
285
- text-decoration: none;
280
+ transition: all 0.25s ease-in-out;
281
+ display: inline-block;
282
+ text-align: center;
286
283
  }
287
284
 
288
285
  .btn:hover {
289
- background: #0a027a;
290
- background-image: -webkit-linear-gradient(top, #0a027a, #6e34d9);
291
- background-image: -moz-linear-gradient(top, #0a027a, #6e34d9);
292
- background-image: -ms-linear-gradient(top, #0a027a, #6e34d9);
293
- background-image: -o-linear-gradient(top, #0a027a, #6e34d9);
294
- background-image: linear-gradient(to bottom, #0a027a, #6e34d9);
295
- text-decoration: none;
286
+ background: #00ffff22;
287
+ box-shadow: 0 0 20px #00ffffaa, 0 0 30px #00ffff55 inset;
288
+ color: #ffffff;
289
+ transform: scale(1.05);
290
+ }
291
+
292
+ .btn span::before {
293
+ content: '▶ ';
294
+ color: #00ffffaa;
295
+ }
296
+
297
+ .fancy-label {
298
+ font-family: 'Orbitron', sans-serif;
299
+ font-weight: 500;
300
+ font-size: 14px;
301
+ color: #00ffff;
302
+ letter-spacing: 1px;
303
+ text-shadow: 0 0 4px #00ffffaa;
304
+ padding: 2px 6px;
305
+ background-color: #111111cc;
306
+ border: 1px solid #00ffff66;
307
+ border-radius: 6px;
308
+ box-shadow: 0 0 6px #00ffff33;
309
+ display: inline-block;
310
+ user-select: none;
311
+ }
312
+
313
+ .fancy-title {
314
+ width: 100%;
315
+ font-family: 'Orbitron', sans-serif;
316
+ font-weight: 700;
317
+ font-size: 32px;
318
+ color: #00ffff;
319
+ text-transform: uppercase;
320
+ letter-spacing: 2px;
321
+ background: transparent;
322
+ text-shadow: 0 0 4px #00ffffaa, 0 0 8px #00ffff55;
323
+ border: none;
324
+ padding: 8px 16px;
325
+ display: inline-block;
326
+ user-select: none;
296
327
  }
297
328
 
298
329
  .btn2 {
@@ -346,7 +377,7 @@ p {
346
377
  }
347
378
 
348
379
  #messageBox {
349
- font-size: xx-large;
380
+ font-size: large;
350
381
  padding: 10%;
351
382
  align-items: center;
352
383
  text-align: center;
@@ -414,7 +445,7 @@ p {
414
445
  }
415
446
 
416
447
  .animate1 {
417
- text-shadow: 0px 4px 4px #282828;
448
+ text-shadow: 0px 4px 4px #282828;
418
449
  -webkit-text-stroke-width: 1px;
419
450
  -webkit-text-stroke-color: black;
420
451
 
@@ -427,19 +458,45 @@ p {
427
458
  }
428
459
 
429
460
  @-webkit-keyframes AnimationName {
430
- 0%{background-position:0% 50%}
431
- 50%{background-position:100% 50%}
432
- 100%{background-position:0% 50%}
461
+ 0% {
462
+ background-position: 0% 50%
463
+ }
464
+
465
+ 50% {
466
+ background-position: 100% 50%
467
+ }
468
+
469
+ 100% {
470
+ background-position: 0% 50%
471
+ }
433
472
  }
473
+
434
474
  @-moz-keyframes AnimationName {
435
- 0%{background-position:0% 50%}
436
- 50%{background-position:100% 50%}
437
- 100%{background-position:0% 50%}
475
+ 0% {
476
+ background-position: 0% 50%
477
+ }
478
+
479
+ 50% {
480
+ background-position: 100% 50%
481
+ }
482
+
483
+ 100% {
484
+ background-position: 0% 50%
485
+ }
438
486
  }
487
+
439
488
  @keyframes AnimationName {
440
- 0%{background-position:0% 50%}
441
- 50%{background-position:100% 50%}
442
- 100%{background-position:0% 50%}
489
+ 0% {
490
+ background-position: 0% 50%
491
+ }
492
+
493
+ 50% {
494
+ background-position: 100% 50%
495
+ }
496
+
497
+ 100% {
498
+ background-position: 0% 50%
499
+ }
443
500
  }
444
501
 
445
502
 
@@ -454,89 +511,181 @@ p {
454
511
  }
455
512
 
456
513
  @-webkit-keyframes bganim {
457
- 0%{background-position:0% 45%}
458
- 50%{background-position:100% 56%}
459
- 100%{background-position:0% 45%}
514
+ 0% {
515
+ background-position: 0% 45%
516
+ }
517
+
518
+ 50% {
519
+ background-position: 100% 56%
520
+ }
521
+
522
+ 100% {
523
+ background-position: 0% 45%
524
+ }
460
525
  }
526
+
461
527
  @-moz-keyframes bganim {
462
- 0%{background-position:0% 45%}
463
- 50%{background-position:100% 56%}
464
- 100%{background-position:0% 45%}
528
+ 0% {
529
+ background-position: 0% 45%
530
+ }
531
+
532
+ 50% {
533
+ background-position: 100% 56%
534
+ }
535
+
536
+ 100% {
537
+ background-position: 0% 45%
538
+ }
465
539
  }
540
+
466
541
  @-o-keyframes bganim {
467
- 0%{background-position:0% 45%}
468
- 50%{background-position:100% 56%}
469
- 100%{background-position:0% 45%}
542
+ 0% {
543
+ background-position: 0% 45%
544
+ }
545
+
546
+ 50% {
547
+ background-position: 100% 56%
548
+ }
549
+
550
+ 100% {
551
+ background-position: 0% 45%
552
+ }
470
553
  }
554
+
471
555
  @keyframes bganim {
472
- 0%{background-position:0% 45%}
473
- 50%{background-position:100% 56%}
474
- 100%{background-position:0% 45%}
475
- }
556
+ 0% {
557
+ background-position: 0% 45%
558
+ }
476
559
 
560
+ 50% {
561
+ background-position: 100% 56%
562
+ }
563
+
564
+ 100% {
565
+ background-position: 0% 45%
566
+ }
567
+ }
477
568
 
478
- /* The switch - the box around the slider */
479
569
  .switch {
480
570
  position: relative;
481
571
  display: inline-block;
482
572
  width: 60px;
483
- height: 34px;
573
+ /* You can adjust */
574
+ height: 32px;
484
575
  }
485
576
 
486
- /* Hide default HTML checkbox */
487
577
  .switch input {
488
578
  opacity: 0;
489
579
  width: 0;
490
580
  height: 0;
581
+ position: absolute;
491
582
  }
492
583
 
493
- /* The slider */
584
+ /* Force span to fill the label exactly */
494
585
  .sliderSwitch {
495
586
  position: absolute;
496
- cursor: pointer;
497
587
  top: 0;
498
588
  left: 0;
499
- right: 0;
500
- bottom: 0;
501
- background-color: #ccc;
502
- -webkit-transition: .4s;
503
- transition: .4s;
589
+ width: 100%;
590
+ height: 100%;
591
+ display: block;
592
+ background-color: #111;
593
+ border-radius: 34px;
594
+ border: 2px solid #00ffee;
595
+ box-shadow: 0 0 10px #00ffee55;
596
+ transition: all 0.4s ease;
597
+ overflow: hidden;
598
+ z-index: 1;
504
599
  }
505
600
 
506
- .sliderSwitch:before {
507
- position: absolute;
601
+ /* The circle inside the slider */
602
+ .sliderSwitch::before {
508
603
  content: "";
509
- height: 26px;
510
- width: 26px;
604
+ position: absolute;
605
+ width: 24px;
606
+ height: 24px;
511
607
  left: 4px;
512
608
  bottom: 4px;
513
- background-color: white;
514
- -webkit-transition: .4s;
515
- transition: .4s;
609
+ background-color: #00ffee;
610
+ border-radius: 50%;
611
+ transition: transform 0.4s ease;
612
+ z-index: 2;
613
+ box-shadow: 0 0 10px #00ffee;
516
614
  }
517
615
 
518
- input:checked + .sliderSwitch {
519
- background-color: #2196F3;
616
+ /* ON state */
617
+ .switch input:checked+.sliderSwitch {
618
+ background-color: #002233;
619
+ border-color: #00ff88;
620
+ box-shadow: 0 0 12px #00ff8844;
520
621
  }
521
622
 
522
- input:focus + .sliderSwitch {
523
- box-shadow: 0 0 1px #2196F3;
623
+ .switch input:checked+.sliderSwitch::before {
624
+ transform: translateX(28px);
625
+ background-color: #00ff88;
626
+ box-shadow: 0 0 10px #00ff88;
524
627
  }
525
628
 
526
- input:checked + .sliderSwitch:before {
527
- -webkit-transform: translateX(26px);
528
- -ms-transform: translateX(26px);
529
- transform: translateX(26px);
629
+ select {
630
+ appearance: none;
631
+ /* Remove default arrow */
632
+ background-color: #111;
633
+ color: #00ffee;
634
+ border: 2px solid #00ffee55;
635
+ border-radius: 8px;
636
+ padding: 8px 12px;
637
+ font-size: 16px;
638
+ font-family: 'Orbitron', sans-serif;
639
+ /* Optional futuristic font */
640
+ box-shadow: 0 0 8px #00ffee33;
641
+ outline: none;
642
+ transition: 0.3s ease;
643
+ cursor: pointer;
530
644
  }
531
645
 
532
- .sliderSwitch span {
533
- width: unset;
646
+ select:hover {
647
+ border-color: #00ffee;
648
+ box-shadow: 0 0 12px #00ffeeaa;
534
649
  }
535
- /* Rounded sliders */
536
- .sliderSwitch.round {
537
- border-radius: 34px;
650
+
651
+ select:focus {
652
+ border-color: #00ff88;
653
+ box-shadow: 0 0 16px #00ff88aa;
538
654
  }
539
655
 
540
- .sliderSwitch.round:before {
541
- border-radius: 50%;
656
+ option {
657
+ background-color: #111;
658
+ color: #00ffee;
659
+ padding: 6px;
660
+ font-family: 'Orbitron', sans-serif;
661
+ }
662
+
663
+ #jambTable {
664
+ position: absolute;
665
+ display:flex;
666
+ top: 17%;
667
+ left: 17%;
668
+ width: 300px;
669
+ transform: translate(-50%, -50%) scale(1);
670
+ background: rgba(0, 0, 0, 0.9);
671
+ border: 2px solid #0ff;
672
+ padding: 15px;
673
+ border-radius: 12px;
674
+ transform-origin: center center;
675
+ transition: transform 0.4s ease, opacity 0.3s ease;
676
+ font-family: 'Orbitron', sans-serif;
677
+ }
678
+
679
+ /* Visible state */
680
+ #jambTable.show {
681
+ display: flex;
682
+ transform: translate(-50%, -50%) scale(1);
683
+ opacity: 1;
684
+ }
685
+
686
+ /* Hidden state */
687
+ #jambTable.hide {
688
+ transform: translate(-50%, -50%) scale(0);
689
+ opacity: 0;
690
+ pointer-events: none;
542
691
  }