feat(ecology): F4 — natural nodes over AoI + protocol bump (20) #256
No reviewers
Labels
No labels
alpha:wave-0
alpha:wave-1
alpha:wave-2
alpha:wave-3
area:assets
area:combat
area:ecology
area:infra
area:render
area:scripting
area:ui
area:world
enhancement
epic
migration
post-alpha
roadmap
tech-debt
type:bug
type:chore
type:design
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
marco/IsoMmo!256
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/ecology-f4"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
F4 of the ecology foundation (epic #250, slice #251; on F1 #252 + F2 #253 + F3a #254): natural nodes now travel to clients over the area of interest. A player near a materialized chunk receives its pine/rock nodes — spawn on enter AoI, remove on leave — the spawner generating each chunk lazily on first observation.
Shared/Protocol):NaturalNodeStateDTO +NaturalNodeSpawned/NaturalNodeRemovedmessages;ProtocolVersion19 → 20.WorldTick, per observer per tick, callsWorld.EnsureChunksInView(lazy generation of the AoI's chunks) then reconciles nearby nodes viaInterestManager— exactly the ground-item path (id-keyed enter/left, from authoritative anchor cells, only withinAoiRadius). Server reads:NaturalNodeRegistry.Within/StatesWithin,EcologySpawner.EnsureChunksInView(World.csstays delegation-only).ClientWorld.Nodesvia two dispatcher cases — no rendering (that is F5).Owner-agreed deferrals:
NaturalNodeChanged→ the harvest slice (baseline stages are terminal, so no node changes stage in F4); the big-node AoI rule → with multi-cell footprint (F4 nodes are 1×1).⚠️ Follow-up surfaced by the review — nodes are not yet physical (issue #255)
F4 transports each node's
BlocksWalk/BlocksSight, but movement + line-of-sight still consult only the map, never the node registry — so a tree is walk-through/see-through server-side. Harmless while nodes are invisible, but due before F5 renders them. Tracked as #255 and flagged indocs/architecture.md.How it was tested
NaturalNodeRegistry.Within;EcologySpawner.EnsureChunksInView(AoI chunk coverage) +World.NaturalNodesWithin;InterestManagernode reconcile (entered-once / left-on-leave).CreateWebSocketClient): a player seeded on a real all-grass field connects and receives aNaturalNodeSpawnedwith the pine art (snowy_pine, blocks) — a genuine end-to-end AoI assertion (the legacy map's spawn is a redwood biome, so the test targets a verified grass patch; deterministic, not flaky).check-doc-refsresolves; fulldotnet testgreen (GameServer.Tests 340, Shared 177, Client.Core 194, …).Screenshots: N/A — nodes are stored client-side but not drawn (render is F5). First visible nodes come after F5 (and after the collision follow-up #255).
Checklist
just lint(CSharpier + analyzers, 0 warnings)just testgreen (whole solution)check-doc-refsgreenProtocolVersionbumped in the same change (20)World.csdelegation-only; single-threaded;InterestManagernode set under its lock