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.
- package/built/common-sim.d.ts +84 -0
- package/built/common-sim.js +232 -1
- package/libs/azureiot/built/debug/binary.js +461 -461
- package/libs/base/sim/core.ts +1 -1
- package/libs/color/built/debug/binary.js +8 -8
- package/libs/color-sensor/built/debug/binary.js +8 -8
- package/libs/controller/built/debug/binary.js +7659 -7665
- package/libs/controller---none/built/debug/binary.js +7638 -7644
- package/libs/datalogger/built/debug/binary.js +63 -63
- package/libs/edge-connector/built/debug/binary.js +8 -8
- package/libs/esp32/built/debug/binary.js +462 -462
- package/libs/game/_locales/game-jsdoc-strings.json +14 -0
- package/libs/game/_locales/game-strings.json +3 -0
- package/libs/game/built/debug/binary.js +7551 -7557
- package/libs/game/hitbox.ts +2 -2
- package/libs/game/keymap.cpp +12 -0
- package/libs/game/keymap.ts +169 -0
- package/libs/game/multiplayer.cpp +25 -0
- package/libs/game/multiplayer.ts +24 -0
- package/libs/game/pxt.json +5 -1
- package/libs/game/scene.ts +1 -0
- package/libs/game/sim/keymap.ts +167 -0
- package/libs/game/sim/multiplayer.ts +132 -0
- package/libs/lcd/built/debug/binary.js +8 -8
- package/libs/light-spectrum-sensor/built/debug/binary.js +8 -8
- package/libs/lora/built/debug/binary.js +8 -8
- package/libs/matrix-keypad/built/debug/binary.js +8 -8
- package/libs/mqtt/built/debug/binary.js +176 -176
- package/libs/net/built/debug/binary.js +176 -176
- package/libs/net-game/built/debug/binary.js +9339 -9345
- package/libs/palette/built/debug/binary.js +7550 -7556
- package/libs/pixel/built/debug/binary.js +8 -8
- package/libs/power/built/debug/binary.js +8 -8
- package/libs/proximity/built/debug/binary.js +8 -8
- package/libs/radio/built/debug/binary.js +8 -8
- package/libs/radio-broadcast/built/debug/binary.js +8 -8
- package/libs/rotary-encoder/built/debug/binary.js +8 -8
- package/libs/screen/built/debug/binary.js +50 -50
- package/libs/servo/built/debug/binary.js +8 -8
- package/libs/sprite-scaling/built/debug/binary.js +7550 -7556
- package/libs/storyboard/built/debug/binary.js +7550 -7556
- package/package.json +2 -2
package/built/common-sim.d.ts
CHANGED
|
@@ -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;
|
package/built/common-sim.js
CHANGED
|
@@ -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) {
|