public bool CanBeUsed(Dungeon dungeon, Graph graph) { var res = graph.FindPath("cave-links-house", dungeon.LogicalBossRoomId, true, null, Requirements); return(res.Success || MeetsRequirements(res.ItemsObtained)); }
protected virtual void GenerateRandomizedBosses() { var dungeonQueue = new Queue <Dungeon>(this.DungeonPool); while (dungeonQueue.Count > 0) { var dungeon = dungeonQueue.Dequeue(); if (optionFlags.DebugMode && optionFlags.DebugForceBoss) { dungeon.SelectedBoss = new KholdstareBoss(); //dungeon.SelectedBoss = new TrinexxBoss(); continue; } var boss = bossPool.GetRandomBoss(dungeon, graph); var result = graph.FindPath("cave-links-house", "triforce-room"); dungeon.SelectedBoss = boss; if (dungeon.SelectedBoss == null) { //if(false && CanGetBossRoomAndDefeat(dungeon, result)) //{ // boss = bossPool.GetNextBoss(); // dungeon.SelectedBoss = boss; //} //else //{ var readdPool = this.DungeonPool.Where(x => x.SelectedBoss != null && dungeon.DisallowedBosses.Contains(x.SelectedBoss.BossType) == false).ToList(); //var readdDungeon = this.DungeonPool.Where(x => x.SelectedBoss != null && dungeon.DisallowedBosses.Contains(x.SelectedBoss.BossType) == false).FirstOrDefault(); if (readdPool.Count > 0) { var readdDungeon = readdPool[rand.Next(0, readdPool.Count)]; boss = readdDungeon.SelectedBoss; dungeon.SelectedBoss = readdDungeon.SelectedBoss; bossPool.ReaddBoss(boss); dungeonQueue.Enqueue(readdDungeon); readdDungeon.SelectedBoss = null; // update the graph graph.UpdateDungeonBoss(readdDungeon); } //} } if (dungeon.SelectedBoss != null) { // update the graph graph.UpdateDungeonBoss(dungeon); bossPool.RemoveBoss(boss); } } }