17-10-2008, 09:30 PM
(Modification du message : 17-10-2008, 09:36 PM par jo_link_noir.)
Fonction angle -> pour connaître en degrés la position de l'obstacle par rapport à l'origine, ça va de 0 à 360. Bon, pour ce qu'elle fait je pense pas qu'il y a de problème. Pas la peine non plus d'expliquer le code de la fonction, c'est de la trigo, j'ai eu du mal à la faire, alors si en plus j'explique ça va être horrible ^^
$c_obstacle pas de problème je pense. C'est sous la forme [x,y] => type
avec x et y les positions de l'obstacle et type, ce que tu veux, là on s'en sert pas.
Jx jy, les positions du joueur
jusque là, rien de bien compliquer, maintenant on va voir comment trouver ce que cache un obstacle.
Ce bout de code
Un foreach pour boucler sur tout les obstacles, ce qui permet au final de savoir l'angle qu'il cache$c_obstacle pas de problème je pense. C'est sous la forme [x,y] => type
avec x et y les positions de l'obstacle et type, ce que tu veux, là on s'en sert pas.
Jx jy, les positions du joueur
jusque là, rien de bien compliquer, maintenant on va voir comment trouver ce que cache un obstacle.
Ce bout de code
Code PHP :
<?php
/*calcule l'angle que cache un obstacle et ça distance par rapport au joueur.
rajoute dans $angle_obstacle sous la forme array(angle_min, angle_max, distance)*/
foreach($c_obstacle as $coord=>$type){
list($x,$y) = explode(",", $coord);
$x -= $jx;
$y -= $jy;
/*definit l'angle de chaque coin de la case
(0.5 => l'obstacle prend toute la case la diffence entre le centre et un bord est de 0.5;
0.45=> l'obstacle prend 90% de la case la case la diffence entre le centre et un bord est de 0.45)*/
$angle_coin = array(
angle($x+0.45, $y+0.45),
angle($x+0.45, $y-0.45),
angle($x-0.45, $y-0.45),
angle($x-0.45, $y+0.45)
);
//on selectionne l'angle min et max de l'obstacle,
//l'ombre se situe entre les 2 valeurs
$angle_obstacle[] = array(
min($angle_coin), //angle min
max($angle_coin), //angle max
sqrt($x*$x + $y*$y) //distance
);
}
On récupère les coordonnées de l'obstacle et on leur enleve la position du joueur. Ca permet de simplifier les calcules en simulant le joueur en position 0,0.
Maintenant ce qui nous intéresse est l'angle que cache l'obstacle (en gris) :
à vu de nez c'est entre 40 et 70 degrés. on va calculer l'angle de tous les coins pour sélectionner celui qui est le plus grand (angle_max) et le plus petit (angle_min). Tous ce qui sera entre, est dans l'ombre.
Les angles des 4 coins sont 40,45,45 et 70 degrés. Avec les fonctions min et max, on sélectionne bien angle_min (40) et angle_max (70).
On enregistre ces valeurs avec en plus la distance du joueur par rapport à l'obstacle. La distance permet de savoir quand un obstacle est dépasser, et donc qu'une case est peut-être dans l'ombre.
Je vais essayer d'expliquer un peu ces lignes (surtout les -/+ 0.45)
Code PHP :
<?php
$angle_coin = array(
angle($x+0.45, $y+0.45),
angle($x+0.45, $y-0.45),
angle($x-0.45, $y-0.45),
angle($x-0.45, $y+0.45)
);