protected ChamberTrigger Setup(MapChamber chamber)
    {
        Chamber = chamber;

        //gameObject.AddComponent<Rigidbody2D>().bodyType = RigidbodyType2D.Static;
        //gameObject.AddComponent<CompositeCollider2D>().isTrigger = true;
        //GetComponent<Rigidbody2D>().bodyType = RigidbodyType2D.Static;

        foreach (Vector2 loc in chamber.locations)
        {
            gameObject.AddComponent <CircleCollider2D>();//.usedByComposite = true ;
        }
        CircleCollider2D[] colliders = gameObject.GetComponents <CircleCollider2D>();
        for (int i = 0; i < colliders.Length; i += 1)
        {
            CircleCollider2D collider = colliders[i];
            collider.isTrigger = true;
            collider.radius    = chamber.widths[i] / 2;
            collider.offset    = chamber.locations[i] - (Vector2)transform.position;

            GameObject circle = Instantiate(CirclePrefab, chamber.locations[i], Quaternion.identity);
            circle.transform.parent     = transform;
            circle.transform.localScale = new Vector2(chamber.widths[i], chamber.widths[i]);
            circle.GetComponent <SpriteRenderer>().color = Color.black;
            //Debug.Log(chamber.locations[i] + " " + chamber.widths[i]);
        }

        return(this);
    }
Пример #2
0
    public static MapChamber EndChamberTunnel(Vector2 location, float radius)
    {
        location = Utility.WorldPointToHoneycombPos(location);
        MapChamber newChamber = new MapChamber(location);

        newChamber.AddChamber(location, radius * 2);
        return(newChamber);
    }
Пример #3
0
    public static MapChamber RandomChamber(Vector2 location, float radius, int voidCount)
    {
        MapChamber newChamber = new MapChamber(location);

        //newChamber.Location = location;
        for (int i = 0; i < voidCount; i++)
        {
            float   alpha = Random.Range(0, 360);
            float   h     = Random.Range(radius / 4, radius); //may need to change the range do we don't get a void with zero width
            Vector2 loc   = new Vector2(h * Mathf.Cos(alpha), h * Mathf.Sin(alpha));
            loc += location;
            float r = radius - Vector2.Distance(location, loc);
            newChamber.AddChamber(loc, r * 2);
            //Debug.Log("new chamber section: loc " + loc + " radius: " + r);
        }
        return(newChamber);
    }
    private void createVoids()
    {
        //Debug.Log("magnitude of zero vector: " + Vector2.zero.normalized);
        MapPath newPath = MapPath.CreateJoggingPath(Player.position, new Vector2(35, 3f), -5, 5, 1, 3, 2, 4);

        Map.StaticMap.AddVoid(newPath);

        newPath = MapPath.CreateJoggingPath(Player.position, new Vector2(-10, -10f), -5, 5, 1, 3, 2, 4);
        Map.StaticMap.AddVoid(newPath);

        MapChamber newChamber = new MapChamber(new Vector2(35, 5));

        newChamber.AddChamber(new Vector2(35, 5), 10);
        newChamber.AddChamber(new Vector2(30, 3), 6);
        Map.StaticMap.AddVoid(newChamber);


        Map.StaticMap.AddVoid(MapChamber.RandomChamber(new Vector2(-20, 20), 10));
    }
    private void createRandomMap(float voidCount)
    {
        List <MapVoid> newVoids  = new List <MapVoid>();
        List <bool>    connected = new List <bool>();

        List <Vector2> locations = new List <Vector2>();

        //Added player spawn point
        locations.Add(Player.position);
        MapChamber spawnChamber = MapChamber.RandomChamber(Player.position, 3);

        PlayerSpawn     = Instantiate(PortalPrefab, spawnChamber.Location, Quaternion.identity).GetComponent <Portal>();
        Player.position = spawnChamber.locations[0];
        //addChamberTrigger(PlayerSpawn, spawnChamber);
        PlayerSpawn = (Portal)ChamberTrigger.SetupChamberTrigger(PortalPrefab, spawnChamber);
        newVoids.Add(spawnChamber);
        connected.Add(false);

        Map     map    = Map.StaticMap;
        Vector2 origin = new Vector2(map.MapOrigin.x * map.HorizontalSpacing, map.MapOrigin.y * map.VerticalSpacing);
        Vector2 mapMin = origin + new Vector2(15, 15);
        Vector2 mapMax = origin + new Vector2(map.MapWidth, map.MapHeight) - new Vector2(15, 15);

        //create snake Chamber
        Vector2    snakeChamberLoc = Utility.HoneycombGridToWorldPostion(new HoneycombPos(150, 100));
        MapChamber snakeChamber    = MapChamber.RandomChamber(snakeChamberLoc, 15);

        //ChamberTrigger snakeChamberTrigger = Instantiate(ChamberTriggerPrefab, snakeChamberLoc, Quaternion.identity).GetComponent<ChamberTrigger>();
        //addChamberTrigger(snakeChamberTrigger, snakeChamber);
        ChamberTrigger.SetupChamberTrigger(ChamberTriggerPrefab, snakeChamber);
        newVoids.Add(snakeChamber);
        SnakePit.position = snakeChamberLoc;

        //create random chambers
        for (int i = 0; i < voidCount; i += 1)
        {
            float xLoc   = Random.Range(mapMin.x, mapMax.x);
            float yLoc   = Random.Range(mapMin.y, mapMax.y);
            float radius = Random.Range(5, 15);
            newVoids.Add(MapChamber.RandomChamber(new Vector2(xLoc, yLoc), radius));
            connected.Add(false);

            locations.Add(new Vector2(xLoc, yLoc));
        }

        //MapChamber endChamber = (MapChamber)newVoids[newVoids.Count - 1];
        //for(int i = 1; i < voidCount - 1; i+=1)
        //{
        //    if(Vector2.Distance(spawnChamber.Location, endChamber.Location) < Vector2.Distance(spawnChamber.Location, ((MapChamber)newVoids[i]).Location)) {
        //        endChamber = (MapChamber)newVoids[i];
        //    }
        //}
        MapChamber endChamber = MapChamber.EndChamberTunnel(Player.position, 8);

        newVoids.Add(endChamber);
        connected.Add(false);
        locations.Add(Utility.WorldPointToHoneycombPos(Player.position));
        //setup Exit tunnel
        //Exit = Instantiate(PortalPrefab, endChamber.Location, Quaternion.identity).GetComponent<Portal>();
        //addChamberTrigger(Exit, endChamber);
        Exit = (Portal)ChamberTrigger.SetupChamberTrigger(PortalPrefab, endChamber);
        ExitTunnel.position = Exit.Chamber.Location;



        //connect chambers
        for (int i = 0; i < voidCount; i += 1)
        {
            while (!connected[i])
            {
                int connecting = (int)Random.Range(0, voidCount - 1);
                if (connecting != i)
                {
                    newVoids.Add(MapPath.CreateJoggingPath(((MapChamber)newVoids[i]).ClosestEntrancePoint(locations[connecting]), locations[connecting], -2, 2, 2, 6, 2, 2));
                    connected[i] = true;
                }
            }
        }

        map.AddVoid(newVoids);

        mapVoids = newVoids;
        //Debug.Log("void wall count: " + newVoids[newVoids.Count - 1].GetVoidWalls().Count);
    }
    public static ChamberTrigger SetupChamberTrigger(GameObject prefab, MapChamber chamber)
    {
        ChamberTrigger trigger = Instantiate(prefab, chamber.Location, Quaternion.identity).GetComponent <ChamberTrigger>();

        return((trigger).Setup(chamber));
    }