Datamodel + Appv2 migration, WIP
This commit is contained in:
@@ -1,223 +0,0 @@
|
|||||||
# Guide d'utilisation des DataModels BoL
|
|
||||||
|
|
||||||
## Exemples d'utilisation
|
|
||||||
|
|
||||||
### Accès aux données d'un acteur
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// Character
|
|
||||||
const character = game.actors.getName("Mon Héros");
|
|
||||||
console.log(character.system.attributes.vigor.value);
|
|
||||||
console.log(character.system.resources.hp.value);
|
|
||||||
console.log(character.system.xp.total);
|
|
||||||
|
|
||||||
// Encounter
|
|
||||||
const npc = game.actors.getName("Gobelin");
|
|
||||||
console.log(npc.system.chartype); // "tough"
|
|
||||||
console.log(npc.system.isundead);
|
|
||||||
|
|
||||||
// Horde
|
|
||||||
const horde = game.actors.getName("Horde de Zombies");
|
|
||||||
console.log(horde.system.hordesize);
|
|
||||||
console.log(horde.system.hasdamagerule);
|
|
||||||
|
|
||||||
// Vehicle
|
|
||||||
const ship = game.actors.getName("Navire Pirate");
|
|
||||||
console.log(ship.system.attributes.hull.value);
|
|
||||||
console.log(ship.system.vehicletype); // "boat"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Accès aux données d'un item
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// Item (équipement)
|
|
||||||
const sword = game.items.getName("Épée");
|
|
||||||
console.log(sword.system.properties.weapon);
|
|
||||||
console.log(sword.system.quantity);
|
|
||||||
console.log(sword.system.worn);
|
|
||||||
|
|
||||||
// Feature (capacité)
|
|
||||||
const trait = game.items.getName("Vision nocturne");
|
|
||||||
console.log(trait.system.rank);
|
|
||||||
console.log(trait.system.description);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Modification des données
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// Modifier les HP d'un personnage
|
|
||||||
await actor.update({
|
|
||||||
"system.resources.hp.value": 10
|
|
||||||
});
|
|
||||||
|
|
||||||
// Modifier plusieurs valeurs en une fois
|
|
||||||
await actor.update({
|
|
||||||
"system.attributes.vigor.value": 3,
|
|
||||||
"system.attributes.agility.value": 2,
|
|
||||||
"system.resources.hp.max": 15
|
|
||||||
});
|
|
||||||
|
|
||||||
// Modifier la quantité d'un item
|
|
||||||
await item.update({
|
|
||||||
"system.quantity": 5,
|
|
||||||
"system.worn": true
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
### Création d'acteurs avec DataModels
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// Créer un personnage
|
|
||||||
await Actor.create({
|
|
||||||
name: "Nouveau Héros",
|
|
||||||
type: "character",
|
|
||||||
system: {
|
|
||||||
chartype: "player",
|
|
||||||
attributes: {
|
|
||||||
vigor: { value: 2 },
|
|
||||||
agility: { value: 1 },
|
|
||||||
mind: { value: 0 },
|
|
||||||
appeal: { value: 1 }
|
|
||||||
},
|
|
||||||
resources: {
|
|
||||||
hp: { value: 10, max: 10 },
|
|
||||||
hero: { value: 5, max: 5 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Créer une horde
|
|
||||||
await Actor.create({
|
|
||||||
name: "Horde d'Orcs",
|
|
||||||
type: "horde",
|
|
||||||
system: {
|
|
||||||
hordesize: 20,
|
|
||||||
hordebasehp: 5,
|
|
||||||
attributes: {
|
|
||||||
vigor: { value: 2 },
|
|
||||||
agility: { value: 1 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
### Création d'items avec DataModels
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// Créer une arme
|
|
||||||
await Item.create({
|
|
||||||
name: "Hache de bataille",
|
|
||||||
type: "item",
|
|
||||||
system: {
|
|
||||||
category: "weapon",
|
|
||||||
quantity: 1,
|
|
||||||
properties: {
|
|
||||||
weapon: true,
|
|
||||||
melee: true,
|
|
||||||
"2H": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Créer un trait
|
|
||||||
await Item.create({
|
|
||||||
name: "Berserker",
|
|
||||||
type: "feature",
|
|
||||||
system: {
|
|
||||||
rank: 2,
|
|
||||||
category: "trait",
|
|
||||||
description: "<p>Rage au combat...</p>"
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Ajout de méthodes personnalisées (Évolution future)
|
|
||||||
|
|
||||||
Les DataModels permettent d'ajouter des méthodes personnalisées. Exemple à ajouter dans `character.mjs` :
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
export default class BoLCharacterDataModel extends foundry.abstract.TypeDataModel {
|
|
||||||
// ... defineSchema ...
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calcul automatique des données dérivées
|
|
||||||
*/
|
|
||||||
prepareDerivedData() {
|
|
||||||
super.prepareDerivedData();
|
|
||||||
|
|
||||||
// Calculer HP max basé sur Vigor
|
|
||||||
const hpMax = 10 + (this.attributes.vigor.value * 2);
|
|
||||||
if (this.resources.hp.max !== hpMax) {
|
|
||||||
this.resources.hp.max = hpMax;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculer la défense
|
|
||||||
const def = this.attributes.agility.value + this.aptitudes.def.value;
|
|
||||||
if (this.aptitudes.def.value !== def) {
|
|
||||||
this.aptitudes.def.value = def;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Vérifier si le personnage est KO
|
|
||||||
*/
|
|
||||||
isKnockedOut() {
|
|
||||||
return this.resources.hp.value <= 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Appliquer des dégâts
|
|
||||||
*/
|
|
||||||
async applyDamage(amount) {
|
|
||||||
const newHP = Math.max(0, this.resources.hp.value - amount);
|
|
||||||
await this.parent.update({
|
|
||||||
"system.resources.hp.value": newHP
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Validation des données
|
|
||||||
|
|
||||||
Les DataModels valident automatiquement les données :
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// ❌ Cette tentative échouera (vigor.value doit être un integer)
|
|
||||||
await actor.update({
|
|
||||||
"system.attributes.vigor.value": "trois" // Erreur !
|
|
||||||
});
|
|
||||||
|
|
||||||
// ✅ Valide
|
|
||||||
await actor.update({
|
|
||||||
"system.attributes.vigor.value": 3
|
|
||||||
});
|
|
||||||
|
|
||||||
// ❌ Cette tentative échouera (vigor.value max: 5)
|
|
||||||
await actor.update({
|
|
||||||
"system.attributes.vigor.value": 10 // Erreur si max est 5 !
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Migration des données existantes
|
|
||||||
|
|
||||||
Les données existantes (créées avec template.json) restent compatibles car la structure est identique. Aucune migration de données n'est nécessaire.
|
|
||||||
|
|
||||||
## Debugging
|
|
||||||
|
|
||||||
Pour inspecter la structure d'un DataModel :
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// Afficher le schéma du DataModel
|
|
||||||
console.log(game.bol.models.BoLCharacter.defineSchema());
|
|
||||||
|
|
||||||
// Afficher les données d'un acteur
|
|
||||||
const actor = game.actors.getName("Mon Héros");
|
|
||||||
console.log(actor.system); // Instance du DataModel
|
|
||||||
console.log(actor.system.toObject()); // Données brutes
|
|
||||||
```
|
|
||||||
|
|
||||||
## Ressources
|
|
||||||
|
|
||||||
- [Foundry DataModel Documentation](https://foundryvtt.com/api/classes/foundry.abstract.DataModel.html)
|
|
||||||
- [Data Fields Reference](https://foundryvtt.com/api/modules/foundry.data.fields.html)
|
|
||||||
- Exemples dans `fvtt-cthulhu-eternal` et `fvtt-mournblade`
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
FICHIERS CRÉÉS LORS DE LA MIGRATION DATAMODELS
|
|
||||||
===============================================
|
|
||||||
|
|
||||||
Date: 2026-01-12
|
|
||||||
Migration: template.json → DataModels
|
|
||||||
|
|
||||||
DATAMODELS (module/models/)
|
|
||||||
---------------------------
|
|
||||||
1. module/models/_module.mjs (322 octets) - Export principal
|
|
||||||
2. module/models/character.mjs (9.8 Ko) - DataModel Character
|
|
||||||
3. module/models/encounter.mjs (9.1 Ko) - DataModel Encounter
|
|
||||||
4. module/models/horde.mjs (9.2 Ko) - DataModel Horde
|
|
||||||
5. module/models/vehicle.mjs (2.4 Ko) - DataModel Vehicle
|
|
||||||
6. module/models/item.mjs (1.9 Ko) - DataModel Item
|
|
||||||
7. module/models/feature.mjs (708 octets) - DataModel Feature
|
|
||||||
8. module/models/README.md (3.1 Ko) - Documentation models/
|
|
||||||
|
|
||||||
DOCUMENTATION (racine)
|
|
||||||
----------------------
|
|
||||||
9. MIGRATION_DATAMODELS.md (3.8 Ko) - Guide migration
|
|
||||||
10. DATAMODELS_GUIDE.md (5.1 Ko) - Guide utilisation
|
|
||||||
11. MIGRATION_SUMMARY.md (5.8 Ko) - Résumé migration
|
|
||||||
12. FILES_CREATED.txt (ce fichier) - Liste fichiers
|
|
||||||
|
|
||||||
FICHIERS MODIFIÉS
|
|
||||||
-----------------
|
|
||||||
1. module/bol.js - Ajout import & config DataModels
|
|
||||||
|
|
||||||
TOTAL
|
|
||||||
-----
|
|
||||||
- 8 fichiers DataModels (.mjs)
|
|
||||||
- 4 fichiers documentation (.md, .txt)
|
|
||||||
- 1 fichier modifié (bol.js)
|
|
||||||
- ~664 lignes de code DataModels
|
|
||||||
- ~15 Ko de documentation
|
|
||||||
|
|
||||||
STRUCTURE
|
|
||||||
---------
|
|
||||||
bol/
|
|
||||||
├── module/
|
|
||||||
│ ├── models/
|
|
||||||
│ │ ├── _module.mjs ← Export
|
|
||||||
│ │ ├── character.mjs ← Actor: character
|
|
||||||
│ │ ├── encounter.mjs ← Actor: encounter
|
|
||||||
│ │ ├── horde.mjs ← Actor: horde
|
|
||||||
│ │ ├── vehicle.mjs ← Actor: vehicle
|
|
||||||
│ │ ├── item.mjs ← Item: item
|
|
||||||
│ │ ├── feature.mjs ← Item: feature
|
|
||||||
│ │ └── README.md
|
|
||||||
│ └── bol.js ← Modifié
|
|
||||||
├── MIGRATION_DATAMODELS.md
|
|
||||||
├── DATAMODELS_GUIDE.md
|
|
||||||
├── MIGRATION_SUMMARY.md
|
|
||||||
└── FILES_CREATED.txt
|
|
||||||
|
|
||||||
COMMANDES VÉRIFICATION
|
|
||||||
----------------------
|
|
||||||
# Vérifier syntaxe
|
|
||||||
node -c module/bol.js
|
|
||||||
for f in module/models/*.mjs; do node -c "$f"; done
|
|
||||||
|
|
||||||
# Compter lignes
|
|
||||||
wc -l module/models/*.mjs
|
|
||||||
|
|
||||||
# Lister fichiers
|
|
||||||
find module/models -type f
|
|
||||||
|
|
||||||
PROCHAINES ÉTAPES
|
|
||||||
-----------------
|
|
||||||
1. Tester dans Foundry VTT
|
|
||||||
2. Valider avec acteurs/items existants
|
|
||||||
3. Ajouter prepareDerivedData()
|
|
||||||
4. Migrer logique métier
|
|
||||||
5. Documenter avec JSDoc
|
|
||||||
|
|
||||||
FIN DE LA MIGRATION
|
|
||||||
-------------------
|
|
||||||
Status: ✅ SUCCÈS
|
|
||||||
Compatibilité: ✅ 100% rétrocompatible
|
|
||||||
Tests syntaxe: ✅ PASS
|
|
||||||
Documentation: ✅ Complète
|
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
# 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)
|
|
||||||
@@ -1,188 +0,0 @@
|
|||||||
# Résumé de la Migration DataModels BoL
|
|
||||||
|
|
||||||
## ✅ Migration effectuée avec succès
|
|
||||||
|
|
||||||
Date : 2026-01-12
|
|
||||||
|
|
||||||
### Fichiers créés
|
|
||||||
|
|
||||||
#### DataModels (7 fichiers, 664 lignes de code)
|
|
||||||
|
|
||||||
1. **module/models/_module.mjs** (6 exports)
|
|
||||||
- Point d'entrée principal pour tous les DataModels
|
|
||||||
|
|
||||||
2. **module/models/character.mjs** (241 lignes)
|
|
||||||
- DataModel pour les personnages joueurs
|
|
||||||
- Gestion complète des attributs, aptitudes, ressources, XP
|
|
||||||
|
|
||||||
3. **module/models/encounter.mjs** (231 lignes)
|
|
||||||
- DataModel pour les PNJ et créatures
|
|
||||||
- Ajout de : chartype, isundead, size, environment
|
|
||||||
|
|
||||||
4. **module/models/horde.mjs** (236 lignes)
|
|
||||||
- DataModel pour les hordes
|
|
||||||
- Ajout de : hordesize, hordebasehp, hasdamagerule, damagerule
|
|
||||||
|
|
||||||
5. **module/models/vehicle.mjs** (78 lignes)
|
|
||||||
- DataModel pour les véhicules
|
|
||||||
- Attributs : hull, crew, resources, row
|
|
||||||
- Champs : vehicletype, spur, status, description
|
|
||||||
|
|
||||||
6. **module/models/item.mjs** (53 lignes)
|
|
||||||
- DataModel pour les équipements/objets
|
|
||||||
- Propriétés : weapon, armor, magical, etc.
|
|
||||||
- Gestion : quantity, weight, price, worn
|
|
||||||
|
|
||||||
7. **module/models/feature.mjs** (28 lignes)
|
|
||||||
- DataModel pour les capacités/traits
|
|
||||||
- Champs : rank, category, subtype, description
|
|
||||||
|
|
||||||
#### Documentation (3 fichiers)
|
|
||||||
|
|
||||||
8. **MIGRATION_DATAMODELS.md**
|
|
||||||
- Guide complet de la migration
|
|
||||||
- Explication de la structure
|
|
||||||
- Avantages et points d'attention
|
|
||||||
- Prochaines étapes recommandées
|
|
||||||
|
|
||||||
9. **DATAMODELS_GUIDE.md**
|
|
||||||
- Guide d'utilisation pratique
|
|
||||||
- Exemples de code
|
|
||||||
- Création, modification, accès aux données
|
|
||||||
- Debugging et validation
|
|
||||||
|
|
||||||
10. **module/models/README.md**
|
|
||||||
- Documentation du dossier models
|
|
||||||
- Architecture et structure
|
|
||||||
- Types de champs utilisés
|
|
||||||
|
|
||||||
### Fichiers modifiés
|
|
||||||
|
|
||||||
1. **module/bol.js**
|
|
||||||
- Import des DataModels : `import * as models from "./models/_module.mjs"`
|
|
||||||
- Configuration `CONFIG.Actor.dataModels` (4 types)
|
|
||||||
- Configuration `CONFIG.Item.dataModels` (2 types)
|
|
||||||
- Export des models dans `game.bol.models`
|
|
||||||
|
|
||||||
### Comparaison avec les systèmes de référence
|
|
||||||
|
|
||||||
| Aspect | fvtt-cthulhu-eternal | fvtt-mournblade | BoL (après migration) |
|
|
||||||
|--------|---------------------|-----------------|----------------------|
|
|
||||||
| Structure | ✅ DataModels | ✅ DataModels | ✅ DataModels |
|
|
||||||
| Nombre d'Actor types | 3 | 2 | 4 |
|
|
||||||
| Nombre d'Item types | 12 | 17 | 2 |
|
|
||||||
| prepareDerivedData | ✅ Oui | ⏳ Non | ⏳ À ajouter |
|
|
||||||
| Méthodes métier | ✅ Oui | ⏳ Partiel | ⏳ À ajouter |
|
|
||||||
|
|
||||||
### Architecture DataModels
|
|
||||||
|
|
||||||
```
|
|
||||||
BoL DataModels Structure
|
|
||||||
├── Actor Types (4)
|
|
||||||
│ ├── character → BoLCharacter
|
|
||||||
│ ├── encounter → BoLEncounter
|
|
||||||
│ ├── horde → BoLHorde
|
|
||||||
│ └── vehicle → BoLVehicle
|
|
||||||
│
|
|
||||||
└── Item Types (2)
|
|
||||||
├── item → BoLItem
|
|
||||||
└── feature → BoLFeature
|
|
||||||
```
|
|
||||||
|
|
||||||
### Champs DataModel utilisés
|
|
||||||
|
|
||||||
- **StringField** : Chaînes (textes simples)
|
|
||||||
- **NumberField** : Nombres (avec `integer: true` pour entiers)
|
|
||||||
- **BooleanField** : Booléens (true/false)
|
|
||||||
- **HTMLField** : HTML enrichi (descriptions, notes)
|
|
||||||
- **ArrayField** : Tableaux (languages, xplog)
|
|
||||||
- **SchemaField** : Objets imbriqués (attributes, resources, etc.)
|
|
||||||
|
|
||||||
### Compatibilité
|
|
||||||
|
|
||||||
✅ **100% compatible** avec template.json existant
|
|
||||||
- Structure de données identique
|
|
||||||
- Pas de migration de données nécessaire
|
|
||||||
- Fonctionne avec les acteurs/items existants
|
|
||||||
|
|
||||||
### Avantages de la migration
|
|
||||||
|
|
||||||
1. ✅ **Validation automatique** des données
|
|
||||||
2. ✅ **Performance** améliorée
|
|
||||||
3. ✅ **Typage** pour TypeScript
|
|
||||||
4. ✅ **Maintenance** facilitée
|
|
||||||
5. ✅ **Standard** Foundry VTT v12+
|
|
||||||
6. ✅ **Extensibilité** (méthodes personnalisées)
|
|
||||||
|
|
||||||
### Prochaines étapes recommandées
|
|
||||||
|
|
||||||
#### Court terme (recommandé)
|
|
||||||
1. **Tester** : Lancer Foundry et vérifier que tout fonctionne
|
|
||||||
2. **Valider** : Créer des acteurs/items de chaque type
|
|
||||||
3. **Vérifier** : S'assurer que les feuilles de personnage fonctionnent
|
|
||||||
|
|
||||||
#### Moyen terme (conseillé)
|
|
||||||
4. **prepareDerivedData()** : Ajouter calculs automatiques (HP max, défense, etc.)
|
|
||||||
5. **Méthodes métier** : Migrer la logique depuis actor.js vers DataModels
|
|
||||||
6. **Tests** : Créer des tests unitaires pour les DataModels
|
|
||||||
|
|
||||||
#### Long terme (optionnel)
|
|
||||||
7. **Supprimer template.json** : Une fois tout migré et testé
|
|
||||||
8. **JSDoc** : Documenter les DataModels
|
|
||||||
9. **Validations** : Ajouter des validateurs personnalisés
|
|
||||||
10. **TypeScript** : Ajouter des types TypeScript
|
|
||||||
|
|
||||||
### Vérification de syntaxe
|
|
||||||
|
|
||||||
✅ Tous les fichiers ont été vérifiés :
|
|
||||||
```bash
|
|
||||||
✓ module/bol.js
|
|
||||||
✓ module/models/_module.mjs
|
|
||||||
✓ module/models/character.mjs
|
|
||||||
✓ module/models/encounter.mjs
|
|
||||||
✓ module/models/feature.mjs
|
|
||||||
✓ module/models/horde.mjs
|
|
||||||
✓ module/models/item.mjs
|
|
||||||
✓ module/models/vehicle.mjs
|
|
||||||
```
|
|
||||||
|
|
||||||
### Notes importantes
|
|
||||||
|
|
||||||
1. **Template.json conservé** : Pour la rétrocompatibilité
|
|
||||||
2. **Accès aux données identique** : `actor.system.attributes.vigor.value`
|
|
||||||
3. **Pas de breaking changes** : Migration transparente
|
|
||||||
4. **Extension facile** : Ajout de méthodes dans les DataModels
|
|
||||||
|
|
||||||
### Exemple d'utilisation
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// Accès aux données (identique à avant)
|
|
||||||
const actor = game.actors.getName("Mon Héros");
|
|
||||||
console.log(actor.system.attributes.vigor.value);
|
|
||||||
|
|
||||||
// Les DataModels sont disponibles via game.bol.models
|
|
||||||
console.log(game.bol.models.BoLCharacter);
|
|
||||||
|
|
||||||
// Modification (identique à avant)
|
|
||||||
await actor.update({
|
|
||||||
"system.resources.hp.value": 10
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
### Support et documentation
|
|
||||||
|
|
||||||
- **MIGRATION_DATAMODELS.md** : Guide de migration complet
|
|
||||||
- **DATAMODELS_GUIDE.md** : Guide d'utilisation avec exemples
|
|
||||||
- **module/models/README.md** : Documentation technique
|
|
||||||
|
|
||||||
### Références
|
|
||||||
|
|
||||||
- Système de référence 1 : `fvtt-cthulhu-eternal`
|
|
||||||
- Système de référence 2 : `fvtt-mournblade`
|
|
||||||
- Documentation Foundry : [DataModel API](https://foundryvtt.com/api/classes/foundry.abstract.DataModel.html)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Migration réalisée avec succès ! 🎉**
|
|
||||||
|
|
||||||
Le système BoL utilise maintenant les DataModels de Foundry VTT v12+, aligné sur les meilleures pratiques et compatible avec les systèmes de référence.
|
|
||||||
Reference in New Issue
Block a user