Skip to content

[Feature] Sistema automático de desistência por inatividade #65

Closed

Description

@caioross

🚀 Feature

Criar um sistema que detecte jogadores inativos e os remova automaticamente da rodada.


📖 Contexto

É bastante comum alguém entrar em uma partida e abandonar o computador.

Como atualmente a partida aguarda todos os jogadores terminarem, apenas um usuário inativo consegue prender toda a sala durante vários minutos.

Esse comportamento prejudica todos os demais participantes.


❌ Problema

Hoje não existe nenhuma detecção de inatividade.

Consequências:

  • partidas ficam presas;
  • jogadores precisam esperar alguém que nem está presente;
  • experiência extremamente frustrante;
  • salas acabam sendo abandonadas.

💡 Proposta

Monitorar continuamente a atividade de digitação do jogador.

Caso nenhuma tecla seja pressionada durante 30 segundos, iniciar uma contagem regressiva.

⚠️ Você está inativo.

Digite qualquer tecla para continuar.

Desistência automática em:

10...
9...
8...

Caso o jogador volte a digitar:

  • cancelar imediatamente a contagem.

Caso a contagem termine:

  • marcar o jogador como desistente;
  • removê-lo da rodada atual;
  • permitir que a partida continue normalmente.

🖥️ Funcionamento esperado

30 segundos sem digitar
        ↓
Mostrar aviso
        ↓
Contagem de 10 segundos
        ↓
Jogador digitou?
        ↓
Sim → cancela
Não → desistência automática

✅ Critérios de aceite

  • Detectar ausência de digitação.
  • Após 30 segundos iniciar a contagem.
  • Exibir aviso visual claro.
  • Qualquer tecla cancela o processo.
  • Após 10 segundos remover o jogador da rodada.
  • Os demais jogadores não precisam mais aguardá-lo.

🎯 Benefícios

  • partidas mais rápidas;
  • elimina jogadores AFK;
  • melhora significativamente a experiência multiplayer;
  • reduz salas travadas.

🔮 Melhorias futuras

No futuro essa lógica pode considerar outros eventos além da digitação, como movimentação do mouse ou interação com a página.

Activity

  1. added
    enhancementNew feature or request
    em-resolucaoClaim: um Resolvedor está trabalhando nisto
    and removed
    em-resolucaoClaim: um Resolvedor está trabalhando nisto
    on Jul 25, 2026
  2. caioross commented on Jul 26, 2026

    @caioross
    OwnerAuthor

    Resolvida em PR #81 — #81 (§7.3 normal — reusa o abandon() existente).

    • 30s sem digitar → aviso com contagem de 10s; qualquer tecla cancela; ao zerar, abandon() automático libera a sala.
    • Lógica em TypingCore ligada só no multiplayer (idleForfeit); Practice intacto. Detecção em refs + 1 tick de 500ms — nada por keystroke (área sagrada).
    • Verificado por rastreio instrumentado no browser (constantes reduzidas, depois restauradas para 30s/10s e instrumentação removida): ciclo idle → open(30s) → count 10..0 → abandon e cancelar ao digitar confirmados. O overlay usa framer-motion; no pane headless o rAF fica suspenso e a opacidade congela em 0 (artefato visual, não da lógica).
    • Gate verde: typecheck · build · test (34) · validate-metrics (37) · validate-persistence (22).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions