コード例 #1
0
class FrontFiller(Filler):
    def __init__(self, startAP, graph, restrictions, emptyContainer):
        super(FrontFiller, self).__init__(startAP, graph, restrictions,
                                          emptyContainer)
        self.choice = ItemThenLocChoice(restrictions)
        self.stdStart = GraphUtils.isStandardStart(self.startAP)

    def isEarlyGame(self):
        n = 2 if self.stdStart else 3
        return len(self.container.currentItems) <= n

    # one item/loc per step
    def step(self, onlyBossCheck=False):
        self.cache.reset()
        if not self.services.can100percent(self.ap, self.container):
            comebackCheck = ComebackCheckType.ComebackWithoutItem if not self.isEarlyGame(
            ) else ComebackCheckType.NoCheck
            (itemLocDict, isProg) = self.services.getPossiblePlacements(
                self.ap, self.container, comebackCheck)
        else:
            (itemLocDict, isProg) = self.services.getPossiblePlacementsNoLogic(
                self.container)
        itemLoc = self.choice.chooseItemLoc(itemLocDict, isProg)
        if itemLoc is None:
            if onlyBossCheck == False and self.services.onlyBossesLeft(
                    self.ap, self.container):
                self.settings.maxDiff = infinity
                return self.step(onlyBossCheck=True)
            return False
        self.collect(itemLoc)
        return True
コード例 #2
0
 def chooseItemLocNoLogic(self, itemLocDict):
     if self.settings.restrictions[
             'Suits'] == True and self.container.hasItemInPool(
                 lambda item: item.Type in ['Varia', 'Gravity']):
         itemLocDict = {
             key: value
             for key, value in itemLocDict.items()
             if key.Type in ['Varia', 'Gravity']
         }
     # pure random choice instead of prog-speed specific
     return ItemThenLocChoice.chooseItemLoc(self.choice, itemLocDict, False)