Help with this script

What is wrong with my script. Im geeting this errors:

Assets/Scripts/CameraController.js(30,19): BCE0019: ‘range’ is not a member of ‘Object’.

(Filename: Assets/Scripts/CameraController.js Line: 30)

Assets/Scripts/CameraController.js(30,77): BCE0019: ‘position’ is not a member of ‘Object’.

(Filename: Assets/Scripts/CameraController.js Line: 30)

Script:

#pragma strict
var cameraNodes : Array = new Array();
var target : Transform;
var loopHandle : boolean = true;

class CameraNode{

var position : Vector3;
var range : float;

function CameraNode(position:Vector3, range:float){
 this.position = position;
 this.range = range;
}

}

function Start () {

target = gameObject.Find("Player").transform;

while(loopHandle){

if(cameraNodes.length){

var node : int;

for( var i = 0; i < cameraNodes.length; i++){

if(cameraNodes[i].range >= Vector3.Distance(target.position, cameraNodes[i].position)){

node = i;
}
}
transform.position = cameraNodes[node].position;

}

yield WaitForSeconds(1.0);

}

}

function Update () {

transform.LookAt(target);

}

cameraNodes is an untyped array, so when you extract its elements the compiler doesn’t know what type they are.

You need to either declare it as a C#-style array:

var cameraNodes : CameraNode[];

or explicitly cast the items you pull out of it, e.g. by assigning them to a local variable before accessing the data on that:

var cameraNode = cameraNodes[i] as CameraNode;
if (cameraNode.range >= ...)

You need to make your member declarations public (at least I believe so- C# would require it and not positive on JS)

#pragma strict

var cameraNodes : CameraNode[];
var target : Transform;
var loopHandle : boolean = true;

// Also makes the class serializeable by extending System.Object
class CameraNode extends System.Object {
  var position : Vector3;
  var range : float;
}

function Start () {
   target = gameObject.Find("Player").transform;
   while(loopHandle) {
      if(cameraNodes.length) {
         var node : int = -1;
         for( var i = 0; i < cameraNodes.length; ++i) { // Faster to use ++i than i++
            if(cameraNodes[i].range >= Vector3.Distance(target.position, cameraNodes[i].position)) {
               node = i;
               break; // Bail out of your for-loop here since you found what you are looking for
            }
         }

         if (node > -1)
            transform.position = cameraNodes[node].position;
      }

      yield WaitForSeconds(1.0);
   }
}

function Update () {
   transform.LookAt(target);
}

Edit: They do not need to be declared public, just FYI. Put up the code based on what George said.

Thank you both on quick help. Now it works