Exemplo n.º 1
0
    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);
    }