1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
for (int rows = 1; rows < YtileLeft; rows++)
{
for (int cols = 1; cols < XtileLeft; cols++)
{
// liste qui contiens tous avec la porté demandé
// l'objet sort_tuile_info contiens la position de la tuile, si elle bloque la vue, si on peux marcher dessus
sort_tuile_info sti = allTuilesInfo.Find(f => f.TuilePoint.X == allTuilesInfo[i].TuilePoint.X + ((playerPosition.X < allTuilesInfo[i].TuilePoint.X) ? cols : -cols) && f.TuilePoint.Y == allTuilesInfo[i].TuilePoint.Y + ((playerPosition.Y < allTuilesInfo[i].TuilePoint.Y) ? rows: -rows));
for (int i = 0; i < not_block_view_tile.Count; i++)
{
// controle pour savoir si on fait face a 1 seul obstacle situé sur la position x=16/y=10 sur ma map, pour bien étudier mon probleme
if (not_block_view_tile[i].TuilePoint.X == 16 && not_block_view_tile[i].TuilePoint.Y == 10)
{
// determination des index
// distance entre le joueur et l'obstacle
int Xdistance = playerPosition.X - not_block_view_tile[i].TuilePoint.X;
int Ydistance = playerPosition.Y - not_block_view_tile[i].TuilePoint.Y;
int Xindex = (Math.Abs(Xdistance) + 1) / 3;
int Yindex = (Math.Abs(Ydistance) + 1) / 3;
int XtileLeft = pe - Math.Abs(not_block_view_tile[i].TuilePoint.X - playerPosition.X);
int YtileLeft = pe - Math.Abs(not_block_view_tile[i].TuilePoint.Y - playerPosition.Y);
// mise en mode "block_vien" tous les tuiles caché par l'obstacle en cours dans la matrice
// parcourir la matrice tant déléments se trouvant horizontalement et verticalement
for (int rows = 1; rows < YtileLeft; rows++)
{
for (int cols = 1; cols < XtileLeft; cols++)
{
// recherche de la tuile concerné
sort_tuile_info sti = allTuilesInfo.Find(f => f.TuilePoint.X == allTuilesInfo[i].TuilePoint.X + ((playerPosition.X < allTuilesInfo[i].TuilePoint.X) ? cols : -cols) && f.TuilePoint.Y == allTuilesInfo[i].TuilePoint.Y + ((playerPosition.Y < allTuilesInfo[i].TuilePoint.Y) ? rows: -rows));
if (sti != null)
{
// cheque si la distance vertical / 3 pour savoir combien de tuiles horizontal on dois parcourir pour autoriser la prochaine tuile
//pour avoir ligne de vus, le chiffre 3 est un nombre que je tolère pour avoir la prochaine vus sur la case
if (Ydistance - 3 > 0)
sti.isBlockingView = false;
else
sti.isBlockingView = true;
}
else
break; // sortir de la boucle si l'objet sti est null, si c'est le cas ça veux dire qu'il ne reste aucune tuile a vérifier
}
}
break; // on arrête notre logique puisque les autres obstacles sur la map ne mintéresse pas pour le moment
}
} |
Partager