public static void OpenWindow() { //GetWindow<PrefabCreator>("Prefab Creator"); ProceduralLevelGenerator window = (ProceduralLevelGenerator)GetWindow(typeof(ProceduralLevelGenerator)); //window.minSize = new Vector2(600, 450); //window.maxSize = new Vector2(600, 450); window.Show(); }
private void Start() { // temporary spawning code // should setup the whole game - e.g., 10 levels, including the first "tutorial" level and the "boss" level _cam = GameObject.Find("Main Camera").GetComponent <Camera>(); _levels = new Level[LevelsToGenerate + 2]; var levelGenerator = new ProceduralLevelGenerator(); _levelsParent = new GameObject("Levels"); // first generate data _levels[0] = new Level(0); PremadeLevelGenerator.GenerateFirstLevel(_levels[0]); _levels[_levels.Length - 1] = new Level(_levels.Length - 1); PremadeLevelGenerator.GenerateBossLevel(_levels[_levels.Length - 1]); for (int i = 0; i < LevelsToGenerate; i++) { _levels[i + 1] = new Level(i + 1); levelGenerator.Generate(_levels[i + 1], LevelResolution, LevelMinRoomSize, LevelMaxDepthOffset); } // now spawn stuff for (int i = 0; i < _levels.Length; i++) { var levelParent = new GameObject($"Level {i}"); levelParent.transform.parent = _levelsParent.transform; _levels[i].WorldParent = levelParent.transform; _levels[i].WorldParent.localPosition = new Vector3(i * LevelResolution * 2, 0, 0); for (int x = 0; x < _levels[i].Size; x++) { for (int y = 0; y < _levels[i].Size; y++) { var tile = WorldGenerator.Instance.SpawnStaticWorldBlock(_levels[i], new Vector2Int(x, y), _levels[i].Map[x, y]); if (tile is EntranceTile enter) { enter.PreviousLevel = _levels[i - 1]; } if (tile is ExitTile exit) { exit.NextLevel = _levels[i + 1]; } } } if (_levels[i].IsProcedural) { var locations = _levels[i].GenerateItemLocationList(); for (int j = 0; j < 10; j++) { WorldGenerator.Instance.SpawnUnit(_levels[i], locations[j], UnitType.Enemy01); } for (int j = 10; j < 20; j++) { WorldGenerator.Instance.SpawnPickupItem(_levels[i], locations[j]); } } // last "boss" level if (!_levels[i].IsProcedural && i == _levels.Length - 1) { WorldGenerator.Instance.SpawnUnit(_levels[i], new Vector2Int(7, 7), UnitType.Boss); } } _currentLevelIdx = 0; if (CurrentLevel.TryGetAnyWalkablePosition(out Vector2Int posToSpawnAiUnit)) { Span <Vector2Int> neighbours = stackalloc Vector2Int[4]; int count = CurrentLevel.GetNeighbours(posToSpawnAiUnit, in neighbours); if (count > 0) { var player = WorldGenerator.Instance.CreatePlayer(); CurrentLevel.AddPlayer(player, neighbours[0]); player.transform.position = new Vector3(player.CurrentPosition.x, 0, player.CurrentPosition.y); _cam.GetComponent <FollowingCamera>().Target = player.transform; CurrentPlayer = player; } else { throw new InvalidOperationException("nowhere to spawn the player"); } } }