public void PopulateSpot(List <Coord> spots, PrefabSize size) { List <PrefabData> prefabsAvaliable = new List <PrefabData>(); List <EssentialPrefabData> essentials = new List <EssentialPrefabData>(); float combinedDensity = 0; foreach (EssentialPrefabData prefab in essentialLevelPrefabs) { if (prefab.prefabSize == size && spots.Count > 0) { int randomChoice = Random.Range(0, spots.Count - 1); Vector3 position = CoordToWorldSpace(spots[randomChoice]) + new Vector3(Random.Range(-prefab.prefabPlacementRandomness / 2, prefab.prefabPlacementRandomness / 2), 0, Random.Range(-prefab.prefabPlacementRandomness / 2, prefab.prefabPlacementRandomness / 2)); Quaternion rotation = prefab.RandomRotationOnY ? Quaternion.Euler(0, Random.Range(0, 360), 0) : Quaternion.identity; Instantiate(prefab.prefab, position, rotation, levelObjectHolder); spots.RemoveAt(randomChoice); } } foreach (PrefabData prefab in levelPrefabs) { if (prefab.prefabSize == size) { prefabsAvaliable.Add(prefab); combinedDensity += prefab.levelDensity; } } if (prefabsAvaliable.Count > 0) { foreach (Coord spot in spots) { float randomChoice = Random.Range(0, combinedDensity); PrefabData prefabChoice = null; float currentDensity = 0; foreach (PrefabData prefab in prefabsAvaliable) { if (randomChoice <= currentDensity + prefab.levelDensity) { prefabChoice = prefab; break; } currentDensity += prefab.levelDensity; } Vector3 position = CoordToWorldSpace(spot) + new Vector3(Random.Range(-prefabChoice.prefabPlacementRandomness / 2, prefabChoice.prefabPlacementRandomness / 2), 0, Random.Range(-prefabChoice.prefabPlacementRandomness / 2, prefabChoice.prefabPlacementRandomness / 2));; Quaternion rotation = prefabChoice.RandomRotationOnY?Quaternion.Euler(0, Random.Range(0, 360), 0):Quaternion.identity; Instantiate(prefabChoice.prefab, position, rotation, levelObjectHolder); } } }
public void FindSpots(PrefabSize size, int passes, ref List <Coord> spotList, Color lineColour) { if (availibleLevel.Count > passes) { for (int i = 0; i < passes; i++) { int randomIdx = Random.Range(0, availibleLevel.Count - 1); Coord selectedCoord = availibleLevel[randomIdx]; Vector3 v = CoordToWorldSpace(selectedCoord); //Debug.DrawLine(v, v + Vector3.up * 10, lineColour, 20); if (CheckIfFit(selectedCoord.x, selectedCoord.y, (int)size)) { spotList.Add(selectedCoord); RemoveSpace(selectedCoord.x, selectedCoord.y, (int)size); } } } }