2026-03-24 13:37:24 +00:00

260 lines
4.4 KiB
Markdown

< [Voltar](chapter-5.md) | [Sumário](table-of-contents.md) | [Adiante](chapter-7.md) >
# 🎮 **Periférico INPUT (Sistema de Entrada)**
## 1. Visão Geral
O **Periférico INPUT** é responsável por **coletar e disponibilizar o estado dos controles** ao programa PROMETEU.
Em PROMETEU:
- input é **estado**, não evento implícito
- input é **amostrado no tempo**, não entregue assíncronamente
- input tem **ordem, custo e momento definidos**
> Botões não “disparam eventos”.
Eles mudam de estado.
>
---
## 2. Filosofia do Sistema de Entrada
PROMETEU modela input como hardware clássico:
- o estado dos controles é lido **uma vez por frame**
- o programa consulta esse estado durante `UPDATE`
- não existem callbacks assíncronos de input
Esse modelo:
- é determinístico
- é simples de entender
- reflete microcontroladores e consoles clássicos
---
## 3. Dispositivos de Entrada
PROMETEU abstrai diferentes dispositivos em uma interface comum.
Dispositivos típicos:
- controle digital (D-Pad + botões)
- teclado (mapeado para botões)
- gamepad
- toque (mobile, mapeado)
Independentemente da origem, PROMETEU expõe **o mesmo modelo lógico**.
---
## 4. Modelo de Estado
### 4.1 Estado por Frame
Para cada frame, o sistema mantém:
- estado atual dos botões
- estado do frame anterior
Isso permite consultar:
- botão pressionado
- botão liberado
- botão mantido pressionado
---
### 4.2 Tipos de Consulta
Operações típicas:
```
input.btn(id)// botão está pressionado
input.btnp(id)// botão foi pressionado neste frame
input.btnr(id)// botão foi liberado neste frame
```
Essas funções:
- são puramente consultivas
- não alteram estado
- têm custo explícito
---
## 5. Momento da Amostragem
O estado do input é capturado **no início de cada frame**, antes da fase `UPDATE`.
Fluxo conceitual:
```
FRAME N:
SAMPLEINPUT
UPDATE
DRAW
AUDIO
SYNC
```
Durante todo o frame:
- o estado de input é imutável
- chamadas repetidas retornam o mesmo valor
> Input não muda no meio do frame.
>
---
## 6. Determinismo e Reprodutibilidade
O modelo de input PROMETEU garante:
- mesma sequência de inputs
- mesmos frames
- mesmos resultados
Isso permite:
- reprodução de execuções
- replays determinísticos
- certificação confiável
Input pode ser:
- gravado
- reproduzido
- injetado artificialmente
---
## 7. Input e CAP
Operações de input:
- consomem poucos ciclos
- participam do orçamento por frame
- aparecem em relatórios de certificação
Exemplo:
```
Frame 18231:
input.btn():12cycles
```
Embora barato, input **não é gratuito**.
---
## 8. Mapeamento de Botões
### 8.1 Identificadores Lógicos
PROMETEU define identificadores lógicos de botões:
- `UP`, `DOWN`, `LEFT`, `RIGHT`
- `A`, `B`, `X`, `Y`
- `START`, `SELECT`
O mapeamento físico:
- depende da plataforma
- é resolvido fora da VM
- é transparente ao programa
---
### 8.2 Portabilidade
O mesmo cartucho PROMETEU:
- roda em teclado
- roda em gamepad
- roda em touch
Sem alteração de código.
---
## 9. Input Analógico (Opcional)
PROMETEU pode expor eixos analógicos de forma explícita:
```
input.axis(id)
```
Características:
- valor normalizado (ex.: -1.0 a 1.0)
- custo explícito
- atualização por frame
Input analógico:
- não é obrigatório
- não substitui input digital
- deve ser usado conscientemente
---
## 10. Boas Práticas de Input
PROMETEU incentiva:
- tratar input como estado
- consultar input apenas em `UPDATE`
- separar input de lógica pesada
- mapear ações, não teclas
E desencoraja:
- lógica dependente de polling excessivo
- leitura de input em DRAW
- acoplamento direto a hardware físico
---
## 11. Relação com Consoles Clássicos
O modelo PROMETEU reflete:
- leitura de registradores de input
- polling por frame
- ausência de eventos assíncronos
Esse modelo:
- simplifica raciocínio
- aumenta previsibilidade
- facilita debugging
---
## 12. Implicações Pedagógicas
O Periférico INPUT permite ensinar:
- diferença entre evento e estado
- amostragem temporal
- determinismo em sistemas interativos
- sincronização entre input e lógica
Com feedback claro e reproduzível.
---
## 13. Resumo
- input é estado, não evento
- amostrado uma vez por frame
- imutável durante o frame
- consultas têm custo explícito
- input participa do CAP
- modelo é determinístico
< [Voltar](chapter-5.md) | [Sumário](table-of-contents.md) | [Adiante](chapter-7.md) >