Chargement dynamique d’objets avec Unrealscript

Avant de m’intéresser au Java et au PHP, je programmais en Unrealscript. Il s’agit du langage utilisé par les moteurs de jeu Unreal et qui partage quelques similitudes avec d’autres langages tout en conservant quelques particularités. Celui-ci a connu plusieurs incarnations selon l’évolution du moteur.

Ici je vous montre du code en Unrealscript 1.0 retrouvé récemment qui permet à un programmeur de générer un objet à partir d’une classe et de l’attribuer à un joueur.

Voici la fonction qui permet l’attribution.

function GivePickup( Pawn P, string ItemClass )
{
  local class<TournamentPickup> PUClass;
  local Pickup PU;
 
  // Chargement dynamique à partir d'une classe
  PUClass = class<TournamentPickup>(DynamicLoadObject(ItemClass, class'Class'));
 
  PU = Spawn( PUClass ); // Matérialisation
 
  if( PU != none )
  {
    PU.Touch( P ); // Simule le contact avec un joueur
    PU.Destroy(); // Destruction du TournamentPickup
  }
}

En argument on fournit l’instance de Pawn (classe qui représente les personnages) et le chemin vers la classe voulue.

La fonction DynamicLoadObject permet de charger une resource qui n’existait pas au temps de la compilation ou qui n’était pas visible à partir d’une autre classe car compilé par la suite. Si l’instance n’existe pas déjà en mémoire elle est chargée directement à partir du package spécifié.

native static final function object DynamicLoadObject(  
 string ObjectName, // Chemin vers la classe (nompackage.nomclasse)
 class ObjectClass, // Type de la classes (class'NomClasse')
 optional bool MayFail );

A la différence d’un langage classique, une instantiation (ou new) ne suffit pas pour rendre un object utilisable. Pour que celui-ci puisse interagir avec d’autres objets on utilise la fonction Spawn qui permet de le matérialiser. En fait, dans le cas d’Unreal il s’agit d’ajouter un objet spécialisé de type Actor qui est la classe de base de tous les objets qui interagissent dans le monde virtuel.

Une fois le Pickup matérialisé il s’agit de tout simplement faire appel à la méthode Touch pour simuler le contact avec un jouer avec pour résultat que l’objet est ajouté à son inventaire.

– James Poulson.