Tag des "entity"

7 views
Skip to first unread message

Fred

unread,
Jun 27, 2012, 12:17:07 PM6/27/12
to chick...@googlegroups.com
On est plusieurs a se poser la question, de savoir comment identifier une "entity" sur laquelle on veut greffer un comportement particulier, donc j ouvre la discussion et ...

Je propose un format de tag pour pouvoir identifier les entités (en tout cas celles qui ont besoin de l'etre). par exemple les heros, les PNJ, les enemis, ... 
Par contre les elements passifs (decors, polices, ...) n'auraient pas besoin de tag car pas besoin de les identifier (a confirmer ...)

Du coup, mon idée est d avoir une classe CTag avec les membres "Id"(long) = identifiant unique et "Name"(string) = un nom que l'on pourrait afficher (pas forcemment unique).
On pourrait utiliser lors de la définition d'une entité un fichier xml que l on chargerai en debut de partie, ce fichier contiendrai toutes les informations pour creer une "entity" (y compris la def du tag).
exemple de fichier:
<entity_list>
<entity>
  <tag>
    <id>400</id>
    <name>Hero</name>
  </tag>
  <component_list>
   <component type=input/>
   <component type=transform x=45 y=50/>
  </component_list>
<entity>
<entity_list>

Par contre coté dev, cela impose de connaitre les tags des entités si on veut travailler avec, en tout cas au moins l' "Id".

Autre problematique: Peut on associer plusieurs tags a une entité ? Si oui, quels en sont les interets ?
-classer les entités par groupe (du coup il faudrait peut etre rajouter un membre a la classe CTag (id_groupe))
 ???

Votre avis ?

Laurent Vaucher

unread,
Jun 27, 2012, 1:10:06 PM6/27/12
to chick...@googlegroups.com
Sur le fait que les tags puissent avoir un identifiant numérique, c'est certainement une bonne idée en termes de performances. Ça évitera de toujours se traîner une string qui consomme des caractères pour rien, vu que ce sera souvent les mêmes. Les tags pourraient être des "pseudo-singletons", gérés dans un registre quelque part (peudo, parce qu'il y aura clairement plusieurs instances de la classe CTags, singleton, parce que pour un nom donné, il n'y en aura qu'un seul).
Je suis moins fan de l'idée de travailler directement avec l'id pour plusieurs raisons :
  • comme tu l'as dit, ça oblige à connaître les ids et c'est moins parlant qu'un nom. Mais ça se contourne facilement en déclarant des constantes.
  • ça verrouille le système et du côté scripting, j'aimerais qu'on ait la souplesse d'utiliser des tags non-prévus. On peut vouloir tagguer certains persos comme "puants" après leur avoir jeté un sort de chou-fleur, par exemple. Et ce tag ferait s'éloigner la plupart des autres personnages.
Donc une solution qui ménage la chèvre et le chou (fleur) serait de gérer un registre dynamique des tags, avec des ids alloués dynamiquement, mais avec un jeu de tags "système" prédéfinis (héros, ennemi, trésor, je ne sais quoi...). Ensuite, pour les fonctions qui manipulent les tags, on peut prévoir de les écrire en double : une qui prend l'id (plus rapide) et une qui prend le nom (plus souple mais oblige à retrouver d'abord l'id dans le registre, une sorte de DNS).

Pour le fichier de description des entités, ça me paraît pas mal. Comme c'est un fichier qui sera probablement lu une seule fois, la perf n'est peut-être pas une priorité. On pourrait se contenter de lister les noms de tags associés à une entité (sans les ids) et laisser le code retrouver l'id. Autre idée au passage, ce format de fichier pourraît être utilisé comme format de sauvegarde...

Peut-on assigner plusieurs tags : oui, il faut. L'intérêt majeur du tag, dans mon esprit, c'est vraiment de pouvoir grouper de façon souple des entités pour n'importe quel besoin : les adeptes de la secte X, les amis des chats, les gens qui sont beaux. Ces catégories ne sont pas exclusives. Ou encore les objets magiques, les objets en bois, les objets lourds...

Les groupes, je ne pense pas qu'on en ait besoin. Ça fait la même chose que les tags, en moins souple. Ça peut éventuellement amener de la perf, mais on n'en est pas là. Si on pond un système de tags efficace, ça devrait suffire.

D'autres avis ?
Reply all
Reply to author
Forward
0 new messages