refine runtime navmesh contracts and plan

This commit is contained in:
Alexander Borisov
2026-04-08 02:39:17 +03:00
parent 6227542d2d
commit 4e1cf273fa
3 changed files with 59 additions and 31 deletions
@@ -100,6 +100,7 @@
Последствия:
- каноничность gameplay не должна зависеть от клиентского NavMesh
- client NavMesh используется для локальных потребностей, но authoritative decisions по NPC остаются у хоста
- при одинаковом world state peers должны приходить к функционально эквивалентной walkable topology, но NavMesh не считается protocol-grade bit-identical артефактом, от которого зависит correctness multiplayer state
### 5. Будущие изменения проходимости мира передаются как authoritative world deltas
@@ -140,11 +141,12 @@
- rebuild должен быть incremental, throttled и bounded
- полносценовый bake вокруг камеры не подходит как каноническая модель
### 7. Первая итерация NavMesh покрывает область вокруг player actor, но долгосрочный контракт расширяется до players + active NPC
### 7. Первая итерация NavMesh может приоритизировать одного player actor, но внешний interest-контракт сразу задается как actor set
Решение:
- для первой проверки гипотезы build priority привязывается к player actor
- целевой контракт для multiplayer host: nav coverage должна учитывать игроков и активных NPC
- для первой проверки гипотезы scheduler может стартовать от одного player actor
- внешний reader/read-model контракт не должен жестко фиксировать single-point модель
- целевой контракт для multiplayer host: nav coverage должна учитывать игроков и активных NPC как actor-level interest set
Почему выбрано:
- это минимальный объем для MVP-проверки без ранней переплаты за сложную interest model
@@ -158,6 +160,7 @@
Последствия:
- в коде нельзя оставлять `Camera.main` как канонический источник world/nav interest
- target должен представлять actor-level interest, а не presentation-level camera
- reader-контракт для интереса должен уметь вернуть один или несколько actor-level interest points; даже если первая scene wiring временно дает только один player actor, это не должно цементироваться во внешний API
### 8. Для MVP поддерживается один тип NavMesh agent
@@ -219,9 +222,10 @@
- `VoxelWorldGenerator` пока содержит private nested types и внутренние детали, которые нельзя делать частью внешнего API
Последствия:
- нужны contracts для `IChunkNavGeometryReader` и `IWorldInterestReader`
- нужны query contracts для чтения актуальных nav build sources чанков и actor-level interest set, например `IChunkNavSourceReader` и `IWorldInterestReader`
- нужны message types для `ChunkNavGeometryReady`, `ChunkNavGeometryRemoved` и `WorldInterestChanged`
- `GlobalMessagePipe` не считается канонической точкой интеграции для feature-кода
- world-to-navmesh contracts не должны делать `Transform`, `MeshCollider` и `BoxCollider` каноническим внешним состоянием там, где достаточно узких source descriptors для build/invalidation
## Long-Term Risks