# Scenes

As cenas são os [entities](https://github.com/decentraland/docs/blob/main/contributor/entities/README.md) que produzem comportamento em diferentes partes do Decentraland. Elas podem abranger múltiplos lotes de terra, e jogadores que os percorrem em um World Explorer executarão código especial fornecido pela cena.

Você pode encontrar um exemplo completo da vida real em [o manifesto desta cena](https://peer.decentraland.org/content/contents/bafkreidihplrc5cxarjkji2enmzhicpjoa2vrlqyyffnholmxb3o2xft3u) no servidor de conteúdo da Foundation.

### Pointers <a href="#pointers" id="pointers"></a>

As cenas têm um ou mais [pointers](https://github.com/decentraland/docs/blob/main/contributor/pointers/README.md) na forma de strings de coordenadas de parcela, como `"0,0"`. Cada parcela executando a cena será listada no [`pointers` array](https://github.com/decentraland/docs/blob/main/contributor/entities/README.md#properties) do manifesto da entity, e todos esses pointers serão resolvidos pelo servidor de conteúdo para essa cena.

Em outras palavras, você pode escolher as coordenadas x/y de uma parcela e localizar a cena que está sendo executada consultando o servidor de conteúdo pelo `"<x>,<y>"` pointer. Esta é a forma como os World Explorers decidem se devem ativar o comportamento de uma cena à medida que o jogador navega pelo mundo.

Um `pointers` array típico se parece com isto:

```json
{
  "pointers": [
    "-113,-134",
    "-113,-133",
    "-113,-132",
  ],
  // ... outras propriedades da entity
}
```

Esses dados também estão disponíveis em `metadata.scene.parcels` campo detalhado abaixo, caso você queira salvar apenas o objeto específico da cena no manifesto.

### Campos de Metadata

Existem várias propriedades especiais para [entities](https://github.com/decentraland/docs/blob/main/contributor/entities/README.md) do tipo `scene` localizadas no `metadata` campo de nível superior.

| Campo                 | Valor                                                                                                                                                        |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `owner`               | Informações sobre o mantenedor da cena.                                                                                                                      |
| `main`                | O [nome do arquivo interno](https://github.com/decentraland/docs/blob/main/contributor/entities/README.md#files) deste arquivo JavaScript principal da cena. |
| `tags`                | Um array de rótulos string descritivos desta cena.                                                                                                           |
| `display`             | Informações sobre a cena para os Explorers mostrarem aos jogadores (veja abaixo).                                                                            |
| `scene`               | As parcelas em que esta cena está ativa, e sua localização central (veja abaixo).                                                                            |
| `contact`             | Nome e endereço de email para contatar os criadores ou mantenedores da cena (veja abaixo).                                                                   |
| `spawnPoints`         | Localizações e ângulos de câmera para jogadores que entram nesta cena (veja abaixo).                                                                         |
| `requiredPermissions` | Permissões recomendadas para os Explorers solicitarem aos jogadores (veja abaixo).                                                                           |
| `featureToggles`      | Configurações para feature flags                                                                                                                             |

{% hint style="info" %}
Lembre-se de que entities e seus metadata podem ter campos personalizados. Você pode encontrar algumas propriedades que não estão listadas aqui.
{% endhint %}

#### Display

Em `metadata.display`, você encontrará propriedades que são úteis para informar os jogadores sobre a cena antes de eles entrarem nela.

| Campo             | Valor                                                                                                                                                                             |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `title`           | O nome de exibição desta cena.                                                                                                                                                    |
| `description`     | Uma descrição estendida desta cena.                                                                                                                                               |
| `favicon`         | *Depreciado* O [nome do arquivo interno](https://github.com/decentraland/docs/blob/main/contributor/entities/README.md#files) para um ícone, exibido quando esta cena está ativa. |
| `navmapThumbnail` | O [nome do arquivo interno](https://github.com/decentraland/docs/blob/main/contributor/entities/README.md#files) para a miniatura desta cena no mapa mundial.                     |

Um exemplo:

```json
{
  "title": "my_cool_scene",
  "favicon": "favicon.png",
  "navmapThumbnail": "thumbnail.png"
}
```

#### Scene

O `metadata.scene` propriedade é um objeto que descreve a posição desta cena no mapa mundial.

| Campo     | Valor                                                    |
| --------- | -------------------------------------------------------- |
| `parcels` | Um array de pointers de parcelas que executam esta cena. |
| `base`    | O pointer da parcela para o ponto de origem desta cena.  |

Na prática, parece assim:

```json
{
  "parcels": [
    "17,-112", 
    "17,-113"
  ],
  "base": "17,-112"
}
```

O `base` campo é sempre incluído no `parcels` array.

#### Contact

O `metadata.contact` objeto contém as informações de contato do proprietário ou mantenedor da cena.

| Campo   | Valor                                         |
| ------- | --------------------------------------------- |
| `name`  | Um nome para este contato.                    |
| `email` | (Opcional) Um endereço de email para contato. |

Em JSON:

```json
{
  "name": "cool_scene_maker",
  "email": "hello@decentraland.org"
}
```

Enquanto o `name` campo é preenchido em toda cena, você verá que na prática o `email` campo frequentemente é uma string vazia. Esta é uma escolha de privacidade feita pelo criador da cena.

#### Spawn Points

O `metadata.spawnPoints` campo define um array de pontos e direções de câmera determinando onde os jogadores que entram na cena devem aparecer, e para onde devem olhar inicialmente. Deve haver pelo menos um ponto de spawn definido.

Cada item no array possui um número de propriedades:

| Campo          | Valor                                                                         |
| -------------- | ----------------------------------------------------------------------------- |
| `name`         | Um rótulo para identificar este ponto de spawn.                               |
| `position`     | A posição inicial em um `{ x, y, z }` objeto com coordenadas float.           |
| `cameraTarget` | A direção inicial da câmera em um `{ x, y, z }` objeto com coordenadas float. |
| `default`      | Se este ponto de spawn é usado, a menos que especificado o contrário.         |

Por exemplo:

```json
[
  {
    "name": "spawn1",
    "position": { "x": 10.02, "y": 5.27, "z": 15.23  },
    "cameraTarget": { "x": 10.02, "y": 6.27, "z": 31.23 },
    "default": true
  }
]
```

{% hint style="info" %}
**📔 Note**: A Spawn Area e o Camera Target podem ser configurados usando o Creator Hub. Para mais informações, vá para o [Spawn Area](https://github.com/decentraland/docs/blob/main/creator/scene-editor/build/spawn-areas.md) docs.
{% endhint %}

#### Required Permissions <a href="#permissions" id="permissions"></a>

Em `metadata.requiredPermissions` você encontrará um array de strings bem conhecidas declarando quais permissões devem ser solicitadas ao jogador antes que o World Explorer permita certas ações. Isso cabe ao Explorer; outros clientes construídos para diferentes propósitos podem escolher ignorar isto.

Este é o conjunto atual de permissões suportadas:

| Permission                          | Purpose                                                                     |
| ----------------------------------- | --------------------------------------------------------------------------- |
| `USE_FETCH`                         | Permitir que a cena realize requisições HTTP externas.                      |
| `USE_WEBSOCKET`                     | Permitir que a cena use a API WebSocket para estabelecer conexões externas. |
| `OPEN_EXTERNAL_LINK`                | Permitir que a cena abra uma URL (em uma aba do navegador ou web view).     |
| `USE_WEB3_API`                      | Permitir que a cena se comunique com uma wallet.                            |
| `ALLOW_TO_TRIGGER_AVATAR_EMOTE`     | Permitir que a cena anime o avatar do jogador com um emote.                 |
| `ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE` | Permitir que a cena altere a posição do jogador.                            |

#### Feature Toggles

O `metadata.featureToggles` campo permite que uma cena indique se certas funcionalidades do World Explorer devem ser habilitadas ou desabilitadas.

O campo contém um objeto da forma `{ [featureName]: 'enabled' | 'disabled' }`, como este:

```json
{
  "voiceChat": "enabled"
}
```

Atualmente, `voiceChat` é a única feature flag comumente suportada.
