pxt-common-packages 9.4.13 → 9.4.16

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 (39) hide show
  1. package/built/common-sim.d.ts +44 -0
  2. package/built/common-sim.js +202 -63
  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 +8290 -8027
  7. package/libs/controller---none/built/debug/binary.js +8269 -8006
  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 +19 -0
  12. package/libs/game/_locales/game-strings.json +2 -0
  13. package/libs/game/built/debug/binary.js +8182 -7919
  14. package/libs/game/extendableSprite.ts +80 -0
  15. package/libs/game/hitbox.ts +42 -1
  16. package/libs/game/keymap.cpp +12 -0
  17. package/libs/game/keymap.ts +169 -0
  18. package/libs/game/pxt.json +4 -1
  19. package/libs/game/sim/keymap.ts +167 -0
  20. package/libs/game/sprite.ts +73 -95
  21. package/libs/lcd/built/debug/binary.js +8 -8
  22. package/libs/light-spectrum-sensor/built/debug/binary.js +8 -8
  23. package/libs/lora/built/debug/binary.js +8 -8
  24. package/libs/matrix-keypad/built/debug/binary.js +8 -8
  25. package/libs/mqtt/built/debug/binary.js +176 -176
  26. package/libs/net/built/debug/binary.js +176 -176
  27. package/libs/net-game/built/debug/binary.js +9970 -9707
  28. package/libs/palette/built/debug/binary.js +8181 -7918
  29. package/libs/pixel/built/debug/binary.js +8 -8
  30. package/libs/power/built/debug/binary.js +8 -8
  31. package/libs/proximity/built/debug/binary.js +8 -8
  32. package/libs/radio/built/debug/binary.js +8 -8
  33. package/libs/radio-broadcast/built/debug/binary.js +8 -8
  34. package/libs/rotary-encoder/built/debug/binary.js +8 -8
  35. package/libs/screen/built/debug/binary.js +50 -50
  36. package/libs/servo/built/debug/binary.js +8 -8
  37. package/libs/sprite-scaling/built/debug/binary.js +8181 -7918
  38. package/libs/storyboard/built/debug/binary.js +8181 -7918
  39. package/package.json +1 -1
@@ -728,6 +728,50 @@ 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
+ }
731
775
  declare namespace pxsim.gamepad {
732
776
  function setButton(index: number, up: boolean): void;
733
777
  function move(index: number, x: number, y: number): void;
@@ -5,11 +5,11 @@ var pxsim;
5
5
  function onGesture(gesture, handler) {
6
6
  let b = pxsim.accelerometer();
7
7
  b.accelerometer.activate();
8
- if (gesture == 11 /* ACCELEROMETER_EVT_SHAKE */ && !b.useShake) {
8
+ if (gesture == 11 /* DAL.ACCELEROMETER_EVT_SHAKE */ && !b.useShake) {
9
9
  b.useShake = true;
10
10
  pxsim.runtime.queueDisplayUpdate();
11
11
  }
12
- pxsim.pxtcore.registerWithDal(13 /* DEVICE_ID_GESTURE */, gesture, handler);
12
+ pxsim.pxtcore.registerWithDal(13 /* DAL.DEVICE_ID_GESTURE */, gesture, handler);
13
13
  }
14
14
  input.onGesture = onGesture;
15
15
  function rotation(kind) {
@@ -99,7 +99,7 @@ var pxsim;
99
99
  this.shake = { x: false, y: false, z: false, count: 0, shaken: 0, timer: 0 }; // State information needed to detect shake events.
100
100
  this.isActive = false;
101
101
  this.sampleRange = 2;
102
- this.id = 5 /* DEVICE_ID_ACCELEROMETER */;
102
+ this.id = 5 /* DAL.DEVICE_ID_ACCELEROMETER */;
103
103
  }
104
104
  setSampleRange(range) {
105
105
  this.activate();
@@ -123,7 +123,7 @@ var pxsim;
123
123
  // Update gesture tracking
124
124
  this.updateGesture();
125
125
  // Indicate that a new sample is available
126
- pxsim.board().bus.queue(this.id, 1 /* ACCELEROMETER_EVT_DATA_UPDATE */);
126
+ pxsim.board().bus.queue(this.id, 1 /* DAL.ACCELEROMETER_EVT_DATA_UPDATE */);
127
127
  }
128
128
  instantaneousAccelerationSquared() {
129
129
  // Use pythagoras theorem to determine the combined force acting on the device.
@@ -144,21 +144,21 @@ var pxsim;
144
144
  //
145
145
  // If we see enough zero crossings in succession (MICROBIT_ACCELEROMETER_SHAKE_COUNT_THRESHOLD), then we decide that the device
146
146
  // has been shaken.
147
- if ((this.getX() < -400 /* ACCELEROMETER_SHAKE_TOLERANCE */ && this.shake.x) || (this.getX() > 400 /* ACCELEROMETER_SHAKE_TOLERANCE */ && !this.shake.x)) {
147
+ if ((this.getX() < -400 /* DAL.ACCELEROMETER_SHAKE_TOLERANCE */ && this.shake.x) || (this.getX() > 400 /* DAL.ACCELEROMETER_SHAKE_TOLERANCE */ && !this.shake.x)) {
148
148
  shakeDetected = true;
149
149
  this.shake.x = !this.shake.x;
150
150
  }
151
- if ((this.getY() < -400 /* ACCELEROMETER_SHAKE_TOLERANCE */ && this.shake.y) || (this.getY() > 400 /* ACCELEROMETER_SHAKE_TOLERANCE */ && !this.shake.y)) {
151
+ if ((this.getY() < -400 /* DAL.ACCELEROMETER_SHAKE_TOLERANCE */ && this.shake.y) || (this.getY() > 400 /* DAL.ACCELEROMETER_SHAKE_TOLERANCE */ && !this.shake.y)) {
152
152
  shakeDetected = true;
153
153
  this.shake.y = !this.shake.y;
154
154
  }
155
- if ((this.getZ() < -400 /* ACCELEROMETER_SHAKE_TOLERANCE */ && this.shake.z) || (this.getZ() > 400 /* ACCELEROMETER_SHAKE_TOLERANCE */ && !this.shake.z)) {
155
+ if ((this.getZ() < -400 /* DAL.ACCELEROMETER_SHAKE_TOLERANCE */ && this.shake.z) || (this.getZ() > 400 /* DAL.ACCELEROMETER_SHAKE_TOLERANCE */ && !this.shake.z)) {
156
156
  shakeDetected = true;
157
157
  this.shake.z = !this.shake.z;
158
158
  }
159
- if (shakeDetected && this.shake.count < 4 /* ACCELEROMETER_SHAKE_COUNT_THRESHOLD */ && ++this.shake.count == 4 /* ACCELEROMETER_SHAKE_COUNT_THRESHOLD */)
159
+ if (shakeDetected && this.shake.count < 4 /* DAL.ACCELEROMETER_SHAKE_COUNT_THRESHOLD */ && ++this.shake.count == 4 /* DAL.ACCELEROMETER_SHAKE_COUNT_THRESHOLD */)
160
160
  this.shake.shaken = 1;
161
- if (++this.shake.timer >= 10 /* ACCELEROMETER_SHAKE_DAMPING */) {
161
+ if (++this.shake.timer >= 10 /* DAL.ACCELEROMETER_SHAKE_DAMPING */) {
162
162
  this.shake.timer = 0;
163
163
  if (this.shake.count > 0) {
164
164
  if (--this.shake.count == 0)
@@ -166,29 +166,29 @@ var pxsim;
166
166
  }
167
167
  }
168
168
  if (this.shake.shaken)
169
- return 11 /* ACCELEROMETER_EVT_SHAKE */;
169
+ return 11 /* DAL.ACCELEROMETER_EVT_SHAKE */;
170
170
  let sq = (n) => n * n;
171
- if (force < sq(400 /* ACCELEROMETER_FREEFALL_TOLERANCE */))
172
- return 7 /* ACCELEROMETER_EVT_FREEFALL */;
173
- if (force > sq(3072 /* ACCELEROMETER_3G_TOLERANCE */))
174
- return 8 /* ACCELEROMETER_EVT_3G */;
175
- if (force > sq(6144 /* ACCELEROMETER_6G_TOLERANCE */))
176
- return 9 /* ACCELEROMETER_EVT_6G */;
177
- if (force > sq(8192 /* ACCELEROMETER_8G_TOLERANCE */))
178
- return 10 /* ACCELEROMETER_EVT_8G */;
171
+ if (force < sq(400 /* DAL.ACCELEROMETER_FREEFALL_TOLERANCE */))
172
+ return 7 /* DAL.ACCELEROMETER_EVT_FREEFALL */;
173
+ if (force > sq(3072 /* DAL.ACCELEROMETER_3G_TOLERANCE */))
174
+ return 8 /* DAL.ACCELEROMETER_EVT_3G */;
175
+ if (force > sq(6144 /* DAL.ACCELEROMETER_6G_TOLERANCE */))
176
+ return 9 /* DAL.ACCELEROMETER_EVT_6G */;
177
+ if (force > sq(8192 /* DAL.ACCELEROMETER_8G_TOLERANCE */))
178
+ return 10 /* DAL.ACCELEROMETER_EVT_8G */;
179
179
  // Determine our posture.
180
- if (this.getX() < (-1000 + 200 /* ACCELEROMETER_TILT_TOLERANCE */))
181
- return 3 /* ACCELEROMETER_EVT_TILT_LEFT */;
182
- if (this.getX() > (1000 - 200 /* ACCELEROMETER_TILT_TOLERANCE */))
183
- return 4 /* ACCELEROMETER_EVT_TILT_RIGHT */;
184
- if (this.getY() < (-1000 + 200 /* ACCELEROMETER_TILT_TOLERANCE */))
185
- return 1 /* ACCELEROMETER_EVT_TILT_UP */;
186
- if (this.getY() > (1000 - 200 /* ACCELEROMETER_TILT_TOLERANCE */))
187
- return 2 /* ACCELEROMETER_EVT_TILT_DOWN */;
188
- if (this.getZ() < (-1000 + 200 /* ACCELEROMETER_TILT_TOLERANCE */))
189
- return 5 /* ACCELEROMETER_EVT_FACE_UP */;
190
- if (this.getZ() > (1000 - 200 /* ACCELEROMETER_TILT_TOLERANCE */))
191
- return 6 /* ACCELEROMETER_EVT_FACE_DOWN */;
180
+ if (this.getX() < (-1000 + 200 /* DAL.ACCELEROMETER_TILT_TOLERANCE */))
181
+ return 3 /* DAL.ACCELEROMETER_EVT_TILT_LEFT */;
182
+ if (this.getX() > (1000 - 200 /* DAL.ACCELEROMETER_TILT_TOLERANCE */))
183
+ return 4 /* DAL.ACCELEROMETER_EVT_TILT_RIGHT */;
184
+ if (this.getY() < (-1000 + 200 /* DAL.ACCELEROMETER_TILT_TOLERANCE */))
185
+ return 1 /* DAL.ACCELEROMETER_EVT_TILT_UP */;
186
+ if (this.getY() > (1000 - 200 /* DAL.ACCELEROMETER_TILT_TOLERANCE */))
187
+ return 2 /* DAL.ACCELEROMETER_EVT_TILT_DOWN */;
188
+ if (this.getZ() < (-1000 + 200 /* DAL.ACCELEROMETER_TILT_TOLERANCE */))
189
+ return 5 /* DAL.ACCELEROMETER_EVT_FACE_UP */;
190
+ if (this.getZ() > (1000 - 200 /* DAL.ACCELEROMETER_TILT_TOLERANCE */))
191
+ return 6 /* DAL.ACCELEROMETER_EVT_FACE_DOWN */;
192
192
  return 0;
193
193
  }
194
194
  updateGesture() {
@@ -196,7 +196,7 @@ var pxsim;
196
196
  let g = this.instantaneousPosture();
197
197
  // Perform some low pass filtering to reduce jitter from any detected effects
198
198
  if (g == this.currentGesture) {
199
- if (this.sigma < 5 /* ACCELEROMETER_GESTURE_DAMPING */)
199
+ if (this.sigma < 5 /* DAL.ACCELEROMETER_GESTURE_DAMPING */)
200
200
  this.sigma++;
201
201
  }
202
202
  else {
@@ -204,9 +204,9 @@ var pxsim;
204
204
  this.sigma = 0;
205
205
  }
206
206
  // If we've reached threshold, update our record and raise the relevant event...
207
- if (this.currentGesture != this.lastGesture && this.sigma >= 5 /* ACCELEROMETER_GESTURE_DAMPING */) {
207
+ if (this.currentGesture != this.lastGesture && this.sigma >= 5 /* DAL.ACCELEROMETER_GESTURE_DAMPING */) {
208
208
  this.lastGesture = this.currentGesture;
209
- pxsim.board().bus.queue(13 /* DEVICE_ID_GESTURE */, this.lastGesture);
209
+ pxsim.board().bus.queue(13 /* DAL.DEVICE_ID_GESTURE */, this.lastGesture);
210
210
  }
211
211
  }
212
212
  /**
@@ -728,21 +728,21 @@ var pxsim;
728
728
  this.pressed = p;
729
729
  if (p) {
730
730
  this._wasPressed = true;
731
- pxsim.board().bus.queue(this.id, 1 /* DEVICE_BUTTON_EVT_DOWN */);
731
+ pxsim.board().bus.queue(this.id, 1 /* DAL.DEVICE_BUTTON_EVT_DOWN */);
732
732
  this._pressedTime = pxsim.runtime.runningTime();
733
733
  }
734
734
  else if (this._pressedTime !== -1) {
735
- pxsim.board().bus.queue(this.id, 2 /* DEVICE_BUTTON_EVT_UP */);
735
+ pxsim.board().bus.queue(this.id, 2 /* DAL.DEVICE_BUTTON_EVT_UP */);
736
736
  const current = pxsim.runtime.runningTime();
737
- if (current - this._pressedTime >= 1000 /* DEVICE_BUTTON_LONG_CLICK_TIME */) {
738
- pxsim.board().bus.queue(this.id, 4 /* DEVICE_BUTTON_EVT_LONG_CLICK */);
737
+ if (current - this._pressedTime >= 1000 /* DAL.DEVICE_BUTTON_LONG_CLICK_TIME */) {
738
+ pxsim.board().bus.queue(this.id, 4 /* DAL.DEVICE_BUTTON_EVT_LONG_CLICK */);
739
739
  }
740
740
  else {
741
- pxsim.board().bus.queue(this.id, 3 /* DEVICE_BUTTON_EVT_CLICK */);
741
+ pxsim.board().bus.queue(this.id, 3 /* DAL.DEVICE_BUTTON_EVT_CLICK */);
742
742
  }
743
743
  if (this._clickedTime !== -1) {
744
744
  if (current - this._clickedTime <= DOUBLE_CLICK_TIME) {
745
- pxsim.board().bus.queue(this.id, 6 /* DEVICE_BUTTON_EVT_DOUBLE_CLICK */);
745
+ pxsim.board().bus.queue(this.id, 6 /* DAL.DEVICE_BUTTON_EVT_DOUBLE_CLICK */);
746
746
  }
747
747
  }
748
748
  this._clickedTime = current;
@@ -767,9 +767,9 @@ var pxsim;
767
767
  this.usesButtonAB = false;
768
768
  this.buttonsByPin = {};
769
769
  this.buttons = buttons || [
770
- new CommonButton(1 /* DEVICE_ID_BUTTON_A */),
771
- new CommonButton(2 /* DEVICE_ID_BUTTON_B */),
772
- new CommonButton(3 /* DEVICE_ID_BUTTON_AB */)
770
+ new CommonButton(1 /* DAL.DEVICE_ID_BUTTON_A */),
771
+ new CommonButton(2 /* DAL.DEVICE_ID_BUTTON_B */),
772
+ new CommonButton(3 /* DAL.DEVICE_ID_BUTTON_AB */)
773
773
  ];
774
774
  this.buttons.forEach(btn => this.buttonsByPin[btn.id] = btn);
775
775
  }
@@ -966,10 +966,10 @@ var pxsim;
966
966
  this.state = state;
967
967
  switch (state) {
968
968
  case ThresholdState.High:
969
- pxsim.board().bus.queue(this.id, 2 /* SENSOR_THRESHOLD_HIGH */);
969
+ pxsim.board().bus.queue(this.id, 2 /* DAL.SENSOR_THRESHOLD_HIGH */);
970
970
  break;
971
971
  case ThresholdState.Low:
972
- pxsim.board().bus.queue(this.id, 1 /* SENSOR_THRESHOLD_LOW */);
972
+ pxsim.board().bus.queue(this.id, 1 /* DAL.SENSOR_THRESHOLD_LOW */);
973
973
  break;
974
974
  case ThresholdState.Normal:
975
975
  break;
@@ -1189,8 +1189,8 @@ var pxsim;
1189
1189
  const old = this.value;
1190
1190
  this.value = value;
1191
1191
  const b = pxsim.board();
1192
- if (b && this.eventMode == 2 /* DEVICE_PIN_EVENT_ON_EDGE */ && old != this.value)
1193
- b.bus.queue(this.id, this.value > 0 ? 2 /* DEVICE_PIN_EVT_RISE */ : 3 /* DEVICE_PIN_EVT_FALL */);
1192
+ if (b && this.eventMode == 2 /* DAL.DEVICE_PIN_EVENT_ON_EDGE */ && old != this.value)
1193
+ b.bus.queue(this.id, this.value > 0 ? 2 /* DAL.DEVICE_PIN_EVT_RISE */ : 3 /* DAL.DEVICE_PIN_EVT_FALL */);
1194
1194
  }
1195
1195
  digitalReadPin() {
1196
1196
  this.mode = PinFlags.Digital | PinFlags.Input;
@@ -1251,13 +1251,13 @@ var pxsim;
1251
1251
  onEvent(ev, handler) {
1252
1252
  const b = pxsim.board();
1253
1253
  switch (ev) {
1254
- case 4 /* DEVICE_PIN_EVT_PULSE_HI */:
1255
- case 5 /* DEVICE_PIN_EVT_PULSE_LO */:
1256
- this.eventMode = 3 /* DEVICE_PIN_EVENT_ON_PULSE */;
1254
+ case 4 /* DAL.DEVICE_PIN_EVT_PULSE_HI */:
1255
+ case 5 /* DAL.DEVICE_PIN_EVT_PULSE_LO */:
1256
+ this.eventMode = 3 /* DAL.DEVICE_PIN_EVENT_ON_PULSE */;
1257
1257
  break;
1258
- case 2 /* DEVICE_PIN_EVT_RISE */:
1259
- case 3 /* DEVICE_PIN_EVT_FALL */:
1260
- this.eventMode = 2 /* DEVICE_PIN_EVENT_ON_EDGE */;
1258
+ case 2 /* DAL.DEVICE_PIN_EVT_RISE */:
1259
+ case 3 /* DAL.DEVICE_PIN_EVT_FALL */:
1260
+ this.eventMode = 2 /* DAL.DEVICE_PIN_EVENT_ON_EDGE */;
1261
1261
  break;
1262
1262
  default:
1263
1263
  return;
@@ -2056,7 +2056,7 @@ var pxsim;
2056
2056
  */
2057
2057
  function onPulsed(name, high, body) {
2058
2058
  pxsim.pins.markUsed(name);
2059
- onEvent(name, high ? 4 /* DEVICE_PIN_EVT_PULSE_HI */ : 5 /* DEVICE_PIN_EVT_PULSE_LO */, body);
2059
+ onEvent(name, high ? 4 /* DAL.DEVICE_PIN_EVT_PULSE_HI */ : 5 /* DAL.DEVICE_PIN_EVT_PULSE_LO */, body);
2060
2060
  }
2061
2061
  DigitalInOutPinMethods.onPulsed = onPulsed;
2062
2062
  function onEvent(name, ev, body) {
@@ -2071,7 +2071,7 @@ var pxsim;
2071
2071
  */
2072
2072
  function pulseIn(name, high, maxDuration = 2000000) {
2073
2073
  pxsim.pins.markUsed(name);
2074
- const pulse = high ? 4 /* DEVICE_PIN_EVT_PULSE_HI */ : 5 /* DEVICE_PIN_EVT_PULSE_LO */;
2074
+ const pulse = high ? 4 /* DAL.DEVICE_PIN_EVT_PULSE_HI */ : 5 /* DAL.DEVICE_PIN_EVT_PULSE_LO */;
2075
2075
  // Always return default value, can't simulate
2076
2076
  return 500;
2077
2077
  }
@@ -2395,6 +2395,145 @@ 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, // S - Down
2452
+ 65, // A - Left
2453
+ 68, // D - 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
+ 76, // L - 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;
2398
2537
  (function (pxsim) {
2399
2538
  var gamepad;
2400
2539
  (function (gamepad) {
@@ -2835,10 +2974,10 @@ var pxsim;
2835
2974
  let b = pxsim.lightSensorState();
2836
2975
  b.setUsed();
2837
2976
  switch (condition) {
2838
- case 1 /* SENSOR_THRESHOLD_LOW */:
2977
+ case 1 /* DAL.SENSOR_THRESHOLD_LOW */:
2839
2978
  b.setLowThreshold(value);
2840
2979
  break;
2841
- case 2 /* SENSOR_THRESHOLD_HIGH */:
2980
+ case 2 /* DAL.SENSOR_THRESHOLD_HIGH */:
2842
2981
  b.setHighThreshold(value);
2843
2982
  break;
2844
2983
  }
@@ -2870,7 +3009,7 @@ var pxsim;
2870
3009
  if (!b)
2871
3010
  return;
2872
3011
  b.setUsed();
2873
- pxsim.pxtcore.registerWithDal(b.id, 2 /* LEVEL_THRESHOLD_HIGH */, body);
3012
+ pxsim.pxtcore.registerWithDal(b.id, 2 /* DAL.LEVEL_THRESHOLD_HIGH */, body);
2874
3013
  }
2875
3014
  input.onLoudSound = onLoudSound;
2876
3015
  function setLoudSoundThreshold(value) {
@@ -4196,7 +4335,7 @@ var pxsim;
4196
4335
  const rd = new Uint32Array(ca.buffer);
4197
4336
  const src = buf.data;
4198
4337
  if (48 != src.length)
4199
- pxsim.pxtrt.panic(911 /* PANIC_SCREEN_ERROR */);
4338
+ pxsim.pxtrt.panic(911 /* pxsim.PXT_PANIC.PANIC_SCREEN_ERROR */);
4200
4339
  this.palette = new Uint32Array((src.length / 3) | 0);
4201
4340
  for (let i = 0; i < this.palette.length; ++i) {
4202
4341
  const p = i * 3;
@@ -4549,10 +4688,10 @@ var pxsim;
4549
4688
  return;
4550
4689
  }
4551
4690
  else if (left) {
4552
- pxsim.board().bus.queue(SlideSwitchState.id, 2 /* DEVICE_BUTTON_EVT_UP */);
4691
+ pxsim.board().bus.queue(SlideSwitchState.id, 2 /* DAL.DEVICE_BUTTON_EVT_UP */);
4553
4692
  }
4554
4693
  else {
4555
- pxsim.board().bus.queue(SlideSwitchState.id, 1 /* DEVICE_BUTTON_EVT_DOWN */);
4694
+ pxsim.board().bus.queue(SlideSwitchState.id, 1 /* DAL.DEVICE_BUTTON_EVT_DOWN */);
4556
4695
  }
4557
4696
  this.left = left;
4558
4697
  }
@@ -4690,7 +4829,7 @@ var pxsim;
4690
4829
  const t = unit == pxsim.TemperatureUnit.Celsius
4691
4830
  ? temperature
4692
4831
  : (((temperature - 32) * 10) / 18 >> 0);
4693
- if (condition === 2 /* LEVEL_THRESHOLD_HIGH */) {
4832
+ if (condition === 2 /* DAL.LEVEL_THRESHOLD_HIGH */) {
4694
4833
  b.setHighThreshold(t);
4695
4834
  }
4696
4835
  else {
@@ -5049,7 +5188,7 @@ var pxsim;
5049
5188
  }
5050
5189
  _wifi.eventID = eventID;
5051
5190
  function scanStart() {
5052
- _raiseEvent(1 /* ScanDone */);
5191
+ _raiseEvent(1 /* WifiEvent.ScanDone */);
5053
5192
  }
5054
5193
  _wifi.scanStart = scanStart;
5055
5194
  function startLoginServer() {
@@ -5064,7 +5203,7 @@ var pxsim;
5064
5203
  }
5065
5204
  _wifi.scanResults = scanResults;
5066
5205
  function connect(ssid, pass) {
5067
- _raiseEvent(2 /* GotIP */);
5206
+ _raiseEvent(2 /* WifiEvent.GotIP */);
5068
5207
  return 0;
5069
5208
  }
5070
5209
  _wifi.connect = connect;