# Scenes

Las escenas son los [entities](https://github.com/decentraland/docs/blob/main/contributor/entities/README.md) que producen comportamiento en diferentes partes de Decentraland. Pueden abarcar múltiples parcelas de LAND, y los jugadores que las atraviesen en un World Explorer ejecutarán código especial proporcionado por la escena.

Puedes encontrar un ejemplo completo de la vida real en [este manifiesto de la escena](https://peer.decentraland.org/content/contents/bafkreidihplrc5cxarjkji2enmzhicpjoa2vrlqyyffnholmxb3o2xft3u) en el servidor de contenido de la Foundation.

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

Las escenas tienen uno o más [pointers](https://github.com/decentraland/docs/blob/main/contributor/pointers/README.md) en forma de cadenas de coordenadas de parcela, como `"0,0"`. Cada parcela que ejecuta la escena estará listada en la [`pointers` array](https://github.com/decentraland/docs/blob/main/contributor/entities/README.md#properties) del manifiesto de la entity, y todos esos pointers serán resueltos por el content server a esa escena.

En otras palabras, puedes elegir las coordenadas x/y de una parcela y localizar la escena que se está ejecutando consultando al content server por el `"<x>,<y>"` pointer. Esta es la forma en que los World Explorers deciden si habilitar el comportamiento de una escena mientras el jugador navega por el mundo.

Un típico `pointers` array se ve así:

```json
{
  "pointers": [
    "-113,-134",
    "-113,-133",
    "-113,-132",
  ],
  // ... otras propiedades de la entity
}
```

Estos datos también están disponibles en el `metadata.scene.parcels` campo detallado más abajo, en caso de que quieras guardar solo el objeto específico de la escena en el manifiesto.

### Campos de Metadata

Hay varias propiedades especiales para [entities](https://github.com/decentraland/docs/blob/main/contributor/entities/README.md) de tipo `scene` ubicadas en el `metadata` campo de nivel superior.

| Campo                 | Valor                                                                                                                                                                  |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `owner`               | Información sobre el mantenedor de la escena.                                                                                                                          |
| `main`                | El [nombre de archivo interno](https://github.com/decentraland/docs/blob/main/contributor/entities/README.md#files) de este archivo JavaScript principal de la escena. |
| `tags`                | Un array de etiquetas en forma de cadenas que describen esta escena.                                                                                                   |
| `display`             | Información sobre la escena que los Explorers mostrarán a los jugadores (ver más abajo).                                                                               |
| `scene`               | Las parcelas en las que esta escena está activa y su ubicación central (ver más abajo).                                                                                |
| `contact`             | Nombre y dirección de correo electrónico para contactar a los creadores o mantenedores de la escena (ver más abajo).                                                   |
| `spawnPoints`         | Ubicaciones y ángulos de cámara para los jugadores que entran en esta escena (ver más abajo).                                                                          |
| `requiredPermissions` | Permisos recomendados que los Explorers deben solicitar a los jugadores (ver más abajo).                                                                               |
| `featureToggles`      | Configuraciones para feature flags                                                                                                                                     |

{% hint style="info" %}
Recuerda que las entities y su metadata pueden tener campos personalizados. Puedes encontrar algunas propiedades que no están listadas aquí.
{% endhint %}

#### Display

En `metadata.display`, encontrarás propiedades que son útiles para informar a los jugadores sobre la escena antes de que entren.

| Campo             | Valor                                                                                                                                                                               |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `title`           | El nombre para mostrar de esta escena.                                                                                                                                              |
| `description`     | Una descripción extendida de esta escena.                                                                                                                                           |
| `favicon`         | *Obsoleto* El [nombre de archivo interno](https://github.com/decentraland/docs/blob/main/contributor/entities/README.md#files) a un icono, mostrado cuando esta escena está activa. |
| `navmapThumbnail` | El [nombre de archivo interno](https://github.com/decentraland/docs/blob/main/contributor/entities/README.md#files) a la miniatura de esta escena para el mapa mundial.             |

Un ejemplo:

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

#### Scene

El `metadata.scene` la propiedad es un objeto que describe la posición de esta escena en el mapa mundial.

| Campo     | Valor                                                            |
| --------- | ---------------------------------------------------------------- |
| `parcels` | Un array de pointers de parcelas que ejecutan esta escena.       |
| `base`    | El pointer de la parcela para el punto de origen de esta escena. |

En la práctica, se ve así:

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

El `base` el campo siempre se incluye en la `parcels` array.

#### Contact

El `metadata.contact` el objeto contiene la información de contacto del owner o mantenedor de la escena.

| Campo   | Valor                                                          |
| ------- | -------------------------------------------------------------- |
| `name`  | Un nombre para este contacto.                                  |
| `email` | (Opcional) Una dirección de correo electrónico para contactar. |

En JSON:

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

Mientras que el `name` campo se rellena en cada escena, encontrarás que en la práctica el `email` campo suele ser una cadena vacía. Esta es una elección de privacidad hecha por el creador de la escena.

#### Spawn Points

El `metadata.spawnPoints` el campo define un array de puntos y direcciones de cámara que determinan dónde deben aparecer los jugadores que entran en la escena y hacia dónde deben mirar inicialmente. Debe haber al menos un spawn point definido.

Cada elemento en el array tiene varias propiedades:

| Campo          | Valor                                                                               |
| -------------- | ----------------------------------------------------------------------------------- |
| `name`         | Una etiqueta para identificar este spawn point.                                     |
| `position`     | La posición inicial en un `{ x, y, z }` objeto con coordenadas float.               |
| `cameraTarget` | La dirección inicial de la cámara en un `{ x, y, z }` objeto con coordenadas float. |
| `default`      | Si este spawn point se usa a menos que se especifique lo contrario.                 |

Por ejemplo:

```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" %}
**📔 Nota**: El Spawn Area y Camera Target se pueden configurar usando el Creator Hub. Para más información, ve a la [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>

En `metadata.requiredPermissions` encontrarás un array de cadenas conocidas que declaran qué permisos deben solicitarse al jugador antes de que el World Explorer permita ciertas acciones. Esto recae en el Explorer; otros clientes construidos para diferentes propósitos pueden elegir ignorarlo.

Este es el conjunto actual de permisos soportados:

| Permission                          | Purpose                                                                             |
| ----------------------------------- | ----------------------------------------------------------------------------------- |
| `USE_FETCH`                         | Permitir que la escena realice solicitudes HTTP externas.                           |
| `USE_WEBSOCKET`                     | Permitir que la escena use la API de WebSocket para establecer conexiones externas. |
| `OPEN_EXTERNAL_LINK`                | Permitir que la escena abra una URL (en una pestaña del navegador o vista web).     |
| `USE_WEB3_API`                      | Permitir que la escena se comunique con una wallet.                                 |
| `ALLOW_TO_TRIGGER_AVATAR_EMOTE`     | Permitir que la escena anime el avatar del jugador con un emote.                    |
| `ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE` | Permitir que la escena cambie la posición del jugador.                              |

#### Feature Toggles

El `metadata.featureToggles` el campo permite que una escena indique si ciertas features del World Explorer deben estar habilitadas o deshabilitadas.

El campo contiene un objeto de la forma `{ [featureName]: 'enabled' | 'disabled' }`, como este:

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

Actualmente, `voiceChat` es la única feature flag comúnmente soportada.
