コード例 #1
0
        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;
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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;
        }