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); }
public static MapChamber EndChamberTunnel(Vector2 location, float radius) { location = Utility.WorldPointToHoneycombPos(location); MapChamber newChamber = new MapChamber(location); newChamber.AddChamber(location, radius * 2); return(newChamber); }
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)); }