public Sprite RndPlanetSprite(PlanetInfo pi, Planet rp) { int rnd = Random.Range(0, spawnablePlanets.Length); SpawnablePlanet spawnable = spawnablePlanets[rnd]; pi.spriteInfo = spawnable; rp.planetSprite.sprite = spawnable.Planet; GenerateObstacles(pi, rp, spawnable); return(spawnable.Planet); }
public void GenerateObstacles(PlanetInfo pi, Planet planet, SpawnablePlanet spawnablePlanet) { CreateObstacleParentObjs(); float localplanetRad = planetRadius * planet.transform.localScale.x; int maxNumOfObs = Random.Range(2, 6); int numOfObsSpawned = 0; float sections = (Mathf.PI * 2) / 6; int[] anglesUsed = new int[maxNumOfObs]; while (numOfObsSpawned < maxNumOfObs) { bool obstaclesInWay = false; RaycastHit2D hit; int rndObstacle = Random.Range(0, Obstacles.Length); int rndAngle = Random.Range(1, 7); Vector3 anglePos = pi.position + new Vector3(Mathf.Cos(sections * rndAngle) * localplanetRad, Mathf.Sin(sections * rndAngle) * localplanetRad); Vector3 dir = (pi.position - anglePos).normalized; for (int i = 0; i < anglesUsed.Length; i++) { if (anglesUsed[i] == rndAngle) { obstaclesInWay = true; } } if (!obstaclesInWay) { int numOfObsAtAngle = Random.Range(0, 2); if (numOfObsAtAngle == 1) { //spawn 1 Transform obstacleObj = GameObject.Instantiate(Obstacles[rndObstacle]).transform; planet.obsOnPlanet.Add(obstacleObj); hit = Physics2D.Raycast(anglePos - dir, dir, anglePos.sqrMagnitude, planetMask); obstacleObj.GetComponent <IObstacle>().Setup(planet, anglePos, hit.normal, planet.transform.localScale); obstacleObj.transform.SetParent(obsParents[rndObstacle].transform, true); anglesUsed[numOfObsSpawned] = rndAngle; } else { //spawn 2 Transform obstacleObj1 = GameObject.Instantiate(Obstacles[rndObstacle]).transform; planet.obsOnPlanet.Add(obstacleObj1); Transform obstacleObj2 = GameObject.Instantiate(Obstacles[rndObstacle]).transform; planet.obsOnPlanet.Add(obstacleObj2); float extentsX = obstacleObj1.GetComponent <SpriteRenderer>().bounds.extents.x; hit = Physics2D.Raycast(anglePos - dir, dir, anglePos.sqrMagnitude, planetMask); obstacleObj1.GetComponent <IObstacle>().Setup(planet, anglePos, hit.normal, planet.transform.localScale); obstacleObj2.GetComponent <IObstacle>().Setup(planet, anglePos, hit.normal, planet.transform.localScale); obstacleObj1.transform.position += obstacleObj1.transform.right * extentsX * 2f; Vector2 dir1 = (planet.transform.position - obstacleObj1.transform.position); hit = Physics2D.Raycast(obstacleObj1.transform.position, dir1.normalized, anglePos.sqrMagnitude, planetMask); obstacleObj1.transform.up = hit.normal; obstacleObj1.transform.position -= obstacleObj1.transform.up * 0.07f; obstacleObj1.transform.SetParent(obsParents[rndObstacle].transform, true); obstacleObj2.transform.SetParent(obsParents[rndObstacle].transform, true); anglesUsed[numOfObsSpawned] = rndAngle; } numOfObsSpawned++; } } }