コード例 #1
0
    void EndMinigame()
    {
        audioCtrl.source.PlayOneShot(victory);
        Collider[] hits;
        Collider   golden = null;
        int        i;

        // Sphere Raycast to center
        hits = Physics.OverlapSphere(center.position, .25f, 1 << gameObject.layer);
        if (hits.Length > 0)
        {
            // Find the Golden Score
            i = 0;
            bool found = false;
            while (i < hits.Length && !found)
            {
                if (hits[i].GetComponent <SoccerBall>() != null)
                {
                    golden = hits[i];
                    found  = true;
                }
                i++;
            }
        }
        // Sphere Raycast to extents
        List <SoccerBall> hitBalls = null;

        hits = Physics.OverlapSphere(center.position, 1.75f, 1 << gameObject.layer);
        if (hits.Length > 0)
        {
            hitBalls = new List <SoccerBall>(hits.Length);
            i        = 0;
            while (i < hits.Length)
            {
                if (hits[i].GetComponent <SoccerBall>() != null && hits[i] != golden)
                {
                    hitBalls.Add(hits[i].GetComponent <SoccerBall>());
                }
                i++;
            }
        }
        // Assign points to players
        int[] results = new int[players.Length];
        // Golden Ball Assignment
        if (golden != null)
        {
            results[golden.GetComponent <SoccerBall>().id] = 3;
        }
        if (hitBalls != null)
        {
            for (i = 0; i < hitBalls.Count; i++)
            {
                results[hitBalls[i].id]++;
            }
        }
        // Define Score
        for (i = 0; i < results.Length; i++)
        {
            players[i].matchMinigameResults[minigameTurn] = results[i];
        }
        players = players.OrderByDescending(p => p.matchMinigameResults[minigameTurn]).ToArray();
        // Define standing
        bool relay;
        int  prevScore    = 0,
             prevStanding = -1;

        for (i = 0; i < players.Length; i++)
        {
            relay = true;
            // Check for draws
            if (i > 0)
            {
                if (players[i].matchMinigameResults[minigameTurn] == prevScore)
                {
                    players[i].matchMinigameResults[minigameTurn] = prevStanding;
                    relay = false;
                }
            }
            if (relay)
            {
                prevScore = players[i].matchMinigameResults[minigameTurn];
                // Assign standing
                players[i].matchMinigameResults[minigameTurn] = prevStanding + 1;
                prevStanding = players[i].matchMinigameResults[minigameTurn];
            }
        }
        // Assign values to original players
        int j = 0;

        for (i = 0; i < players.Length; i++)
        {
            relay = false;
            j     = 0;
            while (!relay && j < players.Length)
            {
                if (manager.players[i].name == players[j].name)
                {
                    manager.players[i].matchMinigameResults[minigameTurn] = players[j].matchMinigameResults[minigameTurn];
                    relay = true;
                }
                j++;
            }
        }
        canvas.ToggleButtons();
        canvas.TogglePlayerName();
        canvas.DisplayMinigameResults(players);
        minigameTurn++;
    }