gap: you cannot find out what a navigation mark is #229

Open
viberfox-agent wants to merge 1 commit from feat/214-nav-marks-readout into main
Collaborator

Closes #214

Merged by the autopilot (docs/direction.md) after every Actions job passed on the branch head.

Closes #214 Merged by the autopilot (docs/direction.md) after every Actions job passed on the branch head.
feat(nav-marks): name a buoy you walk up to, and give it its own row
All checks were successful
CI / test cartopolis (pull_request) Successful in 12m30s
CI / wasm & android targets (pull_request) Has been skipped
6a77c908c1
The client drew every buoy and beacon on the Dutch waterways with the
right shape, band pattern, topmark and lantern colour, and then dropped
every word that said what one was: `read_feature` kept the geometry and
discarded `benaming`, `vaarwater` and `naut_funct`, `MarkCell` carried a
tuple with no room for them, and the whole cell was merged into the
Furniture group's mesh and dropped. A player looking at a red can had no
way to ask what it is — nothing to click, nothing to walk up to, and no
row in the Layers panel except "Street furniture", which is not where
anybody looks for a buoy.

The register's words now travel with the mark. `MarkRecord` replaces the
tuple and carries the three properties through the cache, each read
through the same `is_absent` filter the rest of the parse uses — the
register writes absence three ways in the words too, and `X` taken for a
name puts "Look at X" on the water. `naut_funct` is kept verbatim beside
the `FixedForm` it is also parsed into: that parse collapses fourteen
register values into three drawable posts, which is right for geometry
and throws away exactly what a reader wants.

**The cache key goes v1 → v2 with them.** `load_marks_cell` returns a
cached cell unconditionally, so without the bump every cell somebody had
already visited would decode with empty names and never be re-fetched —
permanently nameless marks in precisely the places they had been.

A mark then becomes an `Interactable`, and the readout is the proximity
prompt rather than the HUD's address line. That line cannot carry it: it
is one truncated row whose count the HUD's own size test bounds, and it
is fed by a chain in which the BAG address wins and the fallback only
runs when there is none — on the Waalkade a quay building is inside
`ADDRESS_RADIUS`, so a mark line there would be shadowed in the exact
spot somebody would stand to look at one.

Two numbers in it are chosen rather than inherited. `MARK_RADIUS` is
35 m, ten times what everything else is offered from, because a mark
stands in the fairway and the avatar walks the bank — at two paces the
only way to reach one is to fly out over the water. It is a property of
the object (`Interactable::reach`, filtered per candidate inside
`nearest`), so nothing else widens with it and nearest still wins. And
the glyph is `icons::FLAG`, reused: the bundled subset has no buoy and
no anchor, and a codepoint outside it renders as a tofu box.

The Layers panel gains **Navigation marks** indented under Street
furniture and greyed out with it, on the same terms 3DBAG sits under
Buildings — marks are built into that group's mesh and carry its
visibility, so an independent row would build geometry the group then
hides. The mirror rides on `FurnitureLod::marks` because
`update_map_surfaces`, its only reader, is at Bevy's 16-parameter
ceiling.

`ShotMetrics::nav_marks_named` is the pair to `nav_marks`, on the model
of `lod22_dated`/`lod22_elements`: marks arriving with no words is
invisible in a capture, because a nameless buoy draws exactly like a
named one.

Not verified on a screen: whether 35 m is the right reach — the one
number here chosen by precedent rather than measured — and whether the
flag glyph reads as a navigation mark beside the bench and café ones.

Refs #214
All checks were successful
CI / test cartopolis (pull_request) Successful in 12m30s
CI / wasm & android targets (pull_request) Has been skipped
This pull request has changes conflicting with the target branch.
  • crates/cartopolis/src/systems/dev/shot_harness.rs
  • crates/cartopolis/src/systems/map/map_geometry.rs
  • crates/cartopolis/src/systems/map/nav_marks.rs
  • crates/cartopolis/src/systems/map/world_places.rs
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/214-nav-marks-readout:feat/214-nav-marks-readout
git switch feat/214-nav-marks-readout

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff feat/214-nav-marks-readout
git switch feat/214-nav-marks-readout
git rebase main
git switch main
git merge --ff-only feat/214-nav-marks-readout
git switch feat/214-nav-marks-readout
git rebase main
git switch main
git merge --no-ff feat/214-nav-marks-readout
git switch main
git merge --squash feat/214-nav-marks-readout
git switch main
git merge --ff-only feat/214-nav-marks-readout
git switch main
git merge feat/214-nav-marks-readout
git push origin main
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
jeroen/cartopolis!229
No description provided.