Repository navigation
Description
🚀 Feature
Impedir que novos jogadores participem de uma rodada que já foi iniciada.
📖 Contexto
Atualmente qualquer jogador pode entrar em uma sala mesmo que a corrida já tenha começado.
Isso gera uma situação bastante comum: uma partida está praticamente terminando, um novo jogador entra na sala e passa a participar daquela mesma rodada. Como consequência, todos os jogadores que já finalizaram precisam aguardar o novo participante terminar (ou desistir), aumentando artificialmente o tempo entre partidas.
Na prática isso quebra completamente o ritmo da sala.
❌ Problema
Hoje a lista de participantes permanece aberta durante toda a partida.
Isso causa diversos problemas:
- jogadores entram no último momento;
- aumenta o tempo de espera entre rodadas;
- quebra o fluxo natural da partida;
- gera frustração em quem terminou rapidamente.
Uma partida deve ser composta apenas pelos jogadores presentes no momento em que ela começou.
💡 Proposta
Quando o líder iniciar uma partida:
- congelar imediatamente a lista de participantes;
- impedir novas entradas naquela rodada;
- qualquer jogador que entrar posteriormente deverá ficar em modo espectador.
Esses jogadores participarão automaticamente da próxima rodada.
🖥️ Experiência do usuário
Ao entrar em uma sala durante uma partida:
🏁 Partida em andamento
Você entrou como espectador.
Assim que esta rodada terminar você participará automaticamente da próxima.
Enquanto isso o jogador pode:
- acompanhar o chat;
- visualizar o progresso dos participantes;
- conversar normalmente;
- aguardar o início da próxima corrida.
✅ Critérios de aceite
- Após o início da partida, a lista de jogadores é congelada.
- Novos usuários entram como espectadores.
- Espectadores não participam da rodada atual.
- Ao iniciar uma nova rodada eles passam a competir normalmente.
- Nenhum jogador ativo precisa esperar alguém que entrou depois do início.
🎯 Benefícios
- ritmo muito melhor entre partidas;
- elimina esperas desnecessárias;
- melhora a competitividade;
- deixa o comportamento semelhante ao de outros jogos multiplayer.
📝 Observações
No futuro pode ser interessante exibir uma pequena badge:
👀 Espectador
para deixar claro o motivo pelo qual aquele usuário ainda não está competindo.
Activity
caioross commentedon Jul 26, 2026
Resolvida em PR #80 — #80 (solicitei quórum, §7.2 — muda a semântica de fim de corrida).
isSpectatorJoin()puro classifica quem entra depois dostart_atcomo espectador da rodada; o gate de fim passa a ignorar espectadores, então um retardatário não prende mais a sala.SpectatorView(banner "Partida em andamento" + pista ao vivo + chat) e entra automaticamente na próxima rodada.feat(multiplayer): entrada após o início vira espectador — congela a …
merge origin/main into #64: reencosta o espectador na main atual
fix(#64): rede de seguranca — lider encerra se so restam espectadores
feat(multiplayer): entrada após o início vira espectador — congela a …