# Estados e condições

{% embed url="<https://www.youtube.com/watch?v=wm8ZD2kSyKA>" %}

## Lógica condicional

Adicione condições a um trigger, para que a action só ocorra se essas condições forem cumpridas. Por exemplo, clicar numa porta só ativa a action "Open" se ela ainda não estiver aberta.

Para adicionar uma condição, clique no ícone dos três pontos ao lado de **Trigger event** e selecione **Add Trigger Condition**.

![](/files/5f30d08d660a32837db1d9537821cab6afa6eae7)

Um único trigger pode incluir várias condições. Clique no **+** ícone para adicionar mais condições. Quando existir mais de uma condição, você pode selecionar uma destas opções:

* **All Conditions should be met (AND)**: O trigger só acontece se todas as condições forem verdadeiras.
* **Any Condition can be met (OR)** O trigger acontece se pelo menos uma das condições for verdadeira.

![](/files/09c468fd5c3f796e0434b715351bd323f8d3caa8)

### States

O **States** component está incluído em vários smart items. Ele lista os estados possíveis em que o smart item pode estar. Em qualquer momento, o smart item está num destes estados. Por exemplo, uma porta pode estar *Open* ou *Closed*. A action Open define o estado para *Open*, a action Close define o estado para *Closed*.

Pode fazer as seguintes coisas com states:

1. Use uma condition num trigger para verificar o estado de uma entidade. Dessa forma, a action só é executada se um estado específico estiver ativo.

![](/files/5f30d08d660a32837db1d9537821cab6afa6eae7)

2. Altere um state através do **Set State** action.

![](/files/a3aa8eb4636172a215bfe55e57efba9b49d3e152)

3. Reaja a alterações no state através do **On State Change** trigger event.

Para alternar entre duas actions, defina dois triggers, cada um com uma condition que verifique um state. Por exemplo, as portas têm um trigger que ativa a action Open, com uma condition que primeiro verifica se o state da porta é *Closed*, e outro trigger que ativa a action Close, com uma condition que verifica se o state da porta é *Open*. Apenas um dos dois é ativado cada vez que o jogador clica na porta.

![](/files/25da18ec5c5675d9ff3b597690f2f480a2d773c8)

Pode adicionar tantos states quantos quiser a um smart item. Basta clicar no **Add New State** button para adicionar outro à lista.

![](/files/7ba1e7a3f0d3f466a7c23a6585d6c4a6e5babd31)

Um dos states é selecionado como o default, e o item começará sempre neste state quando a scene for executada. Pode atribuir um state diferente como default clicando nos três pontos ao lado de outro dos states e selecionando **Set as Default**.

{% hint style="info" %}
**💡 Dica**: Mantenha as interações entre itens simples. Por exemplo, evite cenários como ter um botão que abre uma porta ao acionar três actions: reproduzir a animação da porta, reproduzir o som da porta e alterar o state da porta. Em vez disso, faça com que o botão altere o state da porta. Depois, use um **On State Change** trigger para que a própria porta trate de reproduzir a animação e o som sempre que o state mudar.
{% endhint %}

### Counter

Use a **Counter** component para acompanhar um número, que pode mudar à medida que o jogador executa actions na scene. Pode usar os valores do counter na lógica condicional.

Quando uma entity tem um componente Counter, pode executar as seguintes actions nela:

* **Increment Counter**: Incrementa o valor do counter em 1.
* **Decrease Counter**: Diminui o valor do counter em 1.
* **Set Counter**: Define o valor do counter para um número específico, por exemplo para o voltar para 0.

Use a **On Counter Change** trigger para executar uma action sempre que o valor do counter muda. Adicione uma condition a este trigger para que ele só seja ativado depois de ultrapassar um determinado threshold.

![](/files/b7b1348b8a4dc4d7e51395e8b2e8a59f089015f4)

Numa condition, pode verificar se o valor do counter é

* Maior do que um valor dado
* Menor do que um valor dado
* Igual a um valor dado

{% hint style="info" %}
**💡 Dica**: Para verificar maior ou igual, pode adicionar duas conditions ao trigger event, usando a opção AND.

Para fazer com que uma action ocorra apenas uma vez ao ultrapassar um threshold, e não se repita a cada incremento a partir daí, combine o counter com um **State** component. Defina o State como "Done" sempre que atingir o valor desejado e adicione uma condition para verificar este state no trigger event.
{% endhint %}

### Veja também

* [Smart items - Basics](/creator/content-creator-pt/scene-editor/interatividade/smart-items.md)
* [Smart Items - Advanced](/creator/content-creator-pt/scene-editor/interatividade/smart-items-advanced.md)
* [Tornando qualquer item smart](/creator/content-creator-pt/scene-editor/interatividade/make-any-item-smart.md)
* [Combine com código](/creator/content-creator-pt/scene-editor/expandir-com-codigo/overview.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-pt/scene-editor/interatividade/states-and-conditions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
