// PC vars
var players : int = 2; //number of players this game
var maxPieces : int = 3; //number of player pieces
var playerModel : Transform;
//board segment vars
var segments : int; //number of segments board is devided into
var block2Instantiate : Transform; //define prefab to use as entry/exit collision detection
var homeBaseBoard : Transform; //image players stand on at start
private var waypoints = new Array(); //define movement markers and locations
//home base vars
private var homeBase = new Array();
class playPiece
{
var piece : Transform;
var currentWaypoint : int;
var nextWaypoint : int;
}
class homeBaseVars
{
//var name;
var board : Transform;
var avatar : Array;
var firstWaypoint : int;
}
//random possible deletable vars
var textarea : GUIText;
function initHomeBase(base, rotation)
{
// textarea.text = "Rotation: " + rotation * base * (segments/players);
homeBase[base] = new homeBaseVars();
homeBase[base].board = Instantiate(homeBaseBoard, transform.position, transform.rotation);
homeBase[base].board.name = "Player" + base;
homeBase[base].board.transform.Rotate(0,rotation * base * (segments / players),0);
homeBase[base].avatar = new Array();
homeBase[base].avatar.length = maxPieces;
var tempPiece : playPiece;
for(i=0; i < maxPieces; i++)
{
//get rotation from board, rotate player piece by that much, translate along it's z axis and then rotate 180 degrees to point back
//game board size = constant and homebase prefab base object is at 0,0,0 with the actual base object place at edge of board.
//thus the prefab's transform.translate value is always 0,0,0 so to place the pieces on the board for now, I will translate the
//pieces to where the board is. Once all code works, I will do this a better way like trying to find the translate value of the board
//itself, not the prefab.
//Note: I have seen the variable "childcount" but I have not seen a "child" method to access any of the children.
//NOTE: Need to figure out how to access children
tempPiece = new playPiece();
tempPiece.piece = Instantiate(playerModel,homeBase[base].board.transform.position, homeBase[base].board.transform.rotation);
tempPiece.piece.transform.Rotate(0,rotation,0);
tempPiece.piece.transform.Translate(0,0,2);
tempPiece.piece.transform.Rotate(0,180,0);
var currentHomeBase : homeBaseVars = homeBase[base];
currentHomeBase.avatar.push(tempPiece); //Error: The best method for push has some invalid parameter
currentHomeBase.avatar[i] = tempPiece; //ERROR: ArgumentException: invokeAttr
// currentHomeBase.avatar[i] = tempPlayPiece[i]; //ERROR: ArgumentException: invokeAttr
currentHomeBase.avatar[i].piece = Instantiate(playerModel,currentHomeBase.board.transform.position, currentHomeBase.board.transform.rotation);
// homeBase[base].avatar[i].piece.transform.Rotate(0,rotation,0);
// homeBase[base].avatar[i].piece.transform.Translate(0,0,2);
// homeBase[base].avatar[i].piece.transform.Rotate(0,180,0);
}
textarea.text = "avatar 2: " + homeBase[base].avatar.length;
}
//place collision prefab on start of every board segment to act as onEnterBlock trigger
function initMarkers()
{
var newSegment : Transform;
var RotateBy = 360 / segments;
for (i=0; i< segments; i++)
{
newSegment = Instantiate (block2Instantiate, transform.position, transform.rotation);
newSegment.transform.Rotate(0,i * RotateBy,0);
waypoints.push(newSegment);
}
for (i=0; i < players; i++)
{
initHomeBase(i, RotateBy);
}
}
function Start ()
{
if (players < 2) players = 2; //always at least 2 opponents to pit against each other
if (segments == 0) segments = 16; //just to have some segments
while (segments % players > 0) segments++; //equal segment count per player
homeBase.length = players;
initMarkers();
}
I changed the code above to use static typing instead of dynamic typing. Going with static typing is generally better since it gives you errors at compile time instead of run time and it is faster-
var currentHomeBase : homeBaseVars = homeBase[base];
currentHomeBase.avatar.push(tempPiece);
So now it runs the script without producing any exceptions.