pxt-arcade 1.11.21 → 1.11.23

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 (44) hide show
  1. package/built/common-sim.d.ts +5 -0
  2. package/built/common-sim.js +28 -4
  3. package/built/sim.js +35 -6
  4. package/built/target.js +628 -315
  5. package/built/target.json +628 -315
  6. package/built/targetlight.json +5 -5
  7. package/docs/hero-banner.md +7 -2
  8. package/docs/static/banners/wakanda-banner.png +0 -0
  9. package/docs/static/skillmap/assets/gallery.png +0 -0
  10. package/docs/static/skillmap/backgrounds/dino-comp.png +0 -0
  11. package/docs/static/skillmap/backgrounds/story-comp.png +0 -0
  12. package/docs/static/tutorials/wakanda/assets.png +0 -0
  13. package/docs/static/tutorials/wakanda/namor.png +0 -0
  14. package/docs/static/tutorials/wakanda/okoye.png +0 -0
  15. package/docs/static/tutorials/wakanda/riri.png +0 -0
  16. package/docs/static/tutorials/wakanda/shuri.png +0 -0
  17. package/docs/static/tutorials/wakanda/wakanda.png +0 -0
  18. package/docs/test/skillmap/balloon/balloon4.md +90 -216
  19. package/docs/test/skillmap/dino/collectort1.md +334 -0
  20. package/docs/test/skillmap/dino/collectort2.md +272 -0
  21. package/docs/test/skillmap/dino/collectort3.md +304 -0
  22. package/docs/test/skillmap/dino/collectort4.md +330 -0
  23. package/docs/test/skillmap/dino/collectort4old.md +433 -0
  24. package/docs/test/skillmap/dino/collectort5.md +499 -0
  25. package/docs/test/skillmap/dino/scroller.ts +54 -0
  26. package/docs/test/skillmap/mole/mole1.md +3 -3
  27. package/docs/test/skillmap/mole/mole2.md +8 -8
  28. package/docs/test/skillmap/mole/mole3.md +14 -12
  29. package/docs/test/skillmap/mole/mole4.md +14 -12
  30. package/docs/test/skillmap/star/star1.md +270 -0
  31. package/docs/test/skillmap/star/star2.md +262 -0
  32. package/docs/test/skillmap/star/star3.md +186 -0
  33. package/docs/test/skillmap/star/star4.md +162 -0
  34. package/docs/test/skillmap/star.md +86 -0
  35. package/docs/test/skillmap/story/joke-examples.md +41 -0
  36. package/docs/test/skillmap/story/story1.md +275 -0
  37. package/docs/test/skillmap/story/story2.md +289 -0
  38. package/docs/test/skillmap/story/story3.md +626 -0
  39. package/docs/test/skillmap/story/story4.md +1774 -0
  40. package/docs/test/skillmap/story.md +90 -0
  41. package/docs/test/tutorials/wakanda.md +421 -0
  42. package/docs/tutorials/wakanda-forever.md +558 -0
  43. package/package.json +4 -4
  44. package/targetconfig.json +2 -1
@@ -801,6 +801,11 @@ declare namespace pxsim {
801
801
  button: number;
802
802
  state: "Pressed" | "Released" | "Held";
803
803
  }
804
+ interface MultiplayerAudioEvent extends SimulatorMultiplayerMessage {
805
+ content: "Audio";
806
+ instruction: "playinstructions" | "muteallchannels";
807
+ soundbuf?: Uint8Array;
808
+ }
804
809
  class MultiplayerState {
805
810
  lastMessageId: number;
806
811
  origin: string;
@@ -2541,15 +2541,15 @@ var pxsim;
2541
2541
  pxsim.getMultiplayerState().send(msg);
2542
2542
  }, 50, true);
2543
2543
  function postImage(im) {
2544
- var _a;
2545
2544
  if (pxsim.getMultiplayerState().origin !== "server")
2546
2545
  return;
2547
2546
  const asBuf = pxsim.image.toBuffer(im);
2548
2547
  const sb = pxsim.board();
2548
+ const screenState = sb && sb.screenState;
2549
2549
  throttledImgPost({
2550
2550
  content: "Image",
2551
2551
  image: asBuf,
2552
- palette: (_a = sb === null || sb === void 0 ? void 0 : sb.screenState) === null || _a === void 0 ? void 0 : _a.paletteToUint8Array(),
2552
+ palette: screenState && screenState.paletteToUint8Array(),
2553
2553
  });
2554
2554
  }
2555
2555
  multiplayer.postImage = postImage;
@@ -2582,6 +2582,18 @@ var pxsim;
2582
2582
  init(origin) {
2583
2583
  this.origin = origin;
2584
2584
  pxsim.runtime.board.addMessageListener(msg => this.messageHandler(msg));
2585
+ if (this.origin === "server") {
2586
+ pxsim.AudioContextManager.soundEventCallback = (ev, data) => {
2587
+ this.send({
2588
+ content: "Audio",
2589
+ instruction: ev,
2590
+ soundbuf: data,
2591
+ });
2592
+ };
2593
+ }
2594
+ else {
2595
+ pxsim.AudioContextManager.soundEventCallback = undefined;
2596
+ }
2585
2597
  }
2586
2598
  setButton(key, isPressed) {
2587
2599
  if (this.origin === "client") {
@@ -2593,7 +2605,6 @@ var pxsim;
2593
2605
  }
2594
2606
  }
2595
2607
  messageHandler(msg) {
2596
- var _a;
2597
2608
  if (!isMultiplayerMessage(msg)) {
2598
2609
  return;
2599
2610
  }
@@ -2604,7 +2615,7 @@ var pxsim;
2604
2615
  msg.image.data = new Uint8Array(msg.image.data);
2605
2616
  }
2606
2617
  this.backgroundImage = pxsim.image.ofBuffer(msg.image);
2607
- if (((_a = msg.palette) === null || _a === void 0 ? void 0 : _a.length) === 48) {
2618
+ if (msg.palette && msg.palette.length === 48) {
2608
2619
  const palBuffer = new pxsim.RefBuffer(msg.palette);
2609
2620
  pxsim.pxtcore.setPalette(palBuffer);
2610
2621
  }
@@ -2616,6 +2627,16 @@ var pxsim;
2616
2627
  msg.state === "Pressed" || msg.state === "Held");
2617
2628
  }
2618
2629
  }
2630
+ else if (isAudioMessage(msg)) {
2631
+ if (this.origin === "client") {
2632
+ if (msg.instruction === "playinstructions") {
2633
+ pxsim.AudioContextManager.playInstructionsAsync(msg.soundbuf);
2634
+ }
2635
+ else if (msg.instruction === "muteallchannels") {
2636
+ pxsim.AudioContextManager.muteAllChannels();
2637
+ }
2638
+ }
2639
+ }
2619
2640
  }
2620
2641
  }
2621
2642
  pxsim.MultiplayerState = MultiplayerState;
@@ -2628,6 +2649,9 @@ var pxsim;
2628
2649
  function isButtonMessage(msg) {
2629
2650
  return msg && msg.content === "Button";
2630
2651
  }
2652
+ function isAudioMessage(msg) {
2653
+ return msg && msg.content === "Audio";
2654
+ }
2631
2655
  })(pxsim || (pxsim = {}));
2632
2656
  var pxsim;
2633
2657
  (function (pxsim) {
package/built/sim.js CHANGED
@@ -500,8 +500,13 @@ var pxsim;
500
500
  indicateFocus(document.hasFocus());
501
501
  this.accelerometerState.attachEvents(document.body);
502
502
  if (this.runOptions && this.runOptions.options) {
503
- if (this.runOptions.options.mpRole) {
504
- this.multiplayerState.init(this.runOptions.options.mpRole);
503
+ const mpRole = this.runOptions.options.mpRole;
504
+ if (mpRole) {
505
+ this.multiplayerState.init(mpRole);
506
+ if (mpRole === "client") {
507
+ const wrapper = document.getElementById("wrap");
508
+ wrapper && wrapper.classList.add("mp-client");
509
+ }
505
510
  }
506
511
  }
507
512
  this.updateStats();
@@ -2750,15 +2755,15 @@ var pxsim;
2750
2755
  pxsim.getMultiplayerState().send(msg);
2751
2756
  }, 50, true);
2752
2757
  function postImage(im) {
2753
- var _a;
2754
2758
  if (pxsim.getMultiplayerState().origin !== "server")
2755
2759
  return;
2756
2760
  const asBuf = pxsim.image.toBuffer(im);
2757
2761
  const sb = pxsim.board();
2762
+ const screenState = sb && sb.screenState;
2758
2763
  throttledImgPost({
2759
2764
  content: "Image",
2760
2765
  image: asBuf,
2761
- palette: (_a = sb === null || sb === void 0 ? void 0 : sb.screenState) === null || _a === void 0 ? void 0 : _a.paletteToUint8Array(),
2766
+ palette: screenState && screenState.paletteToUint8Array(),
2762
2767
  });
2763
2768
  }
2764
2769
  multiplayer.postImage = postImage;
@@ -2791,6 +2796,18 @@ var pxsim;
2791
2796
  init(origin) {
2792
2797
  this.origin = origin;
2793
2798
  pxsim.runtime.board.addMessageListener(msg => this.messageHandler(msg));
2799
+ if (this.origin === "server") {
2800
+ pxsim.AudioContextManager.soundEventCallback = (ev, data) => {
2801
+ this.send({
2802
+ content: "Audio",
2803
+ instruction: ev,
2804
+ soundbuf: data,
2805
+ });
2806
+ };
2807
+ }
2808
+ else {
2809
+ pxsim.AudioContextManager.soundEventCallback = undefined;
2810
+ }
2794
2811
  }
2795
2812
  setButton(key, isPressed) {
2796
2813
  if (this.origin === "client") {
@@ -2802,7 +2819,6 @@ var pxsim;
2802
2819
  }
2803
2820
  }
2804
2821
  messageHandler(msg) {
2805
- var _a;
2806
2822
  if (!isMultiplayerMessage(msg)) {
2807
2823
  return;
2808
2824
  }
@@ -2813,7 +2829,7 @@ var pxsim;
2813
2829
  msg.image.data = new Uint8Array(msg.image.data);
2814
2830
  }
2815
2831
  this.backgroundImage = pxsim.image.ofBuffer(msg.image);
2816
- if (((_a = msg.palette) === null || _a === void 0 ? void 0 : _a.length) === 48) {
2832
+ if (msg.palette && msg.palette.length === 48) {
2817
2833
  const palBuffer = new pxsim.RefBuffer(msg.palette);
2818
2834
  pxsim.pxtcore.setPalette(palBuffer);
2819
2835
  }
@@ -2825,6 +2841,16 @@ var pxsim;
2825
2841
  msg.state === "Pressed" || msg.state === "Held");
2826
2842
  }
2827
2843
  }
2844
+ else if (isAudioMessage(msg)) {
2845
+ if (this.origin === "client") {
2846
+ if (msg.instruction === "playinstructions") {
2847
+ pxsim.AudioContextManager.playInstructionsAsync(msg.soundbuf);
2848
+ }
2849
+ else if (msg.instruction === "muteallchannels") {
2850
+ pxsim.AudioContextManager.muteAllChannels();
2851
+ }
2852
+ }
2853
+ }
2828
2854
  }
2829
2855
  }
2830
2856
  pxsim.MultiplayerState = MultiplayerState;
@@ -2837,6 +2863,9 @@ var pxsim;
2837
2863
  function isButtonMessage(msg) {
2838
2864
  return msg && msg.content === "Button";
2839
2865
  }
2866
+ function isAudioMessage(msg) {
2867
+ return msg && msg.content === "Audio";
2868
+ }
2840
2869
  })(pxsim || (pxsim = {}));
2841
2870
  var pxsim;
2842
2871
  (function (pxsim) {