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); }
public static ILevelGenerator GetGenerator(LevelGenTemplate template) { ILevelGenerator generator; if (!string.IsNullOrWhiteSpace(template.levelResource)) { generator = new FileLevelGenerator(); } else { generator = new RandomLevelGenerator(); } return(generator); }
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]; }
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); }
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); }
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); }
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); }
public abstract Level GenerateLevel(LevelGenTemplate template, int length, int height, int width, int difficulty, int enemies, int traps);
public Level GenerateLevel(LevelGenTemplate template, int difficulty, int enemies, int traps) => GenerateLevel(template, 0, 0, 0, difficulty, enemies, traps);
public Level GenerateLevel(LevelGenTemplate template) => GenerateLevel(template, 0, 0, 0, 0, 0, 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)); }
public static Level Generate(LevelGenTemplate template) => Generate(template, 0, 0, 0, 0, 0, 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); }
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 }); } } }