chore(sites): small cleanups and brief alignment
Drop a dead initial value in PlayableBoundsRule, guard DiveSite.configure() when called before the node is in the tree, and align the zone 1 brief with what was built: generic dive_site.tscn, the resolved collision check, and the graybox shader deviation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4470450dfd
commit
d1a94f05b1
3 files changed
+14
-4
No files matched your search
@@ -51,7 +51,9 @@ négatif. Si c'est confirmé, la collision actuelle est le terrain visuel
|
||||
retourné avant/arrière, et le sonar scanne la collision, pas le maillage. Les
|
||||
tests d'intégration ne le détecteraient pas (ils comptent des échantillons,
|
||||
pas une forme). Le nouvel acteur terrain doit avoir un test qui compare
|
||||
hauteur visuelle et hauteur de collision en quelques points.
|
||||
hauteur visuelle et hauteur de collision en quelques points. Résolu : l'acteur
|
||||
terrain compare collision et champ de hauteur dans
|
||||
`tests/integration/run_site_terrain_integration.gd`.
|
||||
|
||||
## 3. Partis pris de réalisme
|
||||
|
||||
@@ -241,6 +243,11 @@ de contacts existant les sépare du fond.
|
||||
- Brouillard, lumière directionnelle et particules de la scène de test
|
||||
actuelle sont conservés et réglés par site.
|
||||
|
||||
**Écart d'implémentation (graybox)** : le shader livré n'est pas triplanaire.
|
||||
Il mélange sable et roche par la pente à partir de 20° (sable sous 20°, roche
|
||||
au-dessus de 40°, fondu entre ; le matériau sonar bascule à 20°) et rend les
|
||||
rides par modulation d'albédo, sans normal map. À revoir en tranche 6.
|
||||
|
||||
## 8. Architecture proposée
|
||||
|
||||
| Couche | Élément | Responsabilité |
|
||||
@@ -249,7 +256,7 @@ de contacts existant les sépare du fond.
|
||||
| `game/domain/sites/` | `TerrainHeightField` (RefCounted pur) | lecture de hauteur et de matériau à une position, conversion monde ↔ cellule, bornes ; testable sans scène |
|
||||
| `game/application/sites/` | `PlayableBoundsRule` | « hors zone » comme résultat typé depuis la télémétrie ; émet un avertissement, jamais un mur |
|
||||
| `game/world/sites/` | `BathymetricTerrainActor` | construit tuiles, collision et matériau depuis la définition ; expose matériau sonar par position |
|
||||
| `game/world/sites/` | `dive_site_zone1.tscn` | scène du site : terrain, environnement, points d'injection pour épaves et navire |
|
||||
| `game/world/sites/` | `dive_site.tscn` (générique, configurée par une `DiveSiteDefinition`) | scène de site : terrain, environnement, points d'injection pour épaves et navire |
|
||||
| `game/composition/` | câblage | charge la définition, instancie le site, injecte la règle de bornes |
|
||||
| `content/sites/` | `zone1_vigilant.tres` + `zone1_vigilant_terrain.res` | données du site |
|
||||
| `tools/` (hors runtime) | script de cuisson | produit le `.res` depuis une description de primitives géomorphologiques ; déterministe, versionné, jamais appelé par le jeu |
|
||||
@@ -302,7 +309,8 @@ petite définition de site (fixture) comme le ferait le vrai site.
|
||||
2. `BathymetricTerrainActor` avec tuiles, collision et matériau sonar par
|
||||
position ; migration de l'environnement de test sur une fixture.
|
||||
3. Script de cuisson et première cuisson du Banc du Vigilant (graybox) ;
|
||||
bornes jouables ; scène `dive_site_zone1.tscn`.
|
||||
bornes jouables ; scène générique `dive_site.tscn` configurée par une
|
||||
`DiveSiteDefinition`.
|
||||
4. Shader triplanaire et props bornés.
|
||||
5. Points d'injection pour les trois épaves et le navire (les épaves
|
||||
elles-mêmes appartiennent au reste de la tranche 3).
|
||||
|
||||
@@ -29,7 +29,7 @@ func evaluate(position_m: Vector3) -> PlayableBoundsStatus:
|
||||
var direction := Vector3.ZERO
|
||||
if state != PlayableBoundsStatus.State.INSIDE:
|
||||
var centre := _bounds_m.get_center()
|
||||
var toward := Vector2(centre.x - point.x, centre.y - point.y)
|
||||
var toward: Vector2
|
||||
if distance == to_west or distance == to_east:
|
||||
toward = Vector2(signf(centre.x - point.x), 0.0)
|
||||
else:
|
||||
|
||||
@@ -19,6 +19,8 @@ var _placeholder_count := 0
|
||||
|
||||
|
||||
func configure(definition: DiveSiteDefinition) -> String:
|
||||
if _terrain == null or _placements_root == null:
|
||||
return "dive site is not in the scene tree"
|
||||
if definition == null:
|
||||
return "dive site definition is missing"
|
||||
var field := definition.height_field()
|
||||
|
||||
Reference in new issue
Block a user