27 lines
1.5 KiB
Markdown
27 lines
1.5 KiB
Markdown
|
|
# Chessistics
|
||
|
|
|
||
|
|
Jeu de logistique sur echiquier en Godot 4 / C#. Le joueur place des pieces d'echecs sur un plateau ; elles se deplacent automatiquement et transportent des ressources entre des productions et des demandes.
|
||
|
|
|
||
|
|
## Architecture : Black-Box Simulation
|
||
|
|
|
||
|
|
Ref: https://samuel-bouchet.fr/posts/2026-04-08-black-box-sim/
|
||
|
|
|
||
|
|
Le moteur de jeu (`chessistics-engine/`) est une boite noire sans aucune dependance vers Godot. Il recoit des **Commands**, mute son etat interne, et retourne des **Events**. Le code Godot (`Scripts/`) ne fait que traduire l'input en commands et les events en visuels/animations.
|
||
|
|
|
||
|
|
```
|
||
|
|
Input → Command → GameSim (state + rules) → Events → Presentation
|
||
|
|
```
|
||
|
|
|
||
|
|
- **Commands** (`PlacePieceCommand`, `StartSimulationCommand`, …) : seul moyen de modifier l'etat.
|
||
|
|
- **Events** (`PiecePlacedEvent`, `CargoDeliveredEvent`, …) : seul output du moteur. Le presenteur les consomme pour animer.
|
||
|
|
- **GameSim** : point d'entree unique. `ProcessCommand()` retourne la liste d'events.
|
||
|
|
- **Tests** : `chessistics-tests/` teste le moteur en headless, sans Godot.
|
||
|
|
|
||
|
|
## Pieges Godot a eviter
|
||
|
|
|
||
|
|
### MouseFilter sur les Controls enfants de Node2D
|
||
|
|
|
||
|
|
Tout `Control` (ColorRect, Label…) a `MouseFilter = Stop` par defaut. Quand un Control est enfant d'un Node2D (ex: les ColorRect dans CellView, les Labels dans PieceView), **il participe quand meme au systeme GUI et consomme les clics**, empechant `_UnhandledInput` de recevoir l'evenement.
|
||
|
|
|
||
|
|
**Regle** : toujours mettre `MouseFilter = Control.MouseFilterEnum.Ignore` sur les Controls purement visuels enfants de Node2D.
|