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
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)