void Start() { GameObject CurrentTile = ColorTile[Random.Range(0, 5)]; player.transform.position = new Vector2(2, 2); for (int i = 0; i <= 11; i++) { walls.Add(Instantiate(CurrentTile, new Vector2(20, i), Quaternion.identity)); } for (float i = 0; i <= 11; i++) { walls.Add(Instantiate(CurrentTile, new Vector2(0, i), Quaternion.identity)); } for (int i = 0; i <= 20; i++) { walls.Add(Instantiate(CurrentTile, new Vector2(i, 11), Quaternion.identity)); } for (int i = 0; i <= 20; i++) { walls.Add(Instantiate(CurrentTile, new Vector2(i, 0), Quaternion.identity)); } for (int i = 0; i <= 3; i++) { // walls.Add(Instantiate(Platform, new Vector2(i+9, 5), Quaternion.identity)); walls.Add(Instantiate(Platform, new Vector2(i + 13, 3), Quaternion.identity)); walls.Add(Instantiate(Platform, new Vector2(i + 4, 3), Quaternion.identity)); } walls.Add(Instantiate(CurrentTile, new Vector2(10, 1), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(10, 2), Quaternion.identity)); walls.Add(Instantiate(Platform, new Vector2(1, 2), Quaternion.identity)); walls.Add(Instantiate(Platform, new Vector2(19, 2), Quaternion.identity)); // Generate bool array of the map bottomLeft = new Vector2(walls.Select(w => w.transform.position.x).Min(), walls.Select(w => w.transform.position.y).Min()); topRight = new Vector2(walls.Select(w => w.transform.position.x).Max(), walls.Select(w => w.transform.position.y).Max()); mapSize = new Vector2(topRight.x - bottomLeft.x + 1, topRight.y - bottomLeft.y + 1); bool[,] map = new bool[(int)mapSize.x, (int)mapSize.y]; foreach (GameObject w in walls) { Vector2 pos = (Vector2)w.transform.position - bottomLeft; map[(int)pos.x, (int)pos.y] = true; } // Generate NavMesh NavMeshGenerator.Offset = bottomLeft; Nodes = NavMeshGenerator.GenerateNavMesh(map); GameController.Nodes = Nodes; Vector3 spawn = SpawnPoint.transform.position; for (int i = 0; i < Bosses; i++) { var boss = Instantiate(KingMeowster, spawn, Quaternion.identity); boss.GetComponent <KingMeowster>().Target = player; } GameController.AliveBosses = Bosses; }
void Start() { int size = Random.Range(MinRoomSize, MaxRoomSize); GameObject CurrentTile = WallTiles[Random.Range(0, 5)]; GameController.RespawnPoint = new Vector2(Mathf.Round((-1 * size) / 2) + 1, 3); player.transform.position = GameController.RespawnPoint; float tracker = 0f; int sizeSides = Random.Range(MinSideSize, MaxSideSize); // Generate floor for (float i = Mathf.Round((-1 * size) / 2); i <= Mathf.Round(size / 2); i++) { float Percentage = Random.value; if (tracker == -2f) { walls.Add(Instantiate(Platform, new Vector2(i - 1, 1), Quaternion.identity)); } if (Percentage <= Straight) { walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity)); } else if (Percentage <= Straight + ONE && Percentage > Straight && tracker <= 1) { tracker += 1f; walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker - 1), Quaternion.identity)); } else if (Percentage <= Straight + ONE + ONE && Percentage > Straight + ONE && tracker >= -1) { tracker -= 1f; walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker), Quaternion.identity)); } else if (Percentage < 1 && Straight + ONE + ONE < Percentage && tracker >= 0) { tracker -= 2f; walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker + 1f), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity)); } else if (Percentage < 1 && Straight + ONE + ONE < Percentage && tracker < 0) { tracker += 2f; walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker - 1f), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(i - 1, tracker), Quaternion.identity)); walls.Add(Instantiate(CurrentTile, new Vector2(i, tracker), Quaternion.identity)); } } // Generate walls for (int i = 0; i <= sizeSides; i++) { walls.Add(Instantiate(CurrentTile, new Vector2(Mathf.Round((-1 * size) / 2) - 1, i), Quaternion.identity)); } for (float i = tracker; i <= sizeSides; i++) { walls.Add(Instantiate(CurrentTile, new Vector2(Mathf.Round(size / 2) + 1, i), Quaternion.identity)); } for (int i = 1; i <= Mathf.Round(size / 2); i++) { walls.Add(Instantiate(CurrentTile, new Vector2(i, sizeSides), Quaternion.identity)); } for (int i = 1; i >= Mathf.Round((-1 * size) / 2); i--) { walls.Add(Instantiate(CurrentTile, new Vector2(i, sizeSides), Quaternion.identity)); } // Generate bool array of the map bottomLeft = new Vector2(walls.Select(w => w.transform.position.x).Min(), walls.Select(w => w.transform.position.y).Min()); topRight = new Vector2(walls.Select(w => w.transform.position.x).Max(), walls.Select(w => w.transform.position.y).Max()); mapSize = new Vector2(topRight.x - bottomLeft.x + 1, topRight.y - bottomLeft.y + 1); bool[,] map = new bool[(int)mapSize.x, (int)mapSize.y]; foreach (GameObject w in walls) { Vector2 pos = (Vector2)w.transform.position - bottomLeft; map[(int)pos.x, (int)pos.y] = true; } // Generate NavMesh NavMeshGenerator.Offset = bottomLeft; Nodes = NavMeshGenerator.GenerateNavMesh(map); GameController.Nodes = Nodes; // Spawn enemies var SpawnPoints = Nodes.Cast <Node>().Where(n => n.IsWalkable).Select(n => n.pos + NavMeshGenerator.Offset); for (int i = 0; i < Enemies; i++) { int CurrentPoint = Random.Range(0, SpawnPoints.Count()); var enemy = Instantiate(BolsjeDreng, new Vector2(SpawnPoints.ElementAt(CurrentPoint).x, SpawnPoints.ElementAt(CurrentPoint).y), Quaternion.identity); enemy.GetComponent <BolsjeDreng>().Target = player; } GameController.AliveEnemies = Enemies; }