# Paikalliset ryhmät, peliohjaimet ja puhelinohjaimet PlayDrop-peleissä

Lue peliohjaimia ja PlayDropin puhelinohjaimia sdk.device-rajapinnalla, seuraa paikallisten pelaajien paikkoja ja ilmoita ohjaintuki ja paikalliset ryhmäkoot.

Source: https://www.playdrop.ai/fi/create/learn/local-party

Paikallinen ryhmä tarkoittaa useaa ihmistä pelaamassa yhdellä näytöllä, kullakin oma ohjain: fyysinen peliohjain tai puhelin, josta PlayDrop tekee ohjaimen koodin skannauksella. Pelisi lukee jokaista ohjainta samalla tavalla SDK:n kautta, niin verkkosivustolla kuin sovelluksissa.

## Ilmoita ohjaimet ja ryhmäkoot

```json
{
  "types": ["solo", "party"],
  "party": { "local": [1, 2, 3, 4] },
  "controller": { "support": "optional", "type": "simpler" }
}
```

- `controller.support` on `off`, `optional` tai `required`. Ilmoita se jokaisessa pelissä, myös arvo `off`.
- `controller.type` nimeää vähimmäisohjaimet, joita peli tarvitsee: `any` (suunnat, Vahvista ja Peruuta), `simpler` (yksi tatti, neljä etupainiketta ja Menu; puhelinohjaimet kelpaavat) tai `standard` (ristiohjain, kaksi painettavaa tattia, neljä etupainiketta, kaksi olkapainiketta, kaksi liipaisinta ja Menu).
- `party.local` luettelee tarkat pelaajamäärät yhdellä näytöllä; `1` vaatii `solo`-tyypin. Kun ohjaintuki on päällä, jokaisen luetellun määrän on oltava pelattavissa ohjaimilla.

## Lue ohjaimia

```js
await sdk.device.enableControllerInput().catch(() => { /* keep keyboard and touch */ });

const stop = sdk.device.onButton(({ playerIndex, button, pressed }) => {
  if (button === "south" && pressed) jump(playerIndex);
});

function update() {
  for (const slot of sdk.device.localPlayers) {
    const pad = sdk.device.gamepad(slot.playerIndex);
    if (pad?.connected) move(slot.playerIndex, pad.axes[0], pad.axes[1]);
  }
  requestAnimationFrame(update);
}
update();
```

- Kutsu `enableControllerInput()` kerran `init()`-kutsun jälkeen. Se hylätään virheellä `controller_input_unavailable` tai `controller_input_timeout`, kun isäntä ei pysty tarjoamaan syötettä; peli jatkaa toimintaansa.
- `gamepad(playerIndex)` palauttaa tilannevedoksen selaimen vakioasettelussa: `axes` (vasen x/y ja oikea x/y välillä -1…1), seitsemäntoista `buttons`-painiketta, `source` (`physical` tai `virtual`) ja `id`. `playerIndex` 0 on pelaaja 1.
- Painikkeilla on sijaintiin perustuvat nimet, kuten `south` ja `east`. `pad.label("south")` antaa näytettävän kehotteen: ”A”, ”Cross” tai ”B” ohjaimesta riippuen. `pad.has("dpad")` kertoo, onko ohjaimessa kyseinen säädin.
- Menu ja Home kuuluvat PlayDropille, ja ne näkyvät pelille aina vapautettuina.
- Älä koskaan kutsu `navigator.getGamepads()`: puhelinohjaimet tavoittavat pelit vain SDK:n kautta, ja PlayDrop kirjaa varoituksen.

## Paikallisten pelaajien paikat

`sdk.device.localPlayers` luettelee pelaajien valitsemat paikat, `{ playerIndex, gamepadKey }`, ja `onLocalPlayersChange(callback)` ilmoittaa muutoksista. Irronnut ohjain säilyttää paikkansa. Kun pelaajaluettelo muuttuu tai tyhjenee, palaa järkevään valikkoon kaatumisen sijaan. Yksi ohjain yksinään on tavallista syötettä, ei ryhmä.

Painikkeesta `sdk.social.openParty({ mode: "local" })` avaa PlayDropin yhdistämisikkunan, jossa näkyvät puhelimen QR-koodi ja yhdistetyt peliohjaimet. Tarjoa vain ilmoittamiasi tiloja.

## Paikallinen tai verkko, ei molempia

Isäntä käynnistää pelin joko paikallisena ryhmänä tai verkkoryhmänä, ei koskaan molempina: paikalliset pelaajat eivät voi liittyä verkkohuoneisiin. Verkkopelaamisesta ystävien kanssa katso [verkkoryhmät ja puhe](https://www.playdrop.ai/fi/create/learn/online-party).

## Suunnittele sohvalle

Näytä jokaisen pelaajan väri ja ohjainkehote, anna kenen tahansa liittyä painamalla painiketta ja pidä HUD luettavana sohvalta. Säilytä kosketus- ja näppäimistöohjaus yksinpeliä varten.

## Liittyvät oppaat

- [Verkkoryhmät ja puhe](https://www.playdrop.ai/fi/create/learn/online-party): Anna ystävien pelata yhdessä: ilmoita ryhmäkoot, avaa ryhmäikkuna, liity varattuihin huoneisiin sdk.multiplayer.join-kutsulla ja hallitse huoneen puhetta.
- [Koko näyttö ja turva-alueet](https://www.playdrop.ai/fi/create/learn/viewport): Täytä näyttö PlayDrop-pelillä ja pidä HUD CSS-turva-alueiden sisällä ja erillään isännän säätimistä SDK:n mittaamien reservedCorners-arvojen avulla.
- [catalogue.json](https://www.playdrop.ai/fi/create/learn/catalogue-json): PlayDrop-pelien catalogue.json-kentät: tunniste, pelisivu, pelitavat, näkymät, kirjautuminen, Instant, esilataus, media, käännökset, pisteet ja palvelimet.
