public override IEnumerator Generate(LevelGenerator generator, object[] generationData) { settings = LevelGenerator.GetMetaDataObject <GenerationSettings>(generationData); levelMetadata = LevelGenerator.GetMetaDataObject <LevelMetadata>(generationData); bool lastRoom = true; for (int i = 0; i < levelMetadata.LevelData.Flors.Count; i++) { GameObject instance = null; LevelMetadata.Level.Flor flor = levelMetadata.LevelData.Flors[i]; if (i < levelMetadata.LevelData.Flors.Count - 1) { instance = settings.StarCaseInstance; var room = levelMetadata.LevelData.Flors[i].Rooms[lastRoom ? levelMetadata.LevelData.Flors[i].Rooms.Count - 1 : 0]; var position = room.gameObject.transform.position; position = position + (room.gameObject.transform.right * (room.Size.x / 2)) + room.gameObject.transform.up * levelMetadata.LevelData.Flors[i].GroundLevel; instance.transform.position = position; var nextFlor = levelMetadata.LevelData.Flors[i + 1]; var teleport = instance.GetComponent <TeleportPlayerAction>(); teleport.GizmoColor = Color.green; teleport.Destination = new Vector3(position.x, nextFlor.Height + nextFlor.GroundLevel, position.z); instance = settings.StarCaseInstance; instance.transform.position = teleport.Destination; teleport = instance.GetComponent <TeleportPlayerAction>(); teleport.GizmoColor = Color.red; teleport.Destination = position; lastRoom = !lastRoom; } yield return(null); } _isDone = true; }
public override IEnumerator Generate(LevelGenerator generator, object[] generationData) { settings = LevelGenerator.GetMetaDataObject <GenerationSettings>(generationData); levelMetadata = LevelGenerator.GetMetaDataObject <LevelMetadata>(generationData); var levelSize = settings.StartLevelSize; for (int i = 0; i < levelSize.x; i++) { GameObject floarObject = new GameObject(string.Format("Flor {0}", i)); levelMetadata.LevelData.AddFlor(settings.GroundLevel); for (int j = 0; j < levelSize.y; j++) { var instance = j == 0 ? settings.LevelBoxLeftEdgeInstance : j == levelSize.y - 1 ? settings.LevelBoxRightEdgeInstance : settings.LevelBoxInstance; instance.transform.SetParent(floarObject.transform); var room = instance.GetComponent <Room>(); if (room != null) { instance.transform.position = new Vector3(j * room.Size.x, i * room.Size.y); levelMetadata.LevelData.AddRoom(room); } else { Debug.LogErrorFormat("Prefab named {0} don't contain component type of {1}", instance.name, typeof(Room).Name); j--; } yield return(null); } levelMetadata.LevelBounds.MaxWidth = levelMetadata.LevelBounds.MaxWidth < levelMetadata.LevelData.Flors[i].Width ? levelMetadata.LevelData.Flors[i].Width : levelMetadata.LevelBounds.MaxWidth; levelMetadata.LevelBounds.MaxHeight = levelMetadata.LevelData.Flors[i].Height + levelMetadata.LevelData.Flors[i].Rooms[0].Size.y; } _isDone = true; }
public override IEnumerator Generate(LevelGenerator generator, object[] generationData) { settings = LevelGenerator.GetMetaDataObject <GenerationSettings>(generationData); levelMetadata = LevelGenerator.GetMetaDataObject <LevelMetadata>(generationData); for (int i = settings.StartFlorIndex; i < levelMetadata.LevelData.Flors.Count; i++) { var chance = Random.Range(0f, 1f); if (chance <= settings.EnnemySpawnChance) { var enemy = settings.EnemyInstance; enemy.transform.position = new Vector3(Random.Range(levelMetadata.LevelBounds.MinWidth, levelMetadata.LevelBounds.MaxWidth), levelMetadata.LevelData.Flors[i].Height + levelMetadata.LevelData.Flors[i].GroundLevel, 0); } yield return(null); } for (int i = 0; i < settings.ObjectsToSpanw.Count; i++) { Instantiate(settings.ObjectsToSpanw[i]); yield return(null); } var room = levelMetadata.LevelData.Flors[0].Rooms[0]; var position = new Vector3(room.Size.x / 2, levelMetadata.LevelData.Flors[0].GroundLevel, 0); var instance = Instantiate(settings.PlayerObject); instance.transform.position = position; PlayerCharacter.Instance.StartPosition = instance.transform.position; instance = Instantiate(settings.CameraObject); float z = instance.transform.position.z; instance.transform.position = new Vector3(position.x, position.y, z); yield return(null); _isDone = true; }