e81d88166b
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
Scripting jeu : C# (Godot/Mono), GDScript, Lua
C# (Godot/Mono)
- Signaux vs appels directs : préférer les signaux Godot pour le découplage entre nœuds, plutôt que des références directes croisées entre scènes — couplage fort non justifié = 🟠.
- Cycle de vie des nœuds : vérifier l'usage correct de
_Ready(),_Process()vs_PhysicsProcess()(logique physique/mouvement doit être dans_PhysicsProcess, pas_Process= 🔴 si ça casse le déterminisme physique). GetNode()avec chemin en dur fragile aux réorganisations de scène → préférer[Export]ou constantes de chemin centralisées (🟡).- Allocations dans
_Process/_PhysicsProcess(boucle par frame) : allocation d'objets/listes à chaque frame = 🟠 (pression GC, risque de stutter, critique en pixel-art temps réel). async/awaitavec Godot : attention aux tâches qui survivent à la destruction du nœud (QueueFree) sans annulation → fuite/crash potentiel = 🔴.- Cohérence avec la structure de scènes du projet (ElironWorldDungeons ou autre) : vérifier que le script respecte l'organisation de dossiers déjà en place plutôt que d'en introduire une nouvelle sans discussion.
GDScript
- Typage statique disponible (
var x: int,-> void) : l'utiliser sur les fonctions publiques/API de nœud, surtout dans du code partagé — absence = 🟡 (perte de perf + autocomplete + détection d'erreurs à l'édition). @onready varpour les références de nœuds internes plutôt queget_node()répété dans plusieurs fonctions.- Éviter la logique lourde dans
_process()par frame sans nécessité — même remarque que C# sur les allocations en boucle. - Signaux : connecter/déconnecter proprement (
connect/disconnect) pour éviter les callbacks fantômes sur des nœuds libérés = 🔴 si ça crash en prod. - Cohérence de nommage :
snake_casepour variables/fonctions,PascalCasepour classes/nœuds (convention GDScript standard) — à vérifier si le studio n'a pas dévié explicitement.
Lua
- Scope des variables :
localpar défaut, variable globale non déclarée volontairement = 🟠 (pollution du scope global, bugs difficiles à tracer, surtout si Lua est embarqué comme langage de modding/scripting). - Gestion d'erreurs :
pcall/xpcallautour de tout code exécuté dynamiquement ou venant de scripts externes/mods (si Lua sert à du modding, un script tiers qui plante ne doit pas crasher le jeu) → absence = 🔴 dans ce contexte précis. - Tables : attention à la confusion array-like vs map-like dans une même table, source de bugs subtils avec
#/ipairs/pairs. - Si Lua est utilisé pour du contenu moddable : vérifier qu'aucune fonction dangereuse (accès fichier système,
os.execute, etc.) n'est exposée au sandbox de script sans contrôle explicite = 🔴 (risque sécurité si mods tiers).