Exemplo n.º 1
0
        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"));
        }
Exemplo n.º 2
0
        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"));
        }
Exemplo n.º 3
0
        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"));
                }
            }
        }
Exemplo n.º 4
0
 private WaitForSeconds Wait(string text = "") => CorutineUtilities.Wait(timeToWait, text);
Exemplo n.º 5
0
        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)));
            }
        }