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.
{
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é.
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.