diff --git a/DATAMODELS_GUIDE.md b/DATAMODELS_GUIDE.md deleted file mode 100644 index 02d757e..0000000 --- a/DATAMODELS_GUIDE.md +++ /dev/null @@ -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: "
Rage au combat...
" - } -}); -``` - -## 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` diff --git a/FILES_CREATED.txt b/FILES_CREATED.txt deleted file mode 100644 index fad8795..0000000 --- a/FILES_CREATED.txt +++ /dev/null @@ -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 diff --git a/MIGRATION_DATAMODELS.md b/MIGRATION_DATAMODELS.md deleted file mode 100644 index 5cbeabc..0000000 --- a/MIGRATION_DATAMODELS.md +++ /dev/null @@ -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) diff --git a/MIGRATION_SUMMARY.md b/MIGRATION_SUMMARY.md deleted file mode 100644 index 7d11c84..0000000 --- a/MIGRATION_SUMMARY.md +++ /dev/null @@ -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.