Ejemplo n.º 1
0
    private void GenerateOrbitalLayer(int depth)
    {
        List <Orbital> orbits = new List <Orbital>();

        orbitLayers[depth] = orbits;
        OrbitalRandomRanges param = parameters[depth];

        int nbOrbits = UnityEngine.Random.Range(param.MinOrbitals, param.MaxOrbitals + 1);

        totalOrbitsGenerated += nbOrbits;

        while (totalOrbitsGenerated > maxOrbitals)
        {
            nbOrbits--;
            totalOrbitsGenerated--;
        }

        for (int i = 0; i < nbOrbits; i++)
        {
            Transform centerOfGravity;
            if (depth == 0)
            {
                centerOfGravity = transform;
            }
            else
            {
                List <Orbital> previousLayer = orbitLayers[depth - 1];
                centerOfGravity = previousLayer[Random.Range(0, previousLayer.Count)].transform;
            }

            //Generate an Orbit of that Layer
            Orbital orbit = Instantiate(orbitPrefab, centerOfGravity).GetComponent <Orbital>();


            orbit.InitializeOrbital(
                centerOfGravity,
                Random.Range(param.MinSpeed, param.MaxSpeed),
                Random.Range(param.MinRadius, param.MaxRadius),
                (Random.Range(0f, 1f) < param.ClockwiseProbability),
                Random.Range(param.MinSize, param.MaxSize));
            orbit.SetColor(orbitColors[Random.Range(0, orbitColors.Count)]);

            bool hasTrail = (Random.Range(0f, 1f) < param.TrailsProbability);
            if (hasTrail)
            {
                TrailSpawner spawner = orbit.gameObject.AddComponent <TrailSpawner>();
                spawner.InitializeTrail(
                    trailPrefab,
                    Random.Range(param.TParam.MinSpawnTime, param.TParam.MaxSpawnTime),
                    Random.Range(param.TParam.MinFadingTime, param.TParam.MaxFadingTime),
                    trailColors[Random.Range(0, trailColors.Count)],
                    Random.Range(param.TParam.MinSize, param.TParam.MaxSize)
                    );
            }

            orbits.Add(orbit);
        }
    }