lineOfSight
lineOfSight
> Fonctions
Vérifie la ligne de vue entre la cellule start et la cellule end, en ignorant les entités dans le tableau entityToIgnore.
Exemple : if (lineOfSight(getCell(), getCell(enemy)))
L'algorithme se décrit comme suit :
- Tracer un segment entre les centres des deux cellules testées.
- Faire la liste des cellules traversées par ce segment. Une cellule n'est pas considérée comme traversée si le segment frôle son bord, ou bien si elle est ignorée.
- Si une seule de ces cellules traversée est un obstacle ou contient une entité, la ligne de vue est bloquée, sinon elle est dégagée.
Paramètres
- start : Cellule de départ.
- end : Cellule cible.
- entityToIgnore (optionnel) : Entité à ignorer ou tableau d'entités à ignorer, par défaut, votre entité est ignorée. Avec une seule entité, seule celle-ci est ignorée (la vôtre ne l'est plus) ; avec un tableau, votre entité est ignorée en plus de celles du tableau.
Retour
- los : (booléen)
null si start ou end n'est pas une cellule de la carte ;
true si la ligne de vue est dégagée ;
false sinon.
Démonstration
Cliquez sur une cellule pour afficher toutes les cellules qui sont en ligne de vue avec.
Implémentation mathématique
Le lineOfSight utilise un algorithme inspiré de l'algorithme de tracé de ligne de bresenham (wikipédia)