public bool GetClosestVisiblePointToGoal(Vector3 fromPoint) { float fClosest = float.MinValue; bool didfind = false; for (int i = 0; i < ObstacleList.Count; i++) { if (ObstacleList[i].Points.Count > 2) { for (int j = 0; j < ObstacleList[i].Points.Count; j++) { if (HaveBeenToObjPoint(i, j) == true) { continue; } Obstacle o = ObstacleList[i]; // get prev point Vector3 temp = o.Points[j == 0 ? o.Points.Count - 1 : j - 1]; //get next point Vector3 temp2 = o.Points[j == o.Points.Count - 1 ? 0 : j + 1]; Vector3 v = GetTriPoint(o.Points[j], temp, temp2); if (CheckObstacles(fromPoint, v) == false) { Dist = Vector3.Distance(o.Points[j], EndPoint); if (Dist < fClosest) { NextPointIndex = 1; ClosestObjectIndex = i; ClosestVertexIndex = j; fClosest = Dist; didfind = true; if (CheckObstacles(v, EndPoint) == false) { NextPoint = ObstacleList[ClosestObjectIndex].Points[ClosestVertexIndex]; return(false); } } } } } } if (didfind) { NextPoint = ObstacleList[ClosestObjectIndex].Points[ClosestVertexIndex]; BeenTo bt = new BeenTo(); bt.BeenToObject = ClosestObjectIndex; bt.BeenToVertex.Add(ClosestVertexIndex); BeenToList.Add(bt); } return(didfind); }
public bool HaveBeenToObjPoint(int objIndex, int vertexIndex) { bool SkipVertex = false; //make shure we havent already tried this point for (int i = 0; i < BeenToList.Count; i++) { BeenTo bt = BeenToList[i]; if (bt.BeenToObject == objIndex) { for (int x = 0; x < bt.BeenToVertex.Count; x++) { if (bt.BeenToVertex[x] == vertexIndex) { SkipVertex = true; break; } } } } return(SkipVertex); }
public bool GetClosestVisiblePointToGoal( Vector3 fromPoint ) { float fClosest = float.MinValue; bool didfind = false; for( int i = 0; i < ObstacleList.Count; i++ ) { if( ObstacleList[ i ].Points.Count > 2 ) for( int j = 0; j < ObstacleList[ i ].Points.Count; j++ ) { if( HaveBeenToObjPoint( i, j ) == true ) { continue; } Obstacle o = ObstacleList[ i ]; // get prev point Vector3 temp = o.Points[ j == 0 ? o.Points.Count - 1 : j - 1 ]; //get next point Vector3 temp2 = o.Points[ j == o.Points.Count - 1 ? 0 : j + 1 ]; Vector3 v = GetTriPoint( o.Points[ j ], temp, temp2 ); if( CheckObstacles( fromPoint, v ) == false ) { Dist = Vector3.Distance( o.Points[ j ], EndPoint ); if( Dist < fClosest ) { NextPointIndex = 1; ClosestObjectIndex = i; ClosestVertexIndex = j; fClosest = Dist; didfind = true; if( CheckObstacles( v, EndPoint ) == false ) { NextPoint = ObstacleList[ ClosestObjectIndex ].Points[ ClosestVertexIndex ]; return false; } } } } } if( didfind ) { NextPoint = ObstacleList[ ClosestObjectIndex ].Points[ ClosestVertexIndex ]; BeenTo bt = new BeenTo(); bt.BeenToObject = ClosestObjectIndex; bt.BeenToVertex.Add( ClosestVertexIndex ); BeenToList.Add( bt ); } return didfind; }