pxt-common-packages 9.5.6 → 9.5.9

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 (42) hide show
  1. package/built/common-sim.d.ts +84 -0
  2. package/built/common-sim.js +232 -1
  3. package/libs/azureiot/built/debug/binary.js +461 -461
  4. package/libs/base/sim/core.ts +1 -1
  5. package/libs/color/built/debug/binary.js +8 -8
  6. package/libs/color-sensor/built/debug/binary.js +8 -8
  7. package/libs/controller/built/debug/binary.js +7659 -7665
  8. package/libs/controller---none/built/debug/binary.js +7638 -7644
  9. package/libs/datalogger/built/debug/binary.js +63 -63
  10. package/libs/edge-connector/built/debug/binary.js +8 -8
  11. package/libs/esp32/built/debug/binary.js +462 -462
  12. package/libs/game/_locales/game-jsdoc-strings.json +14 -0
  13. package/libs/game/_locales/game-strings.json +3 -0
  14. package/libs/game/built/debug/binary.js +7551 -7557
  15. package/libs/game/hitbox.ts +2 -2
  16. package/libs/game/keymap.cpp +12 -0
  17. package/libs/game/keymap.ts +169 -0
  18. package/libs/game/multiplayer.cpp +25 -0
  19. package/libs/game/multiplayer.ts +24 -0
  20. package/libs/game/pxt.json +5 -1
  21. package/libs/game/scene.ts +1 -0
  22. package/libs/game/sim/keymap.ts +167 -0
  23. package/libs/game/sim/multiplayer.ts +132 -0
  24. package/libs/lcd/built/debug/binary.js +8 -8
  25. package/libs/light-spectrum-sensor/built/debug/binary.js +8 -8
  26. package/libs/lora/built/debug/binary.js +8 -8
  27. package/libs/matrix-keypad/built/debug/binary.js +8 -8
  28. package/libs/mqtt/built/debug/binary.js +176 -176
  29. package/libs/net/built/debug/binary.js +176 -176
  30. package/libs/net-game/built/debug/binary.js +9339 -9345
  31. package/libs/palette/built/debug/binary.js +7550 -7556
  32. package/libs/pixel/built/debug/binary.js +8 -8
  33. package/libs/power/built/debug/binary.js +8 -8
  34. package/libs/proximity/built/debug/binary.js +8 -8
  35. package/libs/radio/built/debug/binary.js +8 -8
  36. package/libs/radio-broadcast/built/debug/binary.js +8 -8
  37. package/libs/rotary-encoder/built/debug/binary.js +8 -8
  38. package/libs/screen/built/debug/binary.js +50 -50
  39. package/libs/servo/built/debug/binary.js +8 -8
  40. package/libs/sprite-scaling/built/debug/binary.js +7550 -7556
  41. package/libs/storyboard/built/debug/binary.js +7550 -7556
  42. package/package.json +2 -2
@@ -728,6 +728,90 @@ declare namespace pxsim {
728
728
  }
729
729
  declare namespace pxsim.info {
730
730
  }
731
+ declare namespace pxsim.keymap {
732
+ enum Key {
733
+ None = 0,
734
+ Left = 1,
735
+ Up = 2,
736
+ Right = 3,
737
+ Down = 4,
738
+ A = 5,
739
+ B = 6,
740
+ Menu = 7,
741
+ Screenshot = -1,
742
+ Gif = -2,
743
+ Reset = -3,
744
+ TogglePause = -4
745
+ }
746
+ function _setPlayerKeys(player: number, // player number is 1-based
747
+ up: number, down: number, left: number, right: number, A: number, B: number): void;
748
+ function _setSystemKeys(screenshot: number, gif: number, menu: number, reset: number): void;
749
+ }
750
+ declare namespace pxsim {
751
+ import Key = pxsim.keymap.Key;
752
+ interface KeymapBoard extends EventBusBoard {
753
+ keymapState: KeymapState;
754
+ }
755
+ function getKeymapState(): KeymapState;
756
+ class KeymapState {
757
+ keymap: {
758
+ [keyCode: number]: Key;
759
+ };
760
+ altmap: {
761
+ [keyCode: number]: Key;
762
+ };
763
+ mappings: {
764
+ [name: string]: number[];
765
+ };
766
+ constructor();
767
+ setPlayerKeys(player: number, // player number is 1-based
768
+ up: number, down: number, left: number, right: number, A: number, B: number): void;
769
+ setSystemKeys(screenshot: number, gif: number, menu: number, reset: number): void;
770
+ getKey(keyCode: number): Key;
771
+ private saveMap;
772
+ private clearMap;
773
+ }
774
+ }
775
+ declare namespace pxsim.multiplayer {
776
+ function postImage(im: pxsim.RefImage, goal: string): void;
777
+ function getCurrentImage(): pxsim.RefImage;
778
+ function setOrigin(origin: "client" | "server" | undefined): void;
779
+ function getOrigin(): string;
780
+ }
781
+ declare namespace pxsim {
782
+ interface MultiplayerBoard extends EventBusBoard {
783
+ multiplayerState: MultiplayerState;
784
+ }
785
+ function getMultiplayerState(): MultiplayerState;
786
+ interface SimulatorMultiplayerMessage extends SimulatorBroadcastMessage {
787
+ broadcast: true;
788
+ type: "multiplayer";
789
+ content: string;
790
+ origin?: "server" | "client";
791
+ clientNumber?: number;
792
+ id?: number;
793
+ }
794
+ interface MultiplayerImageMessage extends SimulatorMultiplayerMessage {
795
+ content: "Image";
796
+ goal: string;
797
+ image: RefImage;
798
+ }
799
+ interface MultiplayerButtonEvent extends SimulatorMultiplayerMessage {
800
+ content: "Button";
801
+ button: number;
802
+ state: "Pressed" | "Released" | "Held";
803
+ }
804
+ class MultiplayerState {
805
+ lastMessageId: number;
806
+ origin: string;
807
+ backgroundImage: RefImage;
808
+ constructor();
809
+ send(msg: SimulatorMultiplayerMessage): void;
810
+ init(origin: string): void;
811
+ setButton(key: number, isPressed: boolean): void;
812
+ protected messageHandler(msg: SimulatorMessage): void;
813
+ }
814
+ }
731
815
  declare namespace pxsim.gamepad {
732
816
  function setButton(index: number, up: boolean): void;
733
817
  function move(index: number, x: number, y: number): void;
@@ -699,7 +699,7 @@ var pxsim;
699
699
  var pxsim;
700
700
  (function (pxsim) {
701
701
  function board() {
702
- return pxsim.runtime.board;
702
+ return pxsim.runtime && pxsim.runtime.board;
703
703
  }
704
704
  pxsim.board = board;
705
705
  })(pxsim || (pxsim = {}));
@@ -2395,6 +2395,237 @@ var pxsim;
2395
2395
  pxsim.ToggleState = ToggleState;
2396
2396
  })(pxsim || (pxsim = {}));
2397
2397
  var pxsim;
2398
+ (function (pxsim) {
2399
+ var keymap;
2400
+ (function (keymap) {
2401
+ // Keep in sync with pxt-arcade-sim/api.ts
2402
+ let Key;
2403
+ (function (Key) {
2404
+ Key[Key["None"] = 0] = "None";
2405
+ // Player 1
2406
+ Key[Key["Left"] = 1] = "Left";
2407
+ Key[Key["Up"] = 2] = "Up";
2408
+ Key[Key["Right"] = 3] = "Right";
2409
+ Key[Key["Down"] = 4] = "Down";
2410
+ Key[Key["A"] = 5] = "A";
2411
+ Key[Key["B"] = 6] = "B";
2412
+ Key[Key["Menu"] = 7] = "Menu";
2413
+ // Player 2 = Player 1 + 7
2414
+ // Player 3 = Player 2 + 7
2415
+ // Player 4 = Player 3 + 7
2416
+ // system keys
2417
+ Key[Key["Screenshot"] = -1] = "Screenshot";
2418
+ Key[Key["Gif"] = -2] = "Gif";
2419
+ Key[Key["Reset"] = -3] = "Reset";
2420
+ Key[Key["TogglePause"] = -4] = "TogglePause";
2421
+ })(Key = keymap.Key || (keymap.Key = {}));
2422
+ function _setPlayerKeys(player, // player number is 1-based
2423
+ up, down, left, right, A, B) {
2424
+ pxsim.getKeymapState().setPlayerKeys(player, up, down, left, right, A, B);
2425
+ }
2426
+ keymap._setPlayerKeys = _setPlayerKeys;
2427
+ function _setSystemKeys(screenshot, gif, menu, reset) {
2428
+ pxsim.getKeymapState().setSystemKeys(screenshot, gif, menu, reset);
2429
+ }
2430
+ keymap._setSystemKeys = _setSystemKeys;
2431
+ })(keymap = pxsim.keymap || (pxsim.keymap = {}));
2432
+ })(pxsim || (pxsim = {}));
2433
+ (function (pxsim) {
2434
+ var Key = pxsim.keymap.Key;
2435
+ function getKeymapState() {
2436
+ return pxsim.board().keymapState;
2437
+ }
2438
+ pxsim.getKeymapState = getKeymapState;
2439
+ const reservedKeyCodes = [
2440
+ 27,
2441
+ 9 // Tab
2442
+ ];
2443
+ class KeymapState {
2444
+ constructor() {
2445
+ this.keymap = {};
2446
+ this.altmap = {};
2447
+ this.mappings = {};
2448
+ // Player 1 keymap
2449
+ this.setPlayerKeys(1, // Player 1
2450
+ 87, // W - Up
2451
+ 83, // D - Down
2452
+ 65, // A - Left
2453
+ 83, // S - Right
2454
+ 32, // Space - A
2455
+ 13 // Enter - B
2456
+ );
2457
+ // Player 2 keymap
2458
+ this.setPlayerKeys(2, // Player 2
2459
+ 73, // I - Up
2460
+ 75, // K - Down
2461
+ 74, // J - Left
2462
+ 75, // K - Right
2463
+ 85, // U - A
2464
+ 79 // O - B
2465
+ );
2466
+ // Note: Player 3 and 4 have no default keyboard mapping
2467
+ // System keymap
2468
+ this.setSystemKeys(80, // P - Screenshot
2469
+ 82, // R - Gif
2470
+ 0, // Menu - not mapped
2471
+ 0 // Reset - not mapped
2472
+ );
2473
+ // Player 1 alternate mapping. This is cleared when the game sets any player keys explicitly
2474
+ this.altmap[38] = Key.Up; // UpArrow
2475
+ this.altmap[37] = Key.Left; // LeftArrow
2476
+ this.altmap[40] = Key.Down; // DownArrow
2477
+ this.altmap[39] = Key.Right; // RightArrow
2478
+ this.altmap[81] = Key.A; // Q
2479
+ this.altmap[90] = Key.A; // Z
2480
+ this.altmap[88] = Key.B; // X
2481
+ this.altmap[69] = Key.B; // E
2482
+ }
2483
+ setPlayerKeys(player, // player number is 1-based
2484
+ up, down, left, right, A, B) {
2485
+ // We only support four players
2486
+ if (player < 1 || player > 4)
2487
+ return;
2488
+ const keyCodes = [up, down, left, right, A, B];
2489
+ // Check for reserved key codes
2490
+ // TODO: How to surface this runtime error to the user?
2491
+ // TODO: Send message to UI: "Keyboard mapping contains a reserved key code"
2492
+ const filtered = keyCodes.filter(keyCode => reservedKeyCodes.includes(keyCode));
2493
+ if (filtered.length)
2494
+ return;
2495
+ // Clear existing mapped keys for player
2496
+ const mapName = `player-${player}`;
2497
+ this.clearMap(mapName);
2498
+ // Clear altmap When explicitly setting the player keys
2499
+ this.altmap = {};
2500
+ // Map the new keys
2501
+ const offset = (player - 1) * 7; // +7 for player 2's keys
2502
+ this.keymap[up] = Key.Up + offset;
2503
+ this.keymap[down] = Key.Down + offset;
2504
+ this.keymap[left] = Key.Left + offset;
2505
+ this.keymap[right] = Key.Right + offset;
2506
+ this.keymap[A] = Key.A + offset;
2507
+ this.keymap[B] = Key.B + offset;
2508
+ // Remember this mapping
2509
+ this.saveMap(mapName, keyCodes);
2510
+ }
2511
+ setSystemKeys(screenshot, gif, menu, reset) {
2512
+ const mapName = "system";
2513
+ // Clear existing mapped keys for system
2514
+ this.clearMap(mapName);
2515
+ this.keymap[screenshot] = Key.Screenshot;
2516
+ this.keymap[gif] = Key.Gif;
2517
+ this.keymap[menu] = Key.Menu;
2518
+ this.keymap[reset] = Key.Reset;
2519
+ // Remember this mapping
2520
+ this.saveMap(mapName, [screenshot, gif, menu, reset]);
2521
+ }
2522
+ getKey(keyCode) {
2523
+ return keyCode ? this.keymap[keyCode] || this.altmap[keyCode] || Key.None : Key.None;
2524
+ }
2525
+ saveMap(name, keyCodes) {
2526
+ this.mappings[name] = keyCodes;
2527
+ }
2528
+ clearMap(name) {
2529
+ const keyCodes = this.mappings[name];
2530
+ keyCodes === null || keyCodes === void 0 ? void 0 : keyCodes.forEach(keyCode => delete this.keymap[keyCode]);
2531
+ delete this.mappings[name];
2532
+ }
2533
+ }
2534
+ pxsim.KeymapState = KeymapState;
2535
+ })(pxsim || (pxsim = {}));
2536
+ var pxsim;
2537
+ (function (pxsim) {
2538
+ var multiplayer;
2539
+ (function (multiplayer) {
2540
+ function postImage(im, goal) {
2541
+ const asBuf = pxsim.image.toBuffer(im);
2542
+ pxsim.getMultiplayerState().send({
2543
+ content: "Image",
2544
+ image: asBuf,
2545
+ goal
2546
+ });
2547
+ }
2548
+ multiplayer.postImage = postImage;
2549
+ function getCurrentImage() {
2550
+ return pxsim.getMultiplayerState().backgroundImage;
2551
+ }
2552
+ multiplayer.getCurrentImage = getCurrentImage;
2553
+ function setOrigin(origin) {
2554
+ pxsim.getMultiplayerState().origin = origin;
2555
+ }
2556
+ multiplayer.setOrigin = setOrigin;
2557
+ function getOrigin() {
2558
+ return pxsim.getMultiplayerState().origin;
2559
+ }
2560
+ multiplayer.getOrigin = getOrigin;
2561
+ })(multiplayer = pxsim.multiplayer || (pxsim.multiplayer = {}));
2562
+ })(pxsim || (pxsim = {}));
2563
+ (function (pxsim) {
2564
+ function getMultiplayerState() {
2565
+ return pxsim.board().multiplayerState;
2566
+ }
2567
+ pxsim.getMultiplayerState = getMultiplayerState;
2568
+ class MultiplayerState {
2569
+ constructor() {
2570
+ this.lastMessageId = 0;
2571
+ }
2572
+ send(msg) {
2573
+ pxsim.Runtime.postMessage(Object.assign(Object.assign({}, msg), { broadcast: true, toParentIFrameOnly: true, type: "multiplayer", origin: this.origin, id: this.lastMessageId++ }));
2574
+ }
2575
+ init(origin) {
2576
+ this.origin = origin;
2577
+ pxsim.runtime.board.addMessageListener(msg => this.messageHandler(msg));
2578
+ setInterval(() => {
2579
+ if (this.origin === "server") {
2580
+ const b = pxsim.board();
2581
+ const screenState = b && b.screenState;
2582
+ const lastImage = screenState && screenState.lastImage;
2583
+ lastImage && pxsim.multiplayer.postImage(lastImage, "broadcast-screen");
2584
+ }
2585
+ }, 50);
2586
+ }
2587
+ setButton(key, isPressed) {
2588
+ if (this.origin === "client") {
2589
+ this.send({
2590
+ content: "Button",
2591
+ button: key,
2592
+ state: isPressed ? "Pressed" : "Released"
2593
+ });
2594
+ }
2595
+ }
2596
+ messageHandler(msg) {
2597
+ if (!isMultiplayerMessage(msg)) {
2598
+ return;
2599
+ }
2600
+ if (isImageMessage(msg)) {
2601
+ if (this.origin === "client") {
2602
+ // HACK: peer js can convert Uint8Array into ArrayBuffer when transmitting; fix this.
2603
+ if (!ArrayBuffer.isView(msg.image.data)) {
2604
+ msg.image.data = new Uint8Array(msg.image.data);
2605
+ }
2606
+ this.backgroundImage = pxsim.image.ofBuffer(msg.image);
2607
+ }
2608
+ }
2609
+ else if (isButtonMessage(msg)) {
2610
+ if (this.origin === "server") {
2611
+ pxsim.board().setButton(msg.button + (7 * (msg.clientNumber || 1)), // + 7 to make it player 2 controls,
2612
+ msg.state === "Pressed" || msg.state === "Held");
2613
+ }
2614
+ }
2615
+ }
2616
+ }
2617
+ pxsim.MultiplayerState = MultiplayerState;
2618
+ function isMultiplayerMessage(msg) {
2619
+ return msg && msg.type === "multiplayer";
2620
+ }
2621
+ function isImageMessage(msg) {
2622
+ return msg && msg.content === "Image";
2623
+ }
2624
+ function isButtonMessage(msg) {
2625
+ return msg && msg.content === "Button";
2626
+ }
2627
+ })(pxsim || (pxsim = {}));
2628
+ var pxsim;
2398
2629
  (function (pxsim) {
2399
2630
  var gamepad;
2400
2631
  (function (gamepad) {