262 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

< [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) >