salut,
déjà cet algorithme est fait pour tracer des traits "esthétiques", il ne regarde pas si la droite passe ou non par la case, il teste simplement l'ordonnée (ou l'abscisse, ça dépend des cas) correspondant aux valeurs entières(plus 1/2) sur la droite et regarde si c'est plus proche du centre de la case de la gauche ou de droite (du haut ou du bas dans l'autre cas)
l'algo te renvoie un ordre qui peut être soit le bon, soit complètement l'inverse (si c'est le cas tu n'as qu'a retourner ta liste...
mais toi tu t'en fout... si ce qui t'intéresse c'est plus de savoir si ta droite rentre suffisamment dans ta case (genre pour toucher ou non ton personnage qui s'y trouve) ( exemple : dans le cercle qui part du centre de ta case et qui touche les bords de ta case) et surtout tu n'as pas beaucoup de test à faire (juste pour quelques personnages en fait)
exemple de test : (je pars d'un repère où les coordonnées des points qui se situent au centre de chaque case, ajouter des demis au besoin à toutes les coordonnées de tes cases)
position du joueur : (X1;Y1)
position de la case visée par le joueur (X2;Y2)
position du MOB : (Xi;Yi)
pour chaque mob il faut faire le test : ( je te passes les détails mathématiques...)
((Y2-Y1)Xi + (X1-X2)Yi + Y1X2-Y2X1)² < 1/4 * ((X1-X2)² + (Y2-Y1)²)
si c'est vrai ton mob est touché (visible^^) sinon ça passe pas suffisamment dans la case pour le voir...
remarque : avec ça tu peux introduire une notion de grosseur de ton mob, pour un mob dont la grosseur (rayon de ton cercle, notée r) varie de 1 à 10 (1 étant le mob filiforme et 10 étant le fat mob qui touche les bords de ta case)
la formule deviens :
((Y2-Y1)Xi + (X1-X2)Yi + Y1X2-Y2X1)² < r²/400 ((X1-X2)² + (Y2-Y1)²)
voilà, j'espère que ça t'aide
ps : modif d'oubli d'une parenthèse...
déjà cet algorithme est fait pour tracer des traits "esthétiques", il ne regarde pas si la droite passe ou non par la case, il teste simplement l'ordonnée (ou l'abscisse, ça dépend des cas) correspondant aux valeurs entières(plus 1/2) sur la droite et regarde si c'est plus proche du centre de la case de la gauche ou de droite (du haut ou du bas dans l'autre cas)
l'algo te renvoie un ordre qui peut être soit le bon, soit complètement l'inverse (si c'est le cas tu n'as qu'a retourner ta liste...
mais toi tu t'en fout... si ce qui t'intéresse c'est plus de savoir si ta droite rentre suffisamment dans ta case (genre pour toucher ou non ton personnage qui s'y trouve) ( exemple : dans le cercle qui part du centre de ta case et qui touche les bords de ta case) et surtout tu n'as pas beaucoup de test à faire (juste pour quelques personnages en fait)
exemple de test : (je pars d'un repère où les coordonnées des points qui se situent au centre de chaque case, ajouter des demis au besoin à toutes les coordonnées de tes cases)
position du joueur : (X1;Y1)
position de la case visée par le joueur (X2;Y2)
position du MOB : (Xi;Yi)
pour chaque mob il faut faire le test : ( je te passes les détails mathématiques...)
((Y2-Y1)Xi + (X1-X2)Yi + Y1X2-Y2X1)² < 1/4 * ((X1-X2)² + (Y2-Y1)²)
si c'est vrai ton mob est touché (visible^^) sinon ça passe pas suffisamment dans la case pour le voir...
remarque : avec ça tu peux introduire une notion de grosseur de ton mob, pour un mob dont la grosseur (rayon de ton cercle, notée r) varie de 1 à 10 (1 étant le mob filiforme et 10 étant le fat mob qui touche les bords de ta case)
la formule deviens :
((Y2-Y1)Xi + (X1-X2)Yi + Y1X2-Y2X1)² < r²/400 ((X1-X2)² + (Y2-Y1)²)
voilà, j'espère que ça t'aide
ps : modif d'oubli d'une parenthèse...