Ejemplo n.º 1
0
        public override Level GenerateLevel(LevelGenTemplate template, int length, int height, int width, int difficulty, int enemies, int traps)
        {
            if (template is null)
            {
                Logger.LogError("RandomLevelGenerator", "No level template set");
                return(null);
            }

            Logger.Log("RandomLevelGenerator", "Using template - ", template.name);

            template.levelLength = length > 0 ? length : template.levelLength;
            template.levelHeight = height > 0 ? height : template.levelHeight;
            template.levelWidth  = width > 0 ? width : template.levelWidth;
            template.enemyCount  = enemies > 0 ? enemies : template.enemyCount;
            template.trapCount   = traps > 0 ? traps : template.trapCount;

            Logger.Log("RandomLevelGenerator", "Generating Level ", template.levelLength.ToString(), " x ", template.levelWidth.ToString(), " x ", template.levelHeight.ToString());

            Level level;

            level = GenerateRandomLevel(template);
            GenerateEnemySpawns(level);
            GenerateTrapSpawns(level);
            GenerateElements(level);

            level.Print();
            return(level);
        }
Ejemplo n.º 2
0
        public static ILevelGenerator GetGenerator(LevelGenTemplate template)
        {
            ILevelGenerator generator;

            if (!string.IsNullOrWhiteSpace(template.levelResource))
            {
                generator = new FileLevelGenerator();
            }
            else
            {
                generator = new RandomLevelGenerator();
            }

            return(generator);
        }
Ejemplo n.º 3
0
        public Level(LevelGenTemplate template)
        {
            this.template = template;
            this.length   = CapLevelLength(template.levelLength, template.levelWidth, template.levelHeight);

            map = new ProxyRow[template.levelHeight];
            for (int row = 0; row < template.levelHeight; row++)
            {
                map[row]       = new ProxyRow();
                map[row].rooms = new ProxyRoom[template.levelWidth];

                for (int col = 0; col < template.levelWidth; col++)
                {
                    map[row].rooms[col] = null;
                }
            }
            //proxyLevel = new ProxyRoom[template.levelWidth, template.levelHeight];
        }
Ejemplo n.º 4
0
        protected Level LoadLevelFromFile(LevelGenTemplate genTemplate)
        {
            Level level = new Level(genTemplate);

            Logger.Log("FileLevelGenerator", "Loading level from file: Levels/" + genTemplate.levelResource + ".json");
            var jsonTextFile = Resources.Load <TextAsset>("Levels/" + genTemplate.levelResource);

            if (jsonTextFile == null)
            {
                Logger.LogError("FileLevelGenerator", "File not loaded");
                return(null);
            }

            JsonUtility.FromJsonOverwrite(jsonTextFile.text, level);

            level.Print();

            return(level);
        }
Ejemplo n.º 5
0
        GameObject FindRoomEntity(string type, string name, LevelGenTemplate levelGenTemplate)
        {
            GameObject result = null;

            switch (type)
            {
            case ProxyRoom.ObjTypeWall:
                return(levelGenTemplate.levelElements.FirstOrDefault(g => g != null && g.name == name));

            case ProxyRoom.ObjTypeEntry:
                result = levelGenTemplate.startProps.FirstOrDefault(g => g != null && g.name == name);

                if (result == null)
                {
                    return(levelGenTemplate.randomProps.FirstOrDefault(g => g != null && g.name == name));
                }

                break;

            case ProxyRoom.ObjTypeEnd:
                result = levelGenTemplate.endProps.FirstOrDefault(g => g != null && g.name == name);
                if (result == null)
                {
                    return(levelGenTemplate.randomProps.FirstOrDefault(g => g != null && g.name == name));
                }

                break;

            case ProxyRoom.ObjTypeRandom:
                return(levelGenTemplate.randomProps.FirstOrDefault(g => g != null && g.name == name));

            case ProxyRoom.ObjTypeFixed:
                return(levelGenTemplate.fixedProps.FirstOrDefault(g => g != null && g.name == name));

            case ProxyRoom.ObjTypeLineOfSight:
                return(levelGenTemplate.lineOfSightProps.FirstOrDefault(g => g != null && g.name == name));
            }

            return(result);
        }
Ejemplo n.º 6
0
        protected Level GenerateRandomLevel(LevelGenTemplate template)
        {
            if (template is null)
            {
                Logger.LogError("RandomLevelGenerator", "Template not set");
                return(null);
            }

            var level    = new Level(template);
            var position = GenerateStartingLocation(level);

            if (level.length > 1)
            {
                GenerateMainChain(new Vector2Int(position.x, position.y - 1), level, level.length - 1);
            }

            GenerateAuxRooms(level);

            level.Print();

            return(level);
        }
Ejemplo n.º 7
0
 protected void GenerateRoomElements(ProxyRoom proxyRoom, string type, float chance, LevelGenTemplate template)
 {
     AddRoomElement(ref proxyRoom.topLeft, TopLeft, proxyRoom.left, proxyRoom.top, type, chance, template);
     AddRoomElement(ref proxyRoom.topRight, TopRight, proxyRoom.right, proxyRoom.top, type, chance, template);
     AddRoomElement(ref proxyRoom.bottomLeft, BottomLeft, proxyRoom.left, proxyRoom.bottom, type, chance, template);
     AddRoomElement(ref proxyRoom.bottomRight, BottomRight, proxyRoom.right, proxyRoom.bottom, type, chance, template);
 }
Ejemplo n.º 8
0
 public abstract Level GenerateLevel(LevelGenTemplate template, int length, int height, int width, int difficulty, int enemies, int traps);
Ejemplo n.º 9
0
 public Level GenerateLevel(LevelGenTemplate template, int difficulty, int enemies, int traps) => GenerateLevel(template, 0, 0, 0, difficulty, enemies, traps);
Ejemplo n.º 10
0
 public Level GenerateLevel(LevelGenTemplate template) => GenerateLevel(template, 0, 0, 0, 0, 0, 0);
Ejemplo n.º 11
0
        public static Level Generate(LevelGenTemplate template, int length, int height, int width, int difficulty, int enemies, int traps)
        {
            var generator = GetGenerator(template);

            return(generator.GenerateLevel(template, length, height, width, difficulty, enemies, traps));
        }
Ejemplo n.º 12
0
 public static Level Generate(LevelGenTemplate template) => Generate(template, 0, 0, 0, 0, 0, 0);
Ejemplo n.º 13
0
        protected IEnumerable <GameObject> FindRoomElements(string corner, string wall1, string wall2, string type, LevelGenTemplate levelGenTemplate)
        {
            IEnumerable <GameObject> results = null;

            switch (type)
            {
            case ProxyRoom.ObjTypeWall:
                results = levelGenTemplate.levelElements.Where(g => g != null && MatchPrefabName(g.name, corner, wall1, wall2));
                break;

            case ProxyRoom.ObjTypeEntry:
                results = levelGenTemplate.startProps.Where(g => g != null && MatchPrefabName(g.name, corner, wall1, wall2));
                break;

            case ProxyRoom.ObjTypeEnd:
                results = levelGenTemplate.endProps.Where(g => g != null && MatchPrefabName(g.name, corner, wall1, wall2));
                break;

            case ProxyRoom.ObjTypeRandom:
                results = levelGenTemplate.randomProps.Where(g => g != null && MatchPrefabName(g.name, corner, wall1, wall2));
                break;

            case ProxyRoom.ObjTypeFixed:
                results = levelGenTemplate.fixedProps.Where(g => g != null && MatchPrefabName(g.name, corner, wall1, wall2));
                break;

            case ProxyRoom.ObjTypeLineOfSight:
                results = levelGenTemplate.lineOfSightProps.Where(g => g != null && MatchPrefabName(g.name, corner, wall1, wall2));
                break;
            }

            return(results);
        }
Ejemplo n.º 14
0
        protected void AddRoomElement(ref List <Corner> cornerElements, string corner, string wall1, string wall2, string type, float chance, LevelGenTemplate template)
        {
            if (UnityEngine.Random.Range(0.0f, 1.0f) <= chance)
            {
                var goList = FindRoomElements(corner, wall1, wall2, type, template).ToList();

                if (goList != null && goList.Count > 0)
                {
                    goList.Randomize();

                    cornerElements.Add(
                        new Corner()
                    {
                        type   = type,
                        name   = goList[0].name,
                        isTrap = false
                    });
                }
            }
        }