Blocos com formato e estado #18

Closed
opened 2026-10-03 20:53:26 -03:00 by caio · 1 comment
Owner

Objetivo

Preparar o motor para blocos que nao sao cubos inteiros e que guardam estado (porta aberta, direcao), sem aumentar a memoria dos chunks.

O que vou aprender

  • Enums com dados em Rust e como empacotar o estado de um bloco em um unico byte
  • Caixas de colisao por bloco: colisao AABB contra caixas menores que 1x1x1, pelo metodo de "recortar" o movimento em cada eixo
  • Raycast contra caixas: o DDA acha o voxel e o teste de raio contra caixa (slab method) confirma o acerto
  • Malha de caixas com UV proporcional, para a textura nao esticar
  • A diferenca entre um bloco solido (colide), opaco (esconde o vizinho) e selecionavel (a mira para nele)

Tarefas

  • Bloco vira um enum com dados, guardado no chunk como um numero de 1 byte
  • Os numeros dos blocos antigos nao mudam: os saves continuam abrindo
  • Bloco::caixa() com o formato de cada bloco, e a colisao do jogador usando essas caixas
  • Raycast testando a caixa do bloco, com a normal da face atingida
  • Malha de blocos que nao sao cubos, com faces sempre desenhadas
  • Hotbar com 13 espacos para caber os blocos novos (1 a 9, 0 e a roda do mouse)

Pronto quando

Todos os testes de colisao e raycast continuam passando e existem testes com caixas menores que um bloco.

## Objetivo Preparar o motor para blocos que nao sao cubos inteiros e que guardam estado (porta aberta, direcao), sem aumentar a memoria dos chunks. ## O que vou aprender - Enums com dados em Rust e como empacotar o estado de um bloco em um unico byte - Caixas de colisao por bloco: colisao AABB contra caixas menores que 1x1x1, pelo metodo de "recortar" o movimento em cada eixo - Raycast contra caixas: o DDA acha o voxel e o teste de raio contra caixa (slab method) confirma o acerto - Malha de caixas com UV proporcional, para a textura nao esticar - A diferenca entre um bloco solido (colide), opaco (esconde o vizinho) e selecionavel (a mira para nele) ## Tarefas - [ ] `Bloco` vira um enum com dados, guardado no chunk como um numero de 1 byte - [ ] Os numeros dos blocos antigos nao mudam: os saves continuam abrindo - [ ] `Bloco::caixa()` com o formato de cada bloco, e a colisao do jogador usando essas caixas - [ ] Raycast testando a caixa do bloco, com a normal da face atingida - [ ] Malha de blocos que nao sao cubos, com faces sempre desenhadas - [ ] Hotbar com 13 espacos para caber os blocos novos (1 a 9, 0 e a roda do mouse) ## Pronto quando Todos os testes de colisao e raycast continuam passando e existem testes com caixas menores que um bloco.
caio added this to the Blocos especiais milestone 2026-10-03 20:53:26 -03:00
Author
Owner

Implementado em main.

A hotbar com 13 espaços ficou fora desta issue: ela cresce junto com os blocos novos, em #19 a #22. Assim nenhum commit deixa código sem uso.

O tipo Caixa em src/mundo/caixa.rs concentra a matemática nova (recortar o movimento e o raio contra caixa) e é testado com caixas finas, como a de uma porta, mesmo antes de existir um bloco assim.

Implementado em main. A hotbar com 13 espaços ficou fora desta issue: ela cresce junto com os blocos novos, em #19 a #22. Assim nenhum commit deixa código sem uso. O tipo `Caixa` em `src/mundo/caixa.rs` concentra a matemática nova (recortar o movimento e o raio contra caixa) e é testado com caixas finas, como a de uma porta, mesmo antes de existir um bloco assim.
caio closed this issue 2026-10-03 21:01:45 -03:00
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
caio/simple-minecraft-rust#18
No description provided.