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
|
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,
|
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
|
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
|
## 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
|
- Brouillard, lumière directionnelle et particules de la scène de test
|
||||||
actuelle sont conservés et réglés par site.
|
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
|
## 8. Architecture proposée
|
||||||
|
|
||||||
| Couche | Élément | Responsabilité |
|
| 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/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/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/` | `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 |
|
| `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 |
|
| `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 |
|
| `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
|
2. `BathymetricTerrainActor` avec tuiles, collision et matériau sonar par
|
||||||
position ; migration de l'environnement de test sur une fixture.
|
position ; migration de l'environnement de test sur une fixture.
|
||||||
3. Script de cuisson et première cuisson du Banc du Vigilant (graybox) ;
|
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.
|
4. Shader triplanaire et props bornés.
|
||||||
5. Points d'injection pour les trois épaves et le navire (les épaves
|
5. Points d'injection pour les trois épaves et le navire (les épaves
|
||||||
elles-mêmes appartiennent au reste de la tranche 3).
|
elles-mêmes appartiennent au reste de la tranche 3).
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ func evaluate(position_m: Vector3) -> PlayableBoundsStatus:
|
|||||||
var direction := Vector3.ZERO
|
var direction := Vector3.ZERO
|
||||||
if state != PlayableBoundsStatus.State.INSIDE:
|
if state != PlayableBoundsStatus.State.INSIDE:
|
||||||
var centre := _bounds_m.get_center()
|
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:
|
if distance == to_west or distance == to_east:
|
||||||
toward = Vector2(signf(centre.x - point.x), 0.0)
|
toward = Vector2(signf(centre.x - point.x), 0.0)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ var _placeholder_count := 0
|
|||||||
|
|
||||||
|
|
||||||
func configure(definition: DiveSiteDefinition) -> String:
|
func configure(definition: DiveSiteDefinition) -> String:
|
||||||
|
if _terrain == null or _placements_root == null:
|
||||||
|
return "dive site is not in the scene tree"
|
||||||
if definition == null:
|
if definition == null:
|
||||||
return "dive site definition is missing"
|
return "dive site definition is missing"
|
||||||
var field := definition.height_field()
|
var field := definition.height_field()
|
||||||
|
|||||||
Reference in new issue
Block a user