Example #1
0
            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);
            }
Example #2
0
            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);
            }
Example #3
0
			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;
			}