J'ai ce code de travail qui peut créer des instances de type quelconque. La fonction suivante rend simplement les objets de script associés à Entity
. Tous les scripts héritent de BehaviorScript
. Donc T
peut être Walk
où class Walk extends BehaviorScript {}
.Types de contraintes génériques de stockage Haxe
// INSIDE OF A CLASS
@:generic
public static function register<T:(Constructible, BehaviorScript)>(type:Class<T>, entity:Entity):T{
var script = new T(entity);
entity.addScript(script);
return script;
}
Je voudrais stocker les types de tous les scripts effectués par la fonction dans une carte où le type est la clé.
// Walk, Attack, Evade classes extend from BehaviorScript
var e = createEntity();
var scriptA = register(Walk, e);
var scriptB = register(Attack, e);
var scriptC = register(Evade, e);
// ISSUE: what to put as key?
var map = new Map<?type as key?, BehaviorScript>();
map.set(Type.getClass(scriptA), scriptA);
map.set(Type.getClass(scriptB), scriptB);
map.set(Type.getClass(scriptC), scriptC);
L'objectif final serait en train d'accéder aux scripts via le type, pensez getComponent<T>
de l'unité (peut-être il y a une meilleure façon)
getScript<T:BehaviorScript>(type:Class<T>):Null<T>{
return map.get(type);
}
Y at-il une solution pour stocker les types génériques contraintes dans un conteneur?