Waypoint problems

Hi there,

I have an array of waypoints, I am trying to move from point to point in order of the ones visited the longest time ago, I have an array which i cycle through looking for points I can see and then I move my toon toward it, when it gets there, the point is moved to the bottom of the list and I go for the next one. The code is below. Sometime it works and sometimes it return a null even though I know a point is visible. There’s a bug there somewhere but I just can’t get it. is my ray striking my toon’s character controller maybe? any thoughts would be good.

Thanks all

#pragma strict
#pragma downcast

var closeEnough : float = 8.0; // distance where we are clo9se enough to a point to go to the next
private var wayArray : Array; // an arrray of waypoints

function Start()
{
	// collect all of the waypoints
	wayArray = new Array(GameObject.FindGameObjectsWithTag("WayPoint")); 
}

function FindOldestWaypoint () : GameObject {
	var hit : RaycastHit;

    var oldest: GameObject; 
    var position = transform.position; 
    var lp : int;
    
	
    // Iterate through them and find the top of the list
    for (lp =  0 ; lp < wayArray.length; lp ++)
   	{
   	    var go : GameObject =  wayArray[lp];
   		
    	    // raycast, check for intervening objects, can I see it? 
    	    var raydirection =  go.transform.position - position;

		// if the waypoint we are testing has a collider blocking it the ignore it0
   	    if (!Physics.Raycast (transform.position, raydirection, hit)) 
		{
			// draw a debug ray
    			Debug.DrawRay(transform.position, raydirection, Color.red);  // debug code
        		var diff = (go.transform.position - position);
        		var curDistance = diff.sqrMagnitude; 
        		
    	    	if (curDistance < closeEnough) { 
    	    		// if we are close engough, the current waypoint is moved to the bottom of the list
    	    		wayArray.RemoveAt(lp);
    	    		wayArray.Push(go);
    		    }

			oldest: = wayArray[lp];
			break;
    	}
    	
    } 
    return oldest: 
}

Thanks for the suggestions guys, the recalculated vector was an oversight, the : in the wrong place seems to have been because of the way I copied and pasted the code.

I solved the problem by placing the playing surface on the ignore raycast surface, a new concept for my newbie self. I found the problem by putting lots of debug statements in to find out what the ray was colliding with and hey presto, it was the playing surface.

Oh, and I didn’t know about the 101010 button. Here is my completed code

Cheers

function FindOldestWaypoint () : GameObject {
var hit : RaycastHit;

var oldest : GameObject; 
var distance = Mathf.Infinity; 
var position = transform.position; 
var lp : int;


// Iterate through them and find the top of the list
for (lp =  0 ; lp < wayArray.length; lp ++)
{

	var go : GameObject =  wayArray[lp];
	
	// raycast, can I see it?
	var raydirection =  go.transform.position - position;
	Physics.Raycast (transform.position, raydirection, hit);

	// if the waypoint we are testing has a collider blocking it the ignore it0
    if (!Physics.Raycast (transform.position, raydirection, hit)) 
	{
	
			// draw a debug ray
			Debug.DrawRay(transform.position, raydirection, Color.red);  // debug code
			
			// get the distance to the waypoint and if it's close, move it to the end of the array 
			// and go for the neat one
    		var curDistance = raydirection.sqrMagnitude; 
    		
	    	if (curDistance < closeEnough) { 
	    	
	    		// if we are close engough, the current waypoint is deleted and 
	    		// moved to the bottom of the list
	    		wayArray.RemoveAt(lp);
	    		wayArray.Push(go);
		    }
			else
			{
				oldest = wayArray[lp];
				break;
			}
	}
	
} 
return oldest;

}