Beispiel #1
0
    public bool SpawnLevel(SO_Planet starterPlanet, List <SO_Planet> planets, List <SO_Planet> joiningPlanets, int numberOfPlanets)
    {
        SpawnedPlanets        = new List <SpawnedPlanet>();
        SpawnedJoiningPlanets = new List <SpawnedPlanet>();

        // Instantiate Starter Planet
        SpawnStarterPlanet(starterPlanet);


        for (int i = 0; i < numberOfPlanets; i++)
        {
            bool spawned = false;
            while (!spawned)
            {
                // Select Random planets
                int rSpawnPlanet   = Random.Range(0, SpawnedPlanets.Count);
                int rJoiningPlanet = Random.Range(0, joiningPlanets.Count);
                int rPlanet        = Random.Range(0, planets.Count);
                rPlanet = i < planets.Count ? i : rPlanet;

                // Get Planet Data
                SO_Planet joiningData = joiningPlanets[rJoiningPlanet];
                SO_Planet planetData  = planets[rPlanet];

                // Create random vector for joining planet
                Vector3 joiningOrigin = RandomSpawnPoint(SpawnedPlanets[rSpawnPlanet], joiningData.size, true);

                // Check if it is a spawnable vector
                if (IsSpawnable(joiningOrigin, joiningData.size))
                {
                    SpawnedPlanet joiningPlanet = new SpawnedPlanet(joiningOrigin, joiningData.size);

                    // Repeat for the spawning planet
                    Vector3 planetOrigin = RandomSpawnPoint(joiningPlanet, planetData.size, false);

                    if (IsSpawnable(planetOrigin, planetData.size))
                    {
                        SpawnedPlanet planet = new SpawnedPlanet(planetOrigin, planetData.size);

                        // Spawn Planets
                        SpawnPlanet(m_Astroid, joiningData, joiningOrigin);
                        SpawnPlanet(m_Astroid, planetData, planetOrigin);
                        SpawnedJoiningPlanets.Add(joiningPlanet);
                        SpawnedPlanets.Add(planet);

                        // End Loop
                        spawned = true;
                    }
                }
            }
        }
        return(true);
    }
Beispiel #2
0
    private Vector3 RandomSpawnPoint(SpawnedPlanet spawnPlanet, int size, bool isJoining)
    {
        int minSep = spawnPlanet.Size + size;
        int maxSep = minSep + m_MaximumPlanetColliderSeperation;

        int rAxis = Random.Range(0, 3);

        int[] rVals = new int[] {
            Random.Range(-minSep, minSep), Random.Range(-minSep, minSep), Random.Range(-minSep, minSep)
        };

        if (isJoining)
        {
            rVals[rAxis] = ((Random.Range(0, 2) * 2) - 1) * (minSep + m_JoiningPlanetSeperation);
        }
        else
        {
            rVals[rAxis] = ((Random.Range(0, 2) * 2) - 1) * Random.Range(minSep + m_MinimumPlanetColliderSeperation, maxSep);
        }

        return(spawnPlanet.Origin + new Vector3(rVals[0], rVals[1], rVals[2]));
    }