Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
                }
            }
        }