예제 #1
0
    public void CreateStars(int count)
    {
        for (int i = 0; i < count; i++)
        {
            var     random   = new System.Random();
            Vector2 position = new Vector2(UnityEngine.Random.Range(-mapField.x * .5f, mapField.x * .5f), UnityEngine.Random.Range(-mapField.y * .5f, mapField.y * .5f));
            position = new Vector2((float)NormalizedRandom(-mapField.x * .5f, mapField.x * .5f), (float)NormalizedRandom(-mapField.y * .5f, mapField.y * .5f));
            SolarModel star = new SolarModel(names.GenerateWorldName() + " " + (i + 1), i, position, sunSizeColor);
            game.data.stars.Add(star);
        }

        for (int i = 0; i < game.data.stars.Count; i++)     //Checking the distance to each already generated star and then adding it to a list of near stars if close enough
        {
            for (int c = 0; c < game.data.stars.Count; c++) //Checking the distance to each already generated star and then adding it to a list of near stars if close enough
            {
                if (c != i)
                {
                    double maxDist    = 20 * GameDataModel.galaxyDistanceMultiplication;
                    double actualDist = Vector3.Distance(game.data.stars[i].galacticPosition, game.data.stars[c].galacticPosition);
                    if (actualDist < maxDist)
                    {
                        game.data.stars[i].nearStars.Add(game.data.stars[c]);
                        game.data.stars[c].nearStars.Add(game.data.stars[i]);
                    }
                }
            }
        }
        float connectedness = 0;

        for (int i = 0; i < count; i++)
        {
            float closestStarDist  = 1000000000000000;
            int   closestStarIndex = 0;
            for (int c = 0; c < count; c++)
            {
                if (c != i)
                {
                    float actualDist = Vector3.Distance(game.data.stars[i].galacticPosition, game.data.stars[c].galacticPosition);
                    if (actualDist < closestStarDist)
                    {
                        closestStarDist  = actualDist;
                        closestStarIndex = c;
                    }
                }
            }
            if (game.data.stars[i].nearStars.Count == 0)
            {
                game.data.stars[i].nearStars.Add(game.data.stars[closestStarIndex]);
                game.data.stars[closestStarIndex].nearStars.Add(game.data.stars[i]);
                //print("Connected disconnected star");
            }
            connectedness += game.data.stars[i].nearStars.Count;
        }
        connectedness /= count;
        print("Connectedness average: " + connectedness);
    }