262 lines
5.3 KiB
Markdown
262 lines
5.3 KiB
Markdown
< [Voltar](chapter-6.md) | [Sumário](table-of-contens.md) | [Adiante](chapter-8.md) >
|
||
|
||
# 🖐️ Periférico TOUCH (Sistema de Entrada via ponteiro absoluto)
|
||
|
||
## 1. Visão Geral
|
||
|
||
O periférico **TOUCH** fornece ao PROMETEU um **ponteiro absoluto**, baseado em coordenadas de tela, destinado a:
|
||
|
||
- interação com UI
|
||
- seleção direta de elementos
|
||
- ações contextuais no cenário
|
||
- mecânicas baseadas em arrasto (drag, slash, trail)
|
||
|
||
O TOUCH é um **periférico de primeira classe**, tão válido quanto D-Pad e botões.
|
||
|
||
---
|
||
|
||
## 2. Princípios de Design
|
||
|
||
O TOUCH no PROMETEU segue princípios rígidos:
|
||
|
||
- ✅ **Single-touch universal**
|
||
- ✅ **Determinístico**
|
||
- ✅ **Estado por frame**
|
||
- ✅ **Sem gestos**
|
||
- ✅ **Sem aceleração**
|
||
- ✅ **Sem heurística**
|
||
- ✅ **Mesmo comportamento em todas as plataformas**
|
||
|
||
> Se um comportamento não pode ser garantido em todas as plataformas, ele não existe no PROMETEU.
|
||
>
|
||
|
||
---
|
||
|
||
## 3. Modelo Conceitual
|
||
|
||
O PROMETEU expõe **apenas um ponteiro ativo por vez**, independentemente de quantos toques físicos o hardware reconheça.
|
||
|
||
- Hardware pode detectar multitouch
|
||
- Runtime seleciona **apenas um toque ativo**
|
||
- A API **nunca expõe multitouch**
|
||
|
||
Esse modelo garante:
|
||
|
||
- portabilidade total
|
||
- previsibilidade
|
||
- ausência de ambiguidades
|
||
|
||
---
|
||
|
||
## 4. Espaço de Coordenadas
|
||
|
||
- As coordenadas do TOUCH usam **o mesmo espaço do framebuffer**
|
||
- Resolução: **320×180**
|
||
- Origem: canto superior esquerdo `(0,0)`
|
||
- Intervalos:
|
||
- `x ∈ [0, 319]`
|
||
- `y ∈ [0, 179]`
|
||
|
||
O TOUCH é **absoluto**:
|
||
|
||
> (x, y) representa a posição exata do contato, sem transformação dinâmica.
|
||
>
|
||
|
||
---
|
||
|
||
## 5. API do Periférico TOUCH
|
||
|
||
### 5.1 Estrutura Exposta
|
||
|
||
```
|
||
TOUCH:
|
||
present : bool
|
||
down : bool
|
||
pressed : bool
|
||
released : bool
|
||
x : int
|
||
y : int
|
||
|
||
```
|
||
|
||
---
|
||
|
||
### 5.2 Semântica dos Campos
|
||
|
||
- **present**
|
||
- `true` se o periférico TOUCH está disponível
|
||
- `false` se não houver touch físico (desktop, hardware sem touch)
|
||
- **down**
|
||
- `true` enquanto o ponteiro ativo está pressionado
|
||
- **pressed**
|
||
- `true` apenas no frame em que o ponteiro ativo foi capturado
|
||
- **released**
|
||
- `true` apenas no frame em que o ponteiro ativo foi liberado
|
||
- **x, y**
|
||
- posição atual do ponteiro ativo
|
||
- válidas apenas quando `down == true`
|
||
|
||
---
|
||
|
||
## 6. Política de Seleção do Ponteiro
|
||
|
||
### *Single Pointer Capture Policy*
|
||
|
||
Quando múltiplos toques físicos ocorrem, o PROMETEU aplica a seguinte política:
|
||
|
||
---
|
||
|
||
### 6.1 Captura Inicial
|
||
|
||
1. Se **nenhum ponteiro está ativo**
|
||
2. E ocorre um **novo toque físico**
|
||
3. O **primeiro toque detectado** é capturado
|
||
4. Esse toque se torna o **ponteiro ativo**
|
||
|
||
Esse frame gera:
|
||
|
||
- `pressed = true`
|
||
- `down = true`
|
||
|
||
---
|
||
|
||
### 6.2 Manutenção da Captura
|
||
|
||
Enquanto o ponteiro ativo estiver pressionado:
|
||
|
||
- Apenas ele é rastreado
|
||
- Todos os outros toques físicos são ignorados
|
||
- `x, y` seguem apenas o ponteiro ativo
|
||
|
||
---
|
||
|
||
### 6.3 Liberação
|
||
|
||
Quando o ponteiro ativo é solto:
|
||
|
||
- `released = true`
|
||
- `down = false`
|
||
- O sistema entra em estado **sem ponteiro ativo**
|
||
|
||
---
|
||
|
||
### 6.4 Recaptura (Regra Importante)
|
||
|
||
Após a liberação:
|
||
|
||
- Toques que **já estavam presentes** são ignorados
|
||
- Um novo ponteiro só é capturado com um **novo evento de toque**
|
||
|
||
> Isso evita saltos inesperados do ponteiro e ações acidentais.
|
||
>
|
||
|
||
---
|
||
|
||
## 7. Comportamentos Deliberadamente NÃO Suportados
|
||
|
||
O periférico TOUCH **não implementa**:
|
||
|
||
❌ Multitouch
|
||
|
||
❌ Gestos (swipe, pinch, rotate, long-press)
|
||
|
||
❌ Aceleração ou suavização
|
||
|
||
❌ Sensibilidade dinâmica
|
||
|
||
❌ Histórico implícito
|
||
|
||
❌ Interpretação de intenção
|
||
|
||
Se um jogo quiser qualquer um desses comportamentos, ele deve:
|
||
|
||
- implementar explicitamente
|
||
- usando apenas estado por frame
|
||
- sem suporte implícito do hardware
|
||
|
||
---
|
||
|
||
## 8. “Sem Gesto” — Definição Formal
|
||
|
||
O PROMETEU **não interpreta padrões temporais**.
|
||
|
||
O periférico TOUCH **não classifica ações** como:
|
||
|
||
- swipe
|
||
- drag
|
||
- long press
|
||
- double tap
|
||
|
||
Ele apenas informa:
|
||
|
||
- posição atual
|
||
- estado do contato
|
||
|
||
Toda semântica é responsabilidade do jogo.
|
||
|
||
---
|
||
|
||
## 9. “Sem Aceleração” — Definição Formal
|
||
|
||
O PROMETEU **não modifica** o input do TOUCH.
|
||
|
||
- Nenhuma curva de sensibilidade
|
||
- Nenhuma amplificação por velocidade
|
||
- Nenhuma suavização
|
||
|
||
A relação entre o toque físico e `(x, y)` é **1:1** após normalização.
|
||
|
||
---
|
||
|
||
## 10. Integração com Outras Formas de Input
|
||
|
||
- Desktop:
|
||
- mouse pode emular TOUCH
|
||
- Mobile:
|
||
- touch físico direto
|
||
- Steam Deck:
|
||
- touchscreen físico
|
||
- Hardware PROMETEU:
|
||
- touch opcional, mas suportado
|
||
|
||
Do ponto de vista do PROMETEU:
|
||
|
||
> TOUCH é sempre TOUCH.
|
||
>
|
||
|
||
---
|
||
|
||
## 11. Usos Esperados
|
||
|
||
O periférico TOUCH é adequado para:
|
||
|
||
- UI (menus, inventário, mapas)
|
||
- drag-and-drop
|
||
- seleção direta
|
||
- “clicar para investigar”
|
||
- puzzles baseados em apontamento
|
||
- mecânicas de rastro (ex.: Fruit Ninja-like)
|
||
|
||
---
|
||
|
||
## 12. Garantias de Portabilidade
|
||
|
||
Todo jogo PROMETEU que utiliza TOUCH:
|
||
|
||
- comporta-se de forma idêntica em todas as plataformas
|
||
- não depende de capacidades específicas do host
|
||
- não sofre variação semântica entre desktop, mobile e hardware dedicado
|
||
|
||
---
|
||
|
||
## 13. Resumo
|
||
|
||
O TOUCH no PROMETEU é:
|
||
|
||
- simples
|
||
- explícito
|
||
- previsível
|
||
- universal
|
||
- determinístico
|
||
|
||
< [Voltar](chapter-6.md) | [Sumário](table-of-contens.md) | [Adiante](chapter-8.md) > |