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); }
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])); }