# 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`/`await` avec 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 var` pour les références de nœuds internes plutôt que `get_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_case` pour variables/fonctions, `PascalCase` pour classes/nœuds (convention GDScript standard) — à vérifier si le studio n'a pas dévié explicitement. ## Lua - Scope des variables : `local` par 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`/`xpcall` autour 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).