Add files for project refactoring
This commit is contained in:
parent
a0c32cba4d
commit
0bdb561637
115
docs/README.md
Normal file
115
docs/README.md
Normal file
|
|
@ -0,0 +1,115 @@
|
||||||
|
# Tales of Pokémon — Organisation du projet
|
||||||
|
|
||||||
|
Jeu 3D développé avec Godot (GDScript). Ce document décrit comment le projet est rangé et les conventions à suivre pour s'y retrouver.
|
||||||
|
|
||||||
|
## Principe général
|
||||||
|
|
||||||
|
- **On range par fonctionnalité**, pas par type de fichier : le script d'une scène vit à côté de sa scène.
|
||||||
|
- **Règle de test** : si je supprime la fonctionnalité X, je ne supprime qu'un seul dossier.
|
||||||
|
- Les **fichiers bruts** (images, sons, modèles 3D) sont dans `assets/`, les **ressources de données** (`.tres`) dans `data/`, le **code et les scènes** dans `game/`.
|
||||||
|
|
||||||
|
## Arborescence
|
||||||
|
|
||||||
|
```
|
||||||
|
res://
|
||||||
|
├── addons/ # plugins (pokeapi_importer, controller_icons) — ne pas modifier à la main
|
||||||
|
├── assets/ # fichiers bruts uniquement
|
||||||
|
│ ├── textures/ # fonds, splash…
|
||||||
|
│ ├── ui/types/ # symboles des types
|
||||||
|
│ └── audio/
|
||||||
|
├── data/ # ressources .tres (importées ou faites à la main)
|
||||||
|
│ ├── pokemon/ # fichiers préfixés par l'id (ex. 0025_pikachu.tres)
|
||||||
|
│ ├── moves/
|
||||||
|
│ ├── types/
|
||||||
|
│ ├── items/
|
||||||
|
│ └── mounts/
|
||||||
|
├── game/
|
||||||
|
│ ├── core/ # autoloads : game_data, pokedex, ui_audio
|
||||||
|
│ ├── player/
|
||||||
|
│ │ ├── player_character.tscn / .gd
|
||||||
|
│ │ ├── camera/ # camera_holder
|
||||||
|
│ │ ├── input/ # input_management_component
|
||||||
|
│ │ ├── aim/ # aim_target
|
||||||
|
│ │ └── states/ # state, state_machine, idle_state, walk_state, …
|
||||||
|
│ ├── pokemon/ # pokemon_instance, pokemon_team, pokemon_nature, move_slot, trainer_data…
|
||||||
|
│ ├── mount/ # mount_profile, mount_registry
|
||||||
|
│ ├── storage/ # pokemon_box, pokemon_storage, pc_screen (+ .tscn)
|
||||||
|
│ ├── ui/
|
||||||
|
│ │ ├── main_menu/ # scène + script
|
||||||
|
│ │ ├── pause_menu/ # scène + script + shader
|
||||||
|
│ │ ├── splash_screen/
|
||||||
|
│ │ └── hud/
|
||||||
|
│ └── world/ # main.tscn et futures zones
|
||||||
|
├── docs/ # documentation (ce fichier)
|
||||||
|
├── project.godot
|
||||||
|
└── icon.svg
|
||||||
|
```
|
||||||
|
|
||||||
|
## Conventions de nommage
|
||||||
|
|
||||||
|
| Élément | Convention | Exemple |
|
||||||
|
|---|---|---|
|
||||||
|
| Fichiers et dossiers | `snake_case` | `pokemon_team.gd`, `main_menu.tscn` |
|
||||||
|
| `class_name` | `PascalCase` | `PokemonTeam`, `AimTarget` |
|
||||||
|
| Variables et fonctions | `snake_case` | `move_speed`, `gravity_apply()` |
|
||||||
|
| Constantes | `MAJUSCULES_SNAKE` | `MAX_TEAM_SIZE` |
|
||||||
|
| Signaux | `snake_case`, verbe au passé | `transitioned` |
|
||||||
|
| Ressources de données Pokémon | préfixe par l'id | `0025_pikachu.tres` |
|
||||||
|
|
||||||
|
## Les grands systèmes
|
||||||
|
|
||||||
|
### Joueur et state machine (`game/player/`)
|
||||||
|
|
||||||
|
Le joueur est un `CharacterBody3D` piloté par une state machine : le nœud `StateMachine` contient un nœud enfant par état.
|
||||||
|
|
||||||
|
- Chaque état hérite de `State` et implémente `enter()`, `exit()`, `update()` et `physics_update()`.
|
||||||
|
- Un état demande un changement avec `transitioned.emit(self, "NomDuNoeud")`. Le nom correspond au **nom du nœud enfant** dans la scène (insensible à la casse). Si aucun nœud ne porte ce nom, la transition est ignorée sans erreur.
|
||||||
|
- États en place ou prévus : Idle, Walk, Run, Jump, Inair, Crouch, Dodge, Aim, Mounted.
|
||||||
|
- Les variables partagées entre états (vitesses, cooldowns de saut, `walk_or_run`…) sont sur `PlayerCharacter`.
|
||||||
|
|
||||||
|
**Ajouter un état :**
|
||||||
|
1. Créer `xxx_state.gd` dans `game/player/states/` (`extends State`, avec un `class_name` et un `state_name`).
|
||||||
|
2. Ajouter un nœud enfant sous `StateMachine` dans `player_character.tscn`, avec le même nom que celui utilisé dans les transitions, et lui attacher le script.
|
||||||
|
3. Ajouter les transitions entrantes et sortantes dans les états concernés.
|
||||||
|
|
||||||
|
### Visée (`game/player/aim/`)
|
||||||
|
|
||||||
|
`AimState` fait un auto-lock sur les `AimTarget` du groupe `aim_targets`. Les actions d'entrée sont configurables dans l'inspecteur de l'état.
|
||||||
|
|
||||||
|
### Pokémon, équipe et PC (`game/pokemon/`, `game/storage/`)
|
||||||
|
|
||||||
|
- `PokemonInstance` : un Pokémon concret (capacités débloquées, nature, sans IV ni EV).
|
||||||
|
- `PokemonTeam` : équipe de 6 maximum, utilisée par le joueur et les PNJ.
|
||||||
|
- `TrainerData` / `TrainerPartyEntry` : équipes des PNJ dresseurs.
|
||||||
|
- `PokemonStorage` / `PokemonBox` / `pc_screen` : stockage de type « boîte PC » quand l'équipe est pleine.
|
||||||
|
|
||||||
|
### Montures (`game/mount/` et `data/mounts/`)
|
||||||
|
|
||||||
|
Certains Pokémon peuvent être montés hors combat. Le code est dans `game/mount/`, les profils de monture (`.tres`) dans `data/mounts/`.
|
||||||
|
|
||||||
|
### Données Pokémon (`addons/pokeapi_importer/` et `data/`)
|
||||||
|
|
||||||
|
- Le plugin d'éditeur **pokeapi_importer** importe depuis PokeAPI uniquement les Pokémon, capacités et objets choisis, et les écrit en `.tres` dans `data/`.
|
||||||
|
- Il est autonome (prévu pour un dépôt séparé) : le jeu utilise ses données, mais ne doit pas le modifier.
|
||||||
|
- Le `Pokedex` (autoload) est côté jeu, dans `game/core/`.
|
||||||
|
|
||||||
|
### Interfaces
|
||||||
|
|
||||||
|
Le jeu est pensé **manette d'abord** (clavier et souris restent possibles). Toute nouvelle interface doit être entièrement utilisable à la manette, avec un focus initial défini. Les icônes de touches viennent du plugin `controller_icons`.
|
||||||
|
|
||||||
|
## Autoloads
|
||||||
|
|
||||||
|
| Autoload | Rôle |
|
||||||
|
|---|---|
|
||||||
|
| `game_data` | Sauvegarde et progression |
|
||||||
|
| `pokedex` | Accès aux Pokémon et capacités par id ou nom |
|
||||||
|
| `ui_audio` | Sons d'interface |
|
||||||
|
|
||||||
|
## Règles pour garder le projet rangé
|
||||||
|
|
||||||
|
1. Un script et sa scène vont dans le même dossier.
|
||||||
|
2. Aucun script dans `assets/`, aucun gros fichier brut dans `game/`.
|
||||||
|
3. Déplacer et renommer les fichiers **depuis le dock FileSystem de Godot**, jamais depuis l'explorateur de l'OS.
|
||||||
|
4. Après un déplacement, chercher `res://` dans le projet : les chemins écrits en chaîne de caractères ne sont pas mis à jour automatiquement.
|
||||||
|
5. Ne pas mélanger un renommage et un déplacement dans le même commit Git.
|
||||||
|
6. Mettre ce document à jour quand un nouveau dossier ou système apparaît.
|
||||||
73
project_tree.txt
Normal file
73
project_tree.txt
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
├── README.md
|
||||||
|
├── assets
|
||||||
|
│ ├── textures
|
||||||
|
│ │ ├── background
|
||||||
|
│ │ │ ├── 0.png
|
||||||
|
│ │ ├── splash.png
|
||||||
|
│ └── types
|
||||||
|
│ └── symbols
|
||||||
|
│ ├── bug.png
|
||||||
|
│ ├── dark.png
|
||||||
|
├── data
|
||||||
|
│ └── mounts
|
||||||
|
│ └── charizard.tres
|
||||||
|
├── default_bus_layout.tres
|
||||||
|
├── demo
|
||||||
|
│ ├── IconRemapper.gd
|
||||||
|
│ ├── IconRemapper.tscn
|
||||||
|
│ ├── Showcase.tscn
|
||||||
|
│ └── icon_respect.tres
|
||||||
|
├── game
|
||||||
|
│ ├── player
|
||||||
|
│ │ ├── Camera
|
||||||
|
│ │ │ ├── CameraHolder.gd
|
||||||
|
│ │ │ └── CameraHolder.tscn
|
||||||
|
│ │ ├── InputManagementComponent
|
||||||
|
│ │ │ ├── InputManagementComponent.gd
|
||||||
|
│ │ ├── PlayerCharacter.tscn
|
||||||
|
│ │ ├── StateMachine
|
||||||
|
│ │ │ ├── AimState.gd
|
||||||
|
│ │ │ ├── CrouchState.gd
|
||||||
|
│ │ │ ├── DodgeState.gd
|
||||||
|
│ │ │ ├── IdleState.gd
|
||||||
|
│ │ │ ├── JumpState.gd
|
||||||
|
│ │ │ ├── MountedState.gd
|
||||||
|
│ │ │ ├── PlayerCharacter.gd
|
||||||
|
│ │ │ ├── README.rtf
|
||||||
|
│ │ │ ├── RunState.gd
|
||||||
|
│ │ │ ├── State.gd
|
||||||
|
│ │ │ ├── StateMachine.gd
|
||||||
|
│ │ │ ├── WalkState.gd
|
||||||
|
│ │ └── actions
|
||||||
|
│ │ ├── AimTarget.gd
|
||||||
|
│ └── ui
|
||||||
|
│ └── ui.tscn
|
||||||
|
├── icon.svg
|
||||||
|
├── pause_menu.gdshader
|
||||||
|
├── project.godot
|
||||||
|
├── scenes
|
||||||
|
│ ├── main.tscn
|
||||||
|
│ ├── main_menu.tscn
|
||||||
|
│ ├── pause_menu.tscn
|
||||||
|
│ └── splash_screen.tscn
|
||||||
|
└── scripts
|
||||||
|
├── game_data.gd
|
||||||
|
├── main_menu.gd
|
||||||
|
├── mount
|
||||||
|
│ ├── mount_profile.gd
|
||||||
|
│ └── mount_registry.gd
|
||||||
|
├── pause_menu.gd
|
||||||
|
├── pokedex.gd
|
||||||
|
├── pokemon
|
||||||
|
│ ├── move_slot.gd
|
||||||
|
│ ├── pokemon_instance.gd
|
||||||
|
│ ├── pokemon_nature.gd
|
||||||
|
│ ├── pokemon_team.gd
|
||||||
|
│ ├── trainer_data.gd
|
||||||
|
│ └── trainer_party_entry.gd
|
||||||
|
├── splash_screen.gd
|
||||||
|
├── storage
|
||||||
|
│ ├── PCScreen.gd
|
||||||
|
│ ├── pokemon_box.gd
|
||||||
|
│ └── pokemon_storage.gd
|
||||||
|
├── ui_audio.gd
|
||||||
79
todo_project_tree.txt
Normal file
79
todo_project_tree.txt
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
├── README.md
|
||||||
|
├── assets
|
||||||
|
│ ├── textures
|
||||||
|
│ │ ├── background
|
||||||
|
│ │ │ ├── 0.png
|
||||||
|
│ │ ├── splash.png
|
||||||
|
│ └── ui [NEW]
|
||||||
|
│ │ └── types
|
||||||
|
│ │ ├── bug.png
|
||||||
|
│ │ ├── dark.png
|
||||||
|
│ └── audio [NEW]
|
||||||
|
├── data
|
||||||
|
│ └── pokemon [NEW]
|
||||||
|
│ └── moves [NEW]
|
||||||
|
│ └── types [NEW]
|
||||||
|
│ └── items [NEW]
|
||||||
|
│ └── mounts
|
||||||
|
│ └── charizard.tres
|
||||||
|
├── game
|
||||||
|
│ ├── core [NEW]
|
||||||
|
│ │ ├── game_data.gd [NEW]
|
||||||
|
│ │ ├── pokedex.gd [NEW]
|
||||||
|
│ └── audio [NEW]
|
||||||
|
├── ui_audio.gd [NEW]
|
||||||
|
└── default_bus_layout.tres
|
||||||
|
│ ├── player
|
||||||
|
│ │ ├── player_character.tscn [NEW]
|
||||||
|
│ │ ├── player_character.gd [NEW]
|
||||||
|
│ │ ├── camera [NEW]
|
||||||
|
│ │ │ ├── camera_holder.gd
|
||||||
|
│ │ │ └── camera_holder.tscn
|
||||||
|
│ │ ├── input [NEW]
|
||||||
|
│ │ │ └── input_management_component.gd
|
||||||
|
│ │ ├── aim [NEW]
|
||||||
|
│ │ │ └── aim_target.gd
|
||||||
|
│ │ ├── states [NEW]
|
||||||
|
│ │ │ ├── aim_state.gd
|
||||||
|
│ │ │ ├── crouch_state.gd
|
||||||
|
│ │ │ ├── dodge_state.gd
|
||||||
|
│ │ │ ├── idle_state.gd
|
||||||
|
│ │ │ ├── jump_state.gd
|
||||||
|
│ │ │ ├── mounted_state.gd
|
||||||
|
│ │ │ ├── README.rtf [NEW] A RETIRER
|
||||||
|
│ │ │ ├── run_state.gd
|
||||||
|
│ │ │ ├── state.gd
|
||||||
|
│ │ │ ├── state_machine.gd
|
||||||
|
│ │ │ └── walk_state.gd
|
||||||
|
│ ├── pokemon [NEW]
|
||||||
|
│ ├── move_slot.gd
|
||||||
|
│ ├── pokemon_instance.gd
|
||||||
|
│ ├── pokemon_nature.gd
|
||||||
|
│ ├── pokemon_team.gd
|
||||||
|
│ ├── trainer_data.gd
|
||||||
|
│ └── trainer_party_entry.gd
|
||||||
|
├── mount [NEW]
|
||||||
|
│ ├── mount_profile.gd
|
||||||
|
│ └── mount_registry.gd
|
||||||
|
├── storage [NEW]
|
||||||
|
│ ├── pc_screen.gd
|
||||||
|
│ ├── pokemon_box.gd
|
||||||
|
│ └── pokemon_storage.gd
|
||||||
|
└── ui
|
||||||
|
├── main_menu [NEW]
|
||||||
|
├── main_menu.tscn
|
||||||
|
└── main_menu.gd
|
||||||
|
├── pause_menu [NEW]
|
||||||
|
├── pause_menu.tscn
|
||||||
|
├── pause_menu.gd
|
||||||
|
└── pause_menu.gdshader
|
||||||
|
├── splash_screen [NEW]
|
||||||
|
├── splash_screen.tscn
|
||||||
|
└── splash_screen.gd
|
||||||
|
├── hud [NEW]
|
||||||
|
└── ui.tscn
|
||||||
|
└── world [NEW]
|
||||||
|
└── main.tscn
|
||||||
|
├── docs [NEW]
|
||||||
|
├── icon.svg
|
||||||
|
├── project.godot
|
||||||
Loading…
Reference in a new issue