void CreateRacers(RaceController raceController) { Racer[] racers = new Racer[client.GetPlayerList().Count + (int)settings.aiBallCount]; int position = 0; int row = 0; foreach (ServerPlayer sp in client.GetPlayerList()) { if (sp.spectating) { continue; //Don't spawn spectators } Character c = Global.characters[sp.character]; //Get character for player Object o; if (sp.player == Network.player) { o = playerBallPrefab; //Is mlg mode? if (c.attributes.Contains("sponsored by mlg")) { Instantiate(mlgModeObject); } } else { o = remoteBallPrefab; } Racer r = (Racer)Instantiate(o, raceController.spawnPoint.GetSpawnPoint(position, c.ballSize / 2), raceController.spawnPoint.transform.rotation * Quaternion.Euler(0, -90, 0)); r.name = o.name + "-" + sp.name; //Set character traits r.racerName = sp.name; r.renderer.material = c.material; r.mapIconMaterial = c.minimapIcon; r.GetComponent <TrailRenderer>().material = c.trail; if (c.alternativeMesh != null) { r.GetComponent <MeshFilter>().mesh = c.alternativeMesh; } BallControl bc = r.GetComponent <BallControl>(); if (bc != null) { bc.stats = c.stats; } r.transform.localScale = new Vector3(c.ballSize, c.ballSize, c.ballSize); if (o == remoteBallPrefab) { GUIText label = r.transform.FindChild("ObjectLabel").guiText; label.text = sp.name; label.color = PlayerTypeHandler.GetPlayerColor(sp.type); } //Do more stuff r.totalLaps = (int)settings.laps; //Add racer to list sp.racer = r; racers[position] = r; position++; } //Create AI balls int aiPos = 0; Racer[] balllist = new Racer[(int)settings.aiBallCount]; for (int i = 0; i < settings.aiBallCount; i++) { //TO BE CHANGED (COPYPASTE IS BAD) //Calc position to put racer at Vector3 dir; if (position % 11 == 10) { row++; } if (position % 2 == 0) { dir = Vector3.right * ((position % 10) / 2 + 1) * 2; } else { dir = Vector3.left * ((position % 10) / 2) * 2; } dir += (Vector3.back * 1.4f) * row; Character c; if (aiPos < settings.aiCharacters.Count) { c = Global.characters[(int)settings.aiCharacters[aiPos]]; //Get character for player } else { c = Global.characters[1]; //Default to knackles } Object o; if (Network.isServer) { o = aiBallPrefab; } else { o = remoteBallPrefab; } Racer r = (Racer)Instantiate(o, raceController.spawnPoint.GetSpawnPoint(position, c.ballSize / 2), raceController.spawnPoint.transform.rotation * Quaternion.Euler(0, -90, 0)); r.name = o.name + "-" + c.name; //Set character traits r.racerName = c.name; r.renderer.material = c.material; r.mapIconMaterial = c.minimapIcon; r.GetComponent <TrailRenderer>().material = c.trail; BallControl bc = r.GetComponent <BallControl>(); if (bc != null) { bc.stats = c.stats; } r.transform.localScale = new Vector3(c.ballSize, c.ballSize, c.ballSize); //Do more stuff r.totalLaps = (int)settings.laps; //Add racer to list balllist[aiPos] = r; //Set aiball for client racers[position] = r; position++; aiPos++; } client.SetAIBalls(balllist); raceController.SetRacers(racers); }