Example #1
0
    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);
    }
Example #2
0
    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++;
            }
        }
    }