pxt-common-packages 10.4.1 → 10.4.2
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.js +5 -5
- package/libs/azureiot/built/debug/binary.js +461 -461
- 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 +8528 -8282
- package/libs/controller---none/built/debug/binary.js +8507 -8261
- 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 +2 -2
- package/libs/game/_locales/game-strings.json +2 -1
- package/libs/game/built/debug/binary.js +8416 -8170
- package/libs/game/controller.ts +24 -0
- package/libs/game/game.ts +9 -2
- package/libs/game/multiplayer.ts +5 -3
- package/libs/game/scene.ts +2 -0
- package/libs/game/sim/multiplayer.ts +6 -5
- package/libs/game/sprite.ts +1 -0
- package/libs/game/sprites.ts +13 -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/mixer/instrument.ts +7 -0
- package/libs/mixer/melody.ts +1 -0
- package/libs/mqtt/built/debug/binary.js +176 -176
- package/libs/multiplayer/docs/reference/multiplayer/change-player-state-by.md +121 -0
- package/libs/multiplayer/docs/reference/multiplayer/game-over-player-win.md +88 -0
- package/libs/multiplayer/docs/reference/multiplayer/get-player-by-index.md +40 -0
- package/libs/multiplayer/docs/reference/multiplayer/get-player-by-number.md +34 -0
- package/libs/multiplayer/docs/reference/multiplayer/get-player-by-sprite.md +109 -0
- package/libs/multiplayer/docs/reference/multiplayer/get-player-property.md +55 -0
- package/libs/multiplayer/docs/reference/multiplayer/get-player-sprite.md +59 -0
- package/libs/multiplayer/docs/reference/multiplayer/get-player-state.md +55 -0
- package/libs/multiplayer/docs/reference/multiplayer/is-button-pressed.md +44 -0
- package/libs/multiplayer/docs/reference/multiplayer/move-with-buttons.md +50 -0
- package/libs/multiplayer/docs/reference/multiplayer/multiplayer-state.md +55 -0
- package/libs/multiplayer/docs/reference/multiplayer/on-button-event.md +60 -0
- package/libs/multiplayer/docs/reference/multiplayer/on-controller-event.md +76 -0
- package/libs/multiplayer/docs/reference/multiplayer/on-life-zero.md +28 -0
- package/libs/multiplayer/docs/reference/multiplayer/on-score.md +30 -0
- package/libs/multiplayer/docs/reference/multiplayer/player-selector.md +51 -0
- package/libs/multiplayer/docs/reference/multiplayer/set-player-indicators-visible.md +69 -0
- package/libs/multiplayer/docs/reference/multiplayer/set-player-sprite.md +50 -0
- package/libs/multiplayer/docs/reference/multiplayer/set-player-state.md +139 -0
- package/libs/multiplayer/docs/reference/multiplayer.md +57 -0
- package/libs/multiplayer/docs/types/player.md +82 -0
- package/libs/multiplayer/fieldEditors.ts +1 -0
- package/libs/multiplayer/ns.ts +1 -1
- package/libs/multiplayer/player.ts +80 -48
- package/libs/net/built/debug/binary.js +176 -176
- package/libs/net-game/built/debug/binary.js +10194 -9948
- package/libs/palette/built/debug/binary.js +8415 -8169
- 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 +8415 -8169
- package/libs/storyboard/built/debug/binary.js +8415 -8169
- 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
|
+
```
|
package/libs/multiplayer/ns.ts
CHANGED
|
@@ -409,8 +409,8 @@ namespace mp {
|
|
|
409
409
|
//% blockId=mp_getPlayerSprite
|
|
410
410
|
//% block="$player sprite"
|
|
411
411
|
//% player.shadow=mp_playerSelector
|
|
412
|
-
//% group=
|
|
413
|
-
//% weight=
|
|
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=
|
|
432
|
-
//% weight=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|