pxt-common-packages 10.4.1 → 10.4.3

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 (64) hide show
  1. package/built/common-sim.js +5 -5
  2. package/libs/azureiot/built/debug/binary.js +461 -461
  3. package/libs/color/built/debug/binary.js +8 -8
  4. package/libs/color-sensor/built/debug/binary.js +8 -8
  5. package/libs/controller/built/debug/binary.js +8528 -8282
  6. package/libs/controller---none/built/debug/binary.js +8507 -8261
  7. package/libs/datalogger/built/debug/binary.js +63 -63
  8. package/libs/edge-connector/built/debug/binary.js +8 -8
  9. package/libs/esp32/built/debug/binary.js +462 -462
  10. package/libs/game/_locales/game-jsdoc-strings.json +2 -2
  11. package/libs/game/_locales/game-strings.json +2 -1
  12. package/libs/game/built/debug/binary.js +8416 -8170
  13. package/libs/game/controller.ts +24 -0
  14. package/libs/game/game.ts +13 -4
  15. package/libs/game/multiplayer.ts +5 -3
  16. package/libs/game/scene.ts +2 -0
  17. package/libs/game/sim/multiplayer.ts +6 -5
  18. package/libs/game/sprite.ts +1 -0
  19. package/libs/game/sprites.ts +13 -0
  20. package/libs/lcd/built/debug/binary.js +8 -8
  21. package/libs/light-spectrum-sensor/built/debug/binary.js +8 -8
  22. package/libs/lora/built/debug/binary.js +8 -8
  23. package/libs/matrix-keypad/built/debug/binary.js +8 -8
  24. package/libs/mixer/instrument.ts +7 -0
  25. package/libs/mixer/melody.ts +1 -0
  26. package/libs/mqtt/built/debug/binary.js +176 -176
  27. package/libs/multiplayer/docs/reference/multiplayer/change-player-state-by.md +121 -0
  28. package/libs/multiplayer/docs/reference/multiplayer/game-over-player-win.md +88 -0
  29. package/libs/multiplayer/docs/reference/multiplayer/get-player-by-index.md +40 -0
  30. package/libs/multiplayer/docs/reference/multiplayer/get-player-by-number.md +34 -0
  31. package/libs/multiplayer/docs/reference/multiplayer/get-player-by-sprite.md +109 -0
  32. package/libs/multiplayer/docs/reference/multiplayer/get-player-property.md +55 -0
  33. package/libs/multiplayer/docs/reference/multiplayer/get-player-sprite.md +59 -0
  34. package/libs/multiplayer/docs/reference/multiplayer/get-player-state.md +55 -0
  35. package/libs/multiplayer/docs/reference/multiplayer/is-button-pressed.md +44 -0
  36. package/libs/multiplayer/docs/reference/multiplayer/move-with-buttons.md +50 -0
  37. package/libs/multiplayer/docs/reference/multiplayer/multiplayer-state.md +55 -0
  38. package/libs/multiplayer/docs/reference/multiplayer/on-button-event.md +60 -0
  39. package/libs/multiplayer/docs/reference/multiplayer/on-controller-event.md +76 -0
  40. package/libs/multiplayer/docs/reference/multiplayer/on-life-zero.md +28 -0
  41. package/libs/multiplayer/docs/reference/multiplayer/on-score.md +30 -0
  42. package/libs/multiplayer/docs/reference/multiplayer/player-selector.md +51 -0
  43. package/libs/multiplayer/docs/reference/multiplayer/set-player-indicators-visible.md +69 -0
  44. package/libs/multiplayer/docs/reference/multiplayer/set-player-sprite.md +50 -0
  45. package/libs/multiplayer/docs/reference/multiplayer/set-player-state.md +139 -0
  46. package/libs/multiplayer/docs/reference/multiplayer.md +57 -0
  47. package/libs/multiplayer/docs/types/player.md +82 -0
  48. package/libs/multiplayer/fieldEditors.ts +1 -0
  49. package/libs/multiplayer/ns.ts +1 -1
  50. package/libs/multiplayer/player.ts +80 -48
  51. package/libs/net/built/debug/binary.js +176 -176
  52. package/libs/net-game/built/debug/binary.js +10194 -9948
  53. package/libs/palette/built/debug/binary.js +8415 -8169
  54. package/libs/pixel/built/debug/binary.js +8 -8
  55. package/libs/power/built/debug/binary.js +8 -8
  56. package/libs/proximity/built/debug/binary.js +8 -8
  57. package/libs/radio/built/debug/binary.js +8 -8
  58. package/libs/radio-broadcast/built/debug/binary.js +8 -8
  59. package/libs/rotary-encoder/built/debug/binary.js +8 -8
  60. package/libs/screen/built/debug/binary.js +50 -50
  61. package/libs/servo/built/debug/binary.js +8 -8
  62. package/libs/sprite-scaling/built/debug/binary.js +8415 -8169
  63. package/libs/storyboard/built/debug/binary.js +8415 -8169
  64. package/package.json +1 -1
@@ -0,0 +1,82 @@
1
+ # Player
2
+
3
+ A **Player** is a game object representing one of the players in a [multiplayer](/reference/multiplayer)
4
+ game. A Player object has entities, information, and actions associated with it related to an actual player's state in a game.
5
+
6
+ Typically, a Player object is assigned a character [Sprite](/types/sprite) and keeps track of it's current score, life points, etc. Actions like controller inputs and connection status are tracked for a Player also.
7
+
8
+ Player objects are usually referenced using a selector named as the player's number.
9
+
10
+ ```block
11
+ let myPlayer = mp.playerSelector(mp.PlayerNumber.One)
12
+ ```
13
+
14
+ Similarly in Javascript, `myPlayer` is a `Player` object and is set using the selector for ``||mp:player 1||``:
15
+
16
+ ```typescript-ignore
17
+ let myPlayer: mp.Player = null
18
+
19
+ myPlayer = mp.playerSelector(mp.PlayerNumber.One)
20
+ ```
21
+
22
+ ## Example #example
23
+
24
+ ```blocks
25
+ namespace MultiplayerState {
26
+ export const gems = MultiplayerState.create()
27
+ }
28
+ mp.onControllerEvent(ControllerEvent.Connected, function (player) {
29
+ if (player == mp.playerSelector(mp.PlayerNumber.Two)) {
30
+ mp.getPlayerSprite(player).sayText("Player 2 is on!")
31
+ }
32
+ })
33
+ mp.onScore(100, function (player) {
34
+ if (player == mp.playerSelector(mp.PlayerNumber.One)) {
35
+ mp.gameOverPlayerWin(mp.playerSelector(mp.PlayerNumber.One))
36
+ }
37
+ })
38
+ mp.setPlayerSprite(mp.playerSelector(mp.PlayerNumber.Two), sprites.create(img`
39
+ . . 4 4 4 . . . . 4 4 4 . . . .
40
+ . 4 5 5 5 e . . e 5 5 5 4 . . .
41
+ 4 5 5 5 5 5 e e 5 5 5 5 5 4 . .
42
+ 4 5 5 4 4 5 5 5 5 4 4 5 5 4 . .
43
+ e 5 4 4 5 5 5 5 5 5 4 4 5 e . .
44
+ . e e 5 5 5 5 5 5 5 5 e e . . .
45
+ . . e 5 f 5 5 5 5 f 5 e . . . .
46
+ . . f 5 5 5 4 4 5 5 5 f . . f f
47
+ . . f 4 5 5 f f 5 5 6 f . f 5 f
48
+ . . . f 6 6 6 6 6 6 4 4 f 5 5 f
49
+ . . . f 4 5 5 5 5 5 5 4 4 5 f .
50
+ . . . f 5 5 5 5 5 4 5 5 f f . .
51
+ . . . f 5 f f f 5 f f 5 f . . .
52
+ . . . f f . . f f . . f f . . .
53
+ `, SpriteKind.Player))
54
+ mp.moveWithButtons(mp.playerSelector(mp.PlayerNumber.One))
55
+ mp.setPlayerSprite(mp.playerSelector(mp.PlayerNumber.Two), sprites.create(img`
56
+ . . . . f f f f f . . . . . . .
57
+ . . . f e e e e e f . . . . . .
58
+ . . f d d d d e e e f . . . . .
59
+ . c d f d d f d e e f f . . . .
60
+ . c d f d d f d e e d d f . . .
61
+ c d e e d d d d e e b d c . . .
62
+ c d d d d c d d e e b d c . . .
63
+ c c c c c d d e e e f c . . . .
64
+ . f d d d d e e e f f . . . . .
65
+ . . f f f f f e e e e f . . . .
66
+ . . . . f f e e e e e e f . f f
67
+ . . . f e e f e e f e e f . e f
68
+ . . f e e f e e f e e e f . e f
69
+ . f b d f d b f b b f e f f e f
70
+ . f d d f d d f d d b e f f f f
71
+ . . f f f f f f f f f f f f f .
72
+ `, SpriteKind.Player))
73
+ mp.moveWithButtons(mp.playerSelector(mp.PlayerNumber.Two))
74
+ ```
75
+
76
+ # See also #seealso
77
+
78
+ [multiplayer](/reference/multiplayer)
79
+
80
+ ```package
81
+ multiplayer
82
+ ```
@@ -9,6 +9,7 @@ namespace mp {
9
9
  //% kindMemberName=value
10
10
  //% kindPromptHint="e.g. Cooldown, Speed, Attack..."
11
11
  //% blockHidden
12
+ //% help=multiplayer/multiplayer-state
12
13
  export function _multiplayerState(kind: number): number {
13
14
  return kind;
14
15
  }
@@ -1,6 +1,6 @@
1
1
  //% color="#207a77" weight=96 icon="\uf0c0"
2
2
  //% blockGap=8
3
3
  //% block="Multiplayer"
4
- //% groups='["Sprites", "Controller", "Info", "Game", "Utility"]'
4
+ //% groups='["Player", "Controller", "Info", "Game", "Utility"]'
5
5
  namespace mp {
6
6
  }
@@ -409,8 +409,8 @@ namespace mp {
409
409
  //% blockId=mp_getPlayerSprite
410
410
  //% block="$player sprite"
411
411
  //% player.shadow=mp_playerSelector
412
- //% group=Sprites
413
- //% weight=100
412
+ //% group=Player
413
+ //% weight=80
414
414
  //% blockGap=8
415
415
  //% help=multiplayer/get-player-sprite
416
416
  //% parts="multiplayer"
@@ -428,8 +428,8 @@ namespace mp {
428
428
  //% block="set $player sprite to $sprite"
429
429
  //% player.shadow=mp_playerSelector
430
430
  //% sprite.shadow=spritescreate
431
- //% group=Sprites
432
- //% weight=100
431
+ //% group=Player
432
+ //% weight=120
433
433
  //% blockGap=8
434
434
  //% help=multiplayer/set-player-sprite
435
435
  //% parts="multiplayer"
@@ -438,6 +438,58 @@ namespace mp {
438
438
  player.setSprite(sprite);
439
439
  }
440
440
 
441
+ /**
442
+ * Selects one of the players by number
443
+ * @param number The player number
444
+ * @returns The player
445
+ */
446
+ //% blockId=mp_playerSelector
447
+ //% block="player $number"
448
+ //% group=Player
449
+ //% weight=100
450
+ //% blockGap=8
451
+ //% help=multiplayer/player-selector
452
+ //% parts="multiplayer"
453
+ export function playerSelector(number: PlayerNumber): Player {
454
+ const index = number - 1;
455
+ return getPlayerByIndex(index);
456
+ }
457
+
458
+ /**
459
+ * Returns an array of all players
460
+ */
461
+ //% blockId=mp_allPlayers
462
+ //% block="array of all players"
463
+ //% group=Player
464
+ //% weight=90
465
+ //% blockGap=8
466
+ //% help=multiplayer/get-all-players
467
+ //% parts="multiplayer"
468
+ export function allPlayers(): Player[] {
469
+ return _mpstate().players.slice();
470
+ }
471
+
472
+ /**
473
+ * Gets the player the sprite is assigned to
474
+ * @param sprite the sprite
475
+ * @returns Player, or undefined if not found
476
+ */
477
+ //% blockId=mp_getPlayerBySprite
478
+ //% block="$sprite player"
479
+ //% sprite.shadow=variables_get
480
+ //% sprite.defl=mySprite
481
+ //% group=Player
482
+ //% weight=70
483
+ //% blockGap=8
484
+ //% help=multiplayer/get-player-by-sprite
485
+ //% parts="multiplayer"
486
+ export function getPlayerBySprite(sprite: Sprite): Player {
487
+ for (const player of _mpstate().players) {
488
+ if (player.getSprite() === sprite) return player;
489
+ }
490
+ return undefined;
491
+ }
492
+
441
493
  /**
442
494
  * Control a player's sprite with directional buttons
443
495
  * @param player The player to control
@@ -456,7 +508,7 @@ namespace mp {
456
508
  //% group=Controller
457
509
  //% weight=100
458
510
  //% blockGap=8
459
- //% help=controller/move-sprite
511
+ //% help=multiplayer/move-with-buttons
460
512
  //% parts="multiplayer"
461
513
  export function moveWithButtons(player: Player, vx?: number, vy?: number) {
462
514
  if (!player) return;
@@ -475,7 +527,7 @@ namespace mp {
475
527
  //% group=Controller
476
528
  //% weight=90
477
529
  //% blockGap=8
478
- //% help=controller/on-button-event
530
+ //% help=multiplayer/on-button-event
479
531
  //% parts="multiplayer"
480
532
  export function onButtonEvent(button: MultiplayerButton, event: ControllerButtonEvent, handler: (player: Player) => void) {
481
533
  _mpstate().onButtonEvent(button, event, handler);
@@ -493,7 +545,7 @@ namespace mp {
493
545
  //% group=Controller
494
546
  //% weight=80
495
547
  //% blockGap=8
496
- //% help=controller/button/is-pressed
548
+ //% help=multiplayer/is-button-pressed
497
549
  //% parts="multiplayer"
498
550
  export function isButtonPressed(player: Player, button: MultiplayerButton): boolean {
499
551
  if (!player) return false;
@@ -511,12 +563,30 @@ namespace mp {
511
563
  //% group=Controller
512
564
  //% weight=70
513
565
  //% blockGap=8
514
- //% help=controller/on-event
566
+ //% help=multiplayer/on-controller-event
515
567
  //% parts="multiplayer"
516
568
  export function onControllerEvent(event: ControllerEvent, handler: (player: Player) => void) {
517
569
  _mpstate().onControllerEvent(event, handler);
518
570
  }
519
571
 
572
+ /**
573
+ * Queries the connected state of the player
574
+ * @param player The player to query
575
+ * @returns true if the player is connected
576
+ */
577
+ //% blockId=mp_isConnected
578
+ //% block="$player connected"
579
+ //% player.shadow=mp_playerSelector
580
+ //% group=Controller
581
+ //% weight=60
582
+ //% blockGap=8
583
+ //% help=multiplayer/is-connected
584
+ //% parts="multiplayer"
585
+ export function isConnected(player: Player): boolean {
586
+ if (!player) return false;
587
+ return player._getController().connected;
588
+ }
589
+
520
590
  /**
521
591
  * Gets the value of the specified player state
522
592
  * @param player The player to get the state for
@@ -609,7 +679,7 @@ namespace mp {
609
679
  //% group=Info
610
680
  //% weight=70
611
681
  //% blockGap=8
612
- //% help=info/on-score
682
+ //% help=multiplayer/on-score
613
683
  //% parts="multiplayer"
614
684
  export function onScore(score: number, handler: (player: Player) => void) {
615
685
  _mpstate().onReachedScore(score, handler);
@@ -625,7 +695,7 @@ namespace mp {
625
695
  //% group=Info
626
696
  //% weight=60
627
697
  //% blockGap=8
628
- //% help=info/on-life-zero
698
+ //% help=multiplayer/on-life-zero
629
699
  //% parts="multiplayer"
630
700
  export function onLifeZero(handler: (player: Player) => void) {
631
701
  _mpstate().onLifeZero(handler);
@@ -682,44 +752,6 @@ namespace mp {
682
752
  return _mpstate().players[index];
683
753
  }
684
754
 
685
- /**
686
- * Selects one of the players by number
687
- * @param number The player number
688
- * @returns The player
689
- */
690
- //% blockId=mp_playerSelector
691
- //% block="player $number"
692
- //% group=Utility
693
- //% weight=80
694
- //% blockGap=8
695
- //% help=multiplayer/player-selector
696
- //% parts="multiplayer"
697
- export function playerSelector(number: PlayerNumber): Player {
698
- const index = number - 1;
699
- return getPlayerByIndex(index);
700
- }
701
-
702
- /**
703
- * Gets the player the sprite is assigned to
704
- * @param sprite the sprite
705
- * @returns Player, or undefined if not found
706
- */
707
- //% blockId=mp_getPlayerBySprite
708
- //% block="$sprite player"
709
- //% sprite.shadow=variables_get
710
- //% sprite.defl=mySprite
711
- //% group=Sprites
712
- //% weight=90
713
- //% blockGap=8
714
- //% help=multiplayer/get-player-by-sprite
715
- //% parts="multiplayer"
716
- export function getPlayerBySprite(sprite: Sprite): Player {
717
- for (const player of _mpstate().players) {
718
- if (player.getSprite() === sprite) return player;
719
- }
720
- return undefined;
721
- }
722
-
723
755
  /**
724
756
  * Turns player indicators on or off
725
757
  * @param visible indicator visibility