Files
2026-07-12 15:18:42 +02:00

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/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).