Mon message est à prendre au conditionnel, je n'ai pas eu l'occasion d'essayer pour vérifier mais j'ai lu le code et je crois comprendre le fonctionnement.
Les étapes :
1) Le jeu va calculer le pathfinding en fonction de donnée déjà existante, sous forme de class Transition, les Transition sont contenus dans les Edge (voir l'initialisation de la class WorldGraph). Le pathfinding va s'intéresser à l’existence des Transition pour définir un parcours (= un dictionnaire d'id de map).
2) Une fois le parcours obtenu, le jeu va s'intéresser au contenu de la carte pour "cliquer"/se déplacer au bon endroit (comme un pixel bot). Pour en savoir plus, tu peux regarder : getClosestTransitionCellId de MountAutoTripManager.
----------
Pour l'étape 1 :
Quand on regarde la fonction Astar.compute, les fonctions de collision utilisées (= c'est-à-dire savoir si le déplacement est possible) sont :
if(hasValidTransition(edge))
{
if(hasValidDestinationSubarea(edge))
{
Par leur nom, je suppose que c'est hasValidTransition qui nous intéresse.
J'ai regardé le reste du code, il ne calcule pas à chaque fois les changements de map en regardant chaque cellule, c'est sauvegardé dans un fichier. Il charge des données à partir de
<entry key="data.pathFinding">[config.content.path]maps/worldgraph.bin</entry>
, et ils obtiennent une série d'élément :
Vertex/Transition/Edge. En regardant la class
Transition :
public function Transition(type:int, direction:int, skillId:int, criterion:String, transitionMapId:Number, cell:int, id:uint)
{
super();
this._type = type; // La classe TransitionTypeEnum t'indique les types disponibles : SCROLL, SCROLL_ACTION, MAP_EVENT, MAP_ACTION, MAP_OBSTACLE, INTERACTIVE, NPC_ACTION, UNSPECIFIED.
this._direction = direction;
this._skillId = skillId;
this._criterion = criterion;
this._transitionMapId = transitionMapId;
this._cell = cell; // si -1 c'est toute la bordure qui sera utilisable
this._id = id;
}
// qu'on peur lire ainsi :
public function toString() : String
{
return "Transition{_type=" + String(this._type) + ",_direction=" + String(this._direction) + ",_skillId=" + String(this._skillId) + ",_criterion=" + String(this._criterion) + ",_transitionMapId=" + String(this._transitionMapId) + ",_cell=" + String(this._cell) + ",_id=" + String(this._id) + "}";
}
L'existence de l'élément Transition indique que tu vas pouvoir transiter/aller d'une carte à une autre, à condition que criterion soit respecté.
Voila j'espère que je t'ai aidé. :)