109 lines
3.8 KiB
Markdown
109 lines
3.8 KiB
Markdown
# Migration vers DataModels pour BoL
|
|
|
|
## Vue d'ensemble
|
|
|
|
Cette migration transforme le système BoL (Barbarians of Lemuria) pour utiliser les DataModels de Foundry VTT v12+, à l'instar des systèmes `fvtt-cthulhu-eternal` et `fvtt-mournblade`.
|
|
|
|
## Structure des fichiers
|
|
|
|
### Nouveaux fichiers créés
|
|
|
|
```
|
|
module/models/
|
|
├── _module.mjs # Fichier d'export principal
|
|
├── character.mjs # DataModel pour les personnages
|
|
├── encounter.mjs # DataModel pour les rencontres
|
|
├── horde.mjs # DataModel pour les hordes
|
|
├── vehicle.mjs # DataModel pour les véhicules
|
|
├── item.mjs # DataModel pour les items
|
|
└── feature.mjs # DataModel pour les features
|
|
```
|
|
|
|
### Fichier modifié
|
|
|
|
- `module/bol.js` : Ajout de l'import des DataModels et configuration de `CONFIG.Actor.dataModels` et `CONFIG.Item.dataModels`
|
|
|
|
## Changements apportés
|
|
|
|
### 1. Structure Actor
|
|
|
|
Le template.json définissait 4 types d'acteurs :
|
|
- **character** : Personnages joueurs
|
|
- **encounter** : PNJ/Créatures
|
|
- **horde** : Groupes de créatures
|
|
- **vehicle** : Véhicules
|
|
|
|
Chaque type a maintenant son propre DataModel dans `/module/models/`.
|
|
|
|
### 2. Structure Item
|
|
|
|
Le template.json définissait 2 types d'items :
|
|
- **item** : Objets/équipements
|
|
- **feature** : Capacités/traits
|
|
|
|
Chaque type a son DataModel correspondant.
|
|
|
|
### 3. Migration des templates
|
|
|
|
Les templates du template.json ont été convertis en champs de DataModel :
|
|
- `base` → Intégré directement dans chaque DataModel
|
|
- `equipment` → Intégré dans le DataModel `item`
|
|
|
|
### 4. Utilisation de foundry.data.fields
|
|
|
|
Tous les champs utilisent désormais les types de champs standard de Foundry :
|
|
- `StringField` pour les chaînes
|
|
- `NumberField` pour les nombres (avec option `integer: true` pour les entiers)
|
|
- `BooleanField` pour les booléens
|
|
- `HTMLField` pour le HTML enrichi
|
|
- `ArrayField` pour les tableaux
|
|
- `SchemaField` pour les objets imbriqués
|
|
|
|
## Avantages de la migration
|
|
|
|
1. **Validation automatique** : Les DataModels valident automatiquement les données
|
|
2. **Performance** : Meilleure gestion de la mémoire et des calculs dérivés
|
|
3. **Typage** : Support TypeScript amélioré
|
|
4. **Maintenance** : Code plus structuré et maintenable
|
|
5. **Compatibilité** : Aligné sur les standards Foundry VTT v12+
|
|
|
|
## Points d'attention
|
|
|
|
### Compatibilité ascendante
|
|
|
|
Le template.json reste en place pour assurer la compatibilité avec les données existantes. Les DataModels utilisent la même structure de données.
|
|
|
|
### Accès aux données
|
|
|
|
**Avant (avec template.json seul)** :
|
|
```javascript
|
|
actor.system.attributes.vigor.value
|
|
```
|
|
|
|
**Après (avec DataModels)** :
|
|
```javascript
|
|
actor.system.attributes.vigor.value // Identique !
|
|
```
|
|
|
|
### Calculs dérivés
|
|
|
|
Les DataModels permettent d'ajouter facilement des méthodes `prepareDerivedData()` pour calculer automatiquement des valeurs dérivées. Voir exemple dans `fvtt-cthulhu-eternal/module/models/protagonist.mjs`.
|
|
|
|
## Prochaines étapes recommandées
|
|
|
|
1. **Ajouter prepareDerivedData()** : Pour calculer automatiquement les valeurs dérivées (HP max, initiative, etc.)
|
|
2. **Migrer les méthodes métier** : Déplacer la logique métier depuis `actor.js` vers les DataModels
|
|
3. **Supprimer template.json** : Une fois la migration complètement testée
|
|
4. **Ajouter des validations** : Utiliser les validateurs des DataFields
|
|
5. **Documentation JSDoc** : Documenter les DataModels pour le développement
|
|
|
|
## Référence
|
|
|
|
### Exemples utilisés
|
|
- **fvtt-cthulhu-eternal** : Structure de DataModels complexes avec logique métier
|
|
- **fvtt-mournblade** : Organisation simple et claire des DataModels
|
|
|
|
### Documentation Foundry
|
|
- [DataModel API](https://foundryvtt.com/api/classes/foundry.abstract.DataModel.html)
|
|
- [Data Fields](https://foundryvtt.com/api/modules/foundry.data.fields.html)
|