public IEnumerator GenerateResources(Random random, int[,] map, int squareSize, int openTile) { yield return(CorutineUtilities.Wait(0.01f, "Started resource generation")); goldParent = GameObject.Find("Gold").transform; scrapParent = GameObject.Find("Scrap").transform; this.random = random; this.map = map; this.openTile = openTile; this.squareSize = squareSize; resourcePositions = new List <Vector2>(); RandomizeResourcePlacements(); yield return(CorutineUtilities.Wait(0.01f, "Randomized resource positions")); if (GameObject.FindGameObjectWithTag(ReferenceManager.Singleton.LocalPlayerTag).GetComponent <NetworkBehaviour>().isServer) { foreach (Vector2 position in resourcePositions) { GenerateResource(position); } } yield return(CorutineUtilities.Wait(0.01f, "Generated resources")); }
public IEnumerator GenerateEnemies(Random random) { yield return(CorutineUtilities.Wait(0.01f, "Started enemy generation")); //Todo parentmap spawns all Enemies at 0,0,0. Must be insstaniated right (world position) parentMap = GameObject.Find("Enemies").transform; this.random = random; enemyPositions = new List <Vector2>(); enemyTypes.Add(EnemyType.Booba, spawnRateBobba); enemyTypes.Add(EnemyType.Clonker, spawnRateClonker); enemyTypes.Add(EnemyType.Popper, spawnRatePopper); enemyTypes.Add(EnemyType.Spook, spawnRateSpook); RandomizeEnemyPlacements(); yield return(CorutineUtilities.Wait(0.01f, "Randomized enemy positions")); if (GameObject.FindGameObjectWithTag(ReferenceManager.Singleton.LocalPlayerTag).GetComponent <NetworkBehaviour>().isServer) { foreach (Vector2 position in enemyPositions) { GenerateEnemies(position); } } yield return(CorutineUtilities.Wait(0.01f, "Generated enemies")); }
private IEnumerator CalculateMeshOutlines() { for (int vertexIndex = 0; vertexIndex < vertices.Count; vertexIndex++) { if (!checkedVertices.Contains(vertexIndex)) { int newOutlineVertex = GetConnectedOutlineVertex(vertexIndex); if (newOutlineVertex != -1) { checkedVertices.Add(vertexIndex); List <int> newOutline = new List <int> { vertexIndex }; outlines.Add(newOutline); FollowOutline(newOutlineVertex, outlines.Count - 1); outlines[outlines.Count - 1].Add(vertexIndex); } } if (CorutineUtilities.WaitAmountOfTimes(vertexIndex, vertices.Count, 30)) { yield return(Wait("Calculating mesh outlines")); } } }
private WaitForSeconds Wait(string text = "") => CorutineUtilities.Wait(timeToWait, text);
protected IEnumerator ConnectRooms(List <Room> roomsA, List <Room> roomsB) { bool possibleConnectionEstablished = false; bool isForcingStartAccesibility = !roomsA.Equals(roomsB); Room bestRoomA = null, bestRoomB = null; Coordinate bestTileA = new Coordinate(), bestTileB = new Coordinate(); int closestDistance = 0, roomCheckFrequency = 4; foreach (Room roomA in roomsA) { if (!isForcingStartAccesibility) { possibleConnectionEstablished = false; if (roomA.ConnectedRooms.Count > 0) { continue; } } foreach (Room roomB in roomsB) { if (roomA == roomB || roomA.IsConnected(roomB)) { continue; } for (int tileIndexA = 0; tileIndexA < roomA.EdgeTiles.Count; tileIndexA++) { if (tileIndexA % roomCheckFrequency != 0) { continue; } for (int tileIndexB = 0; tileIndexB < roomB.EdgeTiles.Count; tileIndexB++) { if (tileIndexB % roomCheckFrequency != 0) { continue; } Coordinate tileA = roomA.EdgeTiles[tileIndexA]; Coordinate tileB = roomB.EdgeTiles[tileIndexB]; int distanceBetweenRooms = (int)(Mathf.Pow(tileA.TileX - tileB.TileX, 2) + Mathf.Pow(tileA.TileY - tileB.TileY, 2)); if (distanceBetweenRooms < closestDistance || !possibleConnectionEstablished) { closestDistance = distanceBetweenRooms; possibleConnectionEstablished = true; bestTileA = tileA; bestTileB = tileB; bestRoomB = roomA; bestRoomA = roomB; } } if (CorutineUtilities.WaitAmountOfTimes(tileIndexA, roomA.EdgeTiles.Count, 10)) { yield return(Wait("Finding closest tiles")); } } } if (possibleConnectionEstablished && !isForcingStartAccesibility) { CreatePassage(bestRoomA, bestRoomB, bestTileA, bestTileB); } } if (possibleConnectionEstablished && isForcingStartAccesibility) { CreatePassage(bestRoomA, bestRoomB, bestTileA, bestTileB); List <Room> rooms = roomsA.Union(roomsB).ToList(); yield return(StartCoroutine(ConnectAllRooms(rooms, true))); } }