feat(client): render the chunked asterra world in-game (7b of #229) #236

Merged
panda merged 1 commit from feat/client-chunked-world into main 2026-08-01 12:27:17 +02:00
Collaborator

Summary

Fase 7b di #229: il client ora rende asterra in-game — il mondo chunked disegnato a mano (13.344×9.984 = 133.226.496 celle) — al posto della vecchia content/maps/world.map testuale. Chiude la parte "si vede in-game" dopo che 7a ha portato il server su asterra.

Cosa cambia (client):

  • IsoGame fa warm-load di asterra in una CompactWorldMap (riuso del codice testato in 7a), dietro IReadOnlyTileMap. I renderer (GridRenderer/GroundBlendRenderer/ScreenProjection) e ClientContext.Map passano da TileMap concreto → IReadOnlyTileMap.
  • I renderer già finestrano (IsoViewport.VisibleCellBounds): la mappa intera vive in RAM (~127 MiB, asterra è piatta → niente sidecar Z) ma si disegna solo la finestra attorno al player. Un loader a chunk-streaming resterà un drop-in dietro l'interfaccia, senza toccare i renderer.
  • Sorgente scelta come sul server: default worlds/asterra, override dev --world <path> o ISOMMO_WORLD (vuoto = vecchia text-map piccola).
  • Il .csproj client copia content/worlds/** nell'output.
  • Nessun cambio di wire-shape → nessun bump di ProtocolVersion (l'handshake mappa/catalogo è la slice 7c). Client e server caricano lo stesso contenuto committato → coincidono per costruzione.

Screenshots / recording

Catturati pilotando il client dall'harness DebugHarness (:5199) su DB fresco, come da docs/debug-harness.md.

Spawn su asterra (5183,4378): il player sulla costa disegnata a mano — erba a ovest/sud, oceano a nord/est, blend SDF morbido; i 5 item seed attorno.

Spawn su asterra (5183,4378)

La linea di costa/baia disegnata a mano attorno allo spawn (5182,4379).

La linea di costa/baia disegnata a mano attorno allo spawn (5182,4379).

Entroterra a (5156,4405) dopo un goto server-validato: massa continentale profonda, quasi tutta terra.

Entroterra a (5156,4405) dopo un goto server-validato

Comandi: login test → spawn su asterra (5183,4378); goto 5156 4405 (entroterra, passi validati dal server); screenshot.

How it was tested

  • Screenshot piloti (sopra): il player nasce su asterra e si muove sul continente; ogni passo è MoveRequest validato server-side.
  • Gate locali: build dell'intera soluzione 0 warning, 732 test verdi, CSharpier pulito.
  • Nessun test unitario nuovo necessario (la resa non è unit-testata); la logica finestra è già coperta in Client.Core (IsoViewport).

Checklist

  • just lint passes (CSharpier + analyzers, zero warnings)
  • just test is green
  • The whole solution builds (client and tools included)
  • Multi-platform preserved (server on Win/macOS/Linux, client on Win/macOS)
  • Tests added/updated for this change — N/A (rendering; window logic already covered in Client.Core)
  • Linked the related issue (if any) and its Definition of Done is met

Epic: #229 · segue #235 (7a).

## Summary Fase 7b di #229: il client ora **rende asterra in-game** — il mondo chunked disegnato a mano (13.344×9.984 = 133.226.496 celle) — al posto della vecchia `content/maps/world.map` testuale. Chiude la parte "si vede in-game" dopo che 7a ha portato il server su asterra. Cosa cambia (client): - `IsoGame` fa **warm-load** di asterra in una `CompactWorldMap` (riuso del codice testato in 7a), dietro `IReadOnlyTileMap`. I renderer (`GridRenderer`/`GroundBlendRenderer`/`ScreenProjection`) e `ClientContext.Map` passano da `TileMap` concreto → `IReadOnlyTileMap`. - I renderer **già finestrano** (`IsoViewport.VisibleCellBounds`): la mappa intera vive in RAM (~127 MiB, asterra è piatta → niente sidecar Z) ma si disegna solo la finestra attorno al player. Un loader a chunk-streaming resterà un drop-in dietro l'interfaccia, senza toccare i renderer. - Sorgente scelta come sul server: default `worlds/asterra`, override dev `--world <path>` o `ISOMMO_WORLD` (vuoto = vecchia text-map piccola). - Il `.csproj` client copia `content/worlds/**` nell'output. - **Nessun cambio di wire-shape → nessun bump di `ProtocolVersion`** (l'handshake mappa/catalogo è la slice 7c). Client e server caricano lo stesso contenuto committato → coincidono per costruzione. ## Screenshots / recording Catturati pilotando il client dall'harness `DebugHarness` (:5199) su **DB fresco**, come da `docs/debug-harness.md`. Spawn su asterra (5183,4378): il player sulla costa disegnata a mano — erba a ovest/sud, oceano a nord/est, blend SDF morbido; i 5 item seed attorno. ![Spawn su asterra (5183,4378)](https://git.homelab.devncode.it/attachments/823cbaff-ae28-4bec-95be-e57cb404f9c5) La linea di costa/baia disegnata a mano attorno allo spawn (5182,4379). ![La linea di costa/baia disegnata a mano attorno allo spawn (5182,4379).](https://git.homelab.devncode.it/attachments/482e7605-7393-4cf6-ab67-8d268bf36b43) Entroterra a (5156,4405) dopo un goto server-validato: massa continentale profonda, quasi tutta terra. ![Entroterra a (5156,4405) dopo un goto server-validato](https://git.homelab.devncode.it/attachments/5bd1d64b-295b-4d1f-88fa-3e6768f26de7) Comandi: `login test` → spawn su asterra `(5183,4378)`; `goto 5156 4405` (entroterra, passi validati dal server); `screenshot`. ## How it was tested - **Screenshot piloti** (sopra): il player nasce su asterra e si muove sul continente; ogni passo è `MoveRequest` validato server-side. - **Gate locali**: build dell'intera soluzione **0 warning**, **732 test verdi**, CSharpier pulito. - Nessun test unitario nuovo *necessario* (la resa non è unit-testata); la logica finestra è già coperta in `Client.Core` (`IsoViewport`). ## Checklist - [x] `just lint` passes (CSharpier + analyzers, zero warnings) - [x] `just test` is green - [x] The whole solution builds (client and tools included) - [x] Multi-platform preserved (server on Win/macOS/Linux, client on Win/macOS) - [x] Tests added/updated for this change — N/A (rendering; window logic already covered in Client.Core) - [x] Linked the related issue (if any) and its Definition of Done is met Epic: #229 · segue #235 (7a).
feat(client): render the chunked asterra world in-game (7b of #229)
All checks were successful
ci / Lua content lint (pull_request) Successful in 54s
ci / Lint & Test (pull_request) Successful in 10m38s
1885612a53
panda merged commit 4e511c1802 into main 2026-08-01 12:27:17 +02:00
panda deleted branch feat/client-chunked-world 2026-08-01 12:27:17 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
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
marco/IsoMmo!236
No description provided.