pxt-common-packages 10.2.4 → 10.2.6

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 (38) hide show
  1. package/built/common-sim.d.ts +9 -2
  2. package/built/common-sim.js +61 -18
  3. package/libs/azureiot/built/debug/binary.js +461 -461
  4. package/libs/color/built/debug/binary.js +8 -8
  5. package/libs/color-sensor/built/debug/binary.js +8 -8
  6. package/libs/controller/built/debug/binary.js +7386 -7294
  7. package/libs/controller---none/built/debug/binary.js +7365 -7273
  8. package/libs/datalogger/built/debug/binary.js +63 -63
  9. package/libs/edge-connector/built/debug/binary.js +8 -8
  10. package/libs/esp32/built/debug/binary.js +462 -462
  11. package/libs/game/_locales/game-jsdoc-strings.json +1 -0
  12. package/libs/game/built/debug/binary.js +7278 -7186
  13. package/libs/game/controller.ts +27 -3
  14. package/libs/game/info.ts +175 -91
  15. package/libs/game/multiplayer.cpp +1 -4
  16. package/libs/game/multiplayer.ts +13 -0
  17. package/libs/game/scene.ts +2 -0
  18. package/libs/game/sim/multiplayer.ts +52 -21
  19. package/libs/lcd/built/debug/binary.js +8 -8
  20. package/libs/light-spectrum-sensor/built/debug/binary.js +8 -8
  21. package/libs/lora/built/debug/binary.js +8 -8
  22. package/libs/matrix-keypad/built/debug/binary.js +8 -8
  23. package/libs/mqtt/built/debug/binary.js +176 -176
  24. package/libs/net/built/debug/binary.js +176 -176
  25. package/libs/net-game/built/debug/binary.js +9066 -8974
  26. package/libs/palette/built/debug/binary.js +7277 -7185
  27. package/libs/pixel/built/debug/binary.js +8 -8
  28. package/libs/power/built/debug/binary.js +8 -8
  29. package/libs/proximity/built/debug/binary.js +8 -8
  30. package/libs/radio/built/debug/binary.js +8 -8
  31. package/libs/radio-broadcast/built/debug/binary.js +8 -8
  32. package/libs/rotary-encoder/built/debug/binary.js +8 -8
  33. package/libs/screen/built/debug/binary.js +50 -50
  34. package/libs/screen/sim/state.ts +27 -5
  35. package/libs/servo/built/debug/binary.js +8 -8
  36. package/libs/sprite-scaling/built/debug/binary.js +7277 -7185
  37. package/libs/storyboard/built/debug/binary.js +7277 -7185
  38. package/package.json +2 -2
@@ -773,7 +773,7 @@ declare namespace pxsim {
773
773
  }
774
774
  }
775
775
  declare namespace pxsim.multiplayer {
776
- function postImage(im: pxsim.RefImage, goal: string): void;
776
+ function postImage(im: pxsim.RefImage): void;
777
777
  function getCurrentImage(): pxsim.RefImage;
778
778
  function setOrigin(origin: "client" | "server" | undefined): void;
779
779
  function getOrigin(): string;
@@ -793,14 +793,19 @@ declare namespace pxsim {
793
793
  }
794
794
  interface MultiplayerImageMessage extends SimulatorMultiplayerMessage {
795
795
  content: "Image";
796
- goal: string;
797
796
  image: RefBuffer;
797
+ palette: Uint8Array;
798
798
  }
799
799
  interface MultiplayerButtonEvent extends SimulatorMultiplayerMessage {
800
800
  content: "Button";
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;
@@ -1131,6 +1136,8 @@ declare namespace pxsim {
1131
1136
  onChange: () => void;
1132
1137
  constructor(paletteSrc: string[], w?: number, h?: number);
1133
1138
  setScreenBrightness(b: number): void;
1139
+ paletteToUint8Array(): Uint8Array;
1140
+ setPaletteFromHtmlColors(src: string[]): void;
1134
1141
  setPalette(buf: RefBuffer): void;
1135
1142
  bpp(): 1 | 4;
1136
1143
  didChange(): boolean;
@@ -2537,12 +2537,19 @@ var pxsim;
2537
2537
  (function (pxsim) {
2538
2538
  var multiplayer;
2539
2539
  (function (multiplayer) {
2540
- function postImage(im, goal) {
2540
+ const throttledImgPost = pxsim.U.throttle((msg) => {
2541
+ pxsim.getMultiplayerState().send(msg);
2542
+ }, 50, true);
2543
+ function postImage(im) {
2544
+ if (pxsim.getMultiplayerState().origin !== "server")
2545
+ return;
2541
2546
  const asBuf = pxsim.image.toBuffer(im);
2542
- pxsim.getMultiplayerState().send({
2547
+ const sb = pxsim.board();
2548
+ const screenState = sb && sb.screenState;
2549
+ throttledImgPost({
2543
2550
  content: "Image",
2544
2551
  image: asBuf,
2545
- goal
2552
+ palette: screenState && screenState.paletteToUint8Array(),
2546
2553
  });
2547
2554
  }
2548
2555
  multiplayer.postImage = postImage;
@@ -2565,7 +2572,6 @@ var pxsim;
2565
2572
  return pxsim.board().multiplayerState;
2566
2573
  }
2567
2574
  pxsim.getMultiplayerState = getMultiplayerState;
2568
- let postScreenInterval;
2569
2575
  class MultiplayerState {
2570
2576
  constructor() {
2571
2577
  this.lastMessageId = 0;
@@ -2576,17 +2582,18 @@ var pxsim;
2576
2582
  init(origin) {
2577
2583
  this.origin = origin;
2578
2584
  pxsim.runtime.board.addMessageListener(msg => this.messageHandler(msg));
2579
- if (postScreenInterval) {
2580
- clearInterval(postScreenInterval);
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;
2581
2596
  }
2582
- postScreenInterval = setInterval(() => {
2583
- if (this.origin === "server") {
2584
- const b = pxsim.board();
2585
- const screenState = b && b.screenState;
2586
- const lastImage = screenState && screenState.lastImage;
2587
- lastImage && pxsim.multiplayer.postImage(lastImage, "broadcast-screen");
2588
- }
2589
- }, 50);
2590
2597
  }
2591
2598
  setButton(key, isPressed) {
2592
2599
  if (this.origin === "client") {
@@ -2608,6 +2615,10 @@ var pxsim;
2608
2615
  msg.image.data = new Uint8Array(msg.image.data);
2609
2616
  }
2610
2617
  this.backgroundImage = pxsim.image.ofBuffer(msg.image);
2618
+ if (msg.palette && msg.palette.length === 48) {
2619
+ const palBuffer = new pxsim.RefBuffer(msg.palette);
2620
+ pxsim.pxtcore.setPalette(palBuffer);
2621
+ }
2611
2622
  }
2612
2623
  }
2613
2624
  else if (isButtonMessage(msg)) {
@@ -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) {
@@ -4426,7 +4450,6 @@ var pxsim;
4426
4450
  (function (pxsim) {
4427
4451
  function htmlColorToUint32(hexColor) {
4428
4452
  const ca = new Uint8ClampedArray(4);
4429
- const ui = new Uint32Array(ca.buffer);
4430
4453
  const v = parseInt(hexColor.replace(/#/, ""), 16);
4431
4454
  ca[0] = (v >> 16) & 0xff;
4432
4455
  ca[1] = (v >> 8) & 0xff;
@@ -4435,6 +4458,12 @@ var pxsim;
4435
4458
  // convert to uint32 using target endian
4436
4459
  return new Uint32Array(ca.buffer)[0];
4437
4460
  }
4461
+ function UInt32ToRGB(col) {
4462
+ const ui = new Uint32Array(1);
4463
+ ui[0] = col;
4464
+ const ca = new Uint8ClampedArray(ui.buffer);
4465
+ return [ca[0], ca[1], ca[2]];
4466
+ }
4438
4467
  class ScreenState {
4439
4468
  constructor(paletteSrc, w = 0, h = 0) {
4440
4469
  this.width = 0;
@@ -4446,9 +4475,7 @@ var pxsim;
4446
4475
  if (!paletteSrc)
4447
4476
  paletteSrc = ["#000000", "#ffffff"];
4448
4477
  this.palette = new Uint32Array(paletteSrc.length);
4449
- for (let i = 0; i < this.palette.length; ++i) {
4450
- this.palette[i] = htmlColorToUint32(paletteSrc[i]);
4451
- }
4478
+ this.setPaletteFromHtmlColors(paletteSrc);
4452
4479
  if (w) {
4453
4480
  this.width = w;
4454
4481
  this.height = h;
@@ -4459,6 +4486,22 @@ var pxsim;
4459
4486
  setScreenBrightness(b) {
4460
4487
  this.brightness = b | 0;
4461
4488
  }
4489
+ paletteToUint8Array() {
4490
+ const out = new Uint8Array(this.palette.length * 3);
4491
+ for (let i = 0; i < this.palette.length; ++i) {
4492
+ const [r, g, b] = UInt32ToRGB(this.palette[i]);
4493
+ const s = 3 * i;
4494
+ out[s] = r;
4495
+ out[s + 1] = g;
4496
+ out[s + 2] = b;
4497
+ }
4498
+ return out;
4499
+ }
4500
+ setPaletteFromHtmlColors(src) {
4501
+ for (let i = 0; i < this.palette.length; ++i) {
4502
+ this.palette[i] = htmlColorToUint32(src[i]);
4503
+ }
4504
+ }
4462
4505
  setPalette(buf) {
4463
4506
  const ca = new Uint8ClampedArray(4);
4464
4507
  const rd = new Uint32Array(ca.buffer);