Chaque tile est assigné à un groupe. Chaque groupe possède une formule.
Le point de collision est calculé en appliquant la formule du tile, en considérant une position relative à celle du tile (entre 0 et sa taille). Ensuite cela est appliqué à l'élément entrant en "collision" avec ce dernier pour bloquer sur un axe, et donc avoir l'effet 'slide'. (chaque formule décrit une collision sur un axe, on peut bien sur combiner les collisions sur chaque axes).
Pour la traversée, le vecteur de déplacement est normalisé (entre 0.0 et 1.0), en prenant pour référentiel l'axe le plus rapide, et je fait un raytracing de l'ancienne position à la nouvelle. Le but étant de récupérer le premier tile touché pour y calculer la collision (on peut aussi récupérer tous les tiles croisés sur la route).
Ça ne "traverse" donc jamais un tile, même si l'écart entre l'ancienne position et la nouvelle est plus grande que la taille d'un tile.
Partager