def __loadRoot(self, rootCD): item = self.__loadInstalledItems(rootCD) node = self._getNodeData(rootCD, self._earnedXP, makeDefUnlockProps(), set(), renderer='root', topLevel=True) if item is not None: if g_currentVehicle.isPresent() and g_currentVehicle.invID == item.inventoryId: node['state'] |= NODE_STATE.SELECTED self._nodesIdx[rootCD] = 0 self._nodes.append(node) self.__loadInstalledItems(rootCD) return
def __loadRoot(self, rootCD): item = self.__loadInstalledItems(rootCD) node = self._getNodeData(rootCD, self._earnedXP, makeDefUnlockProps(), set(), renderer='root', topLevel=True) if item is not None: if g_currentVehicle.isPresent( ) and g_currentVehicle.invID == item.inventoryId: node['state'] |= NODE_STATE.SELECTED self._nodesIdx[rootCD] = 0 self._nodes.append(node) self.__loadInstalledItems(rootCD) return
def __loadTopLevel(self, rootCD): xpGetter = self._xps.get invID = g_currentVehicle.invID if g_currentVehicle.isPresent() else -1 while len(self._topLevel): self._topLevel.pop().clear() self._topLevelCDs.clear() for nodeCD in g_techTreeDP.getTopLevel(rootCD): node = self._getNodeData(nodeCD, xpGetter(nodeCD, 0), makeDefUnlockProps(), set(), topLevel=True) item = self.getInvItem(nodeCD) if item is not None and invID == item.inventoryId: node['state'] |= NODE_STATE.SELECTED self._topLevelCDs[nodeCD] = len(self._topLevel) self._topLevel.append(node) return
def __loadAutoUnlockItems(self, rootCD, autoUnlocks, hasFakeTurrets = False): autoUnlocked = dict(map(lambda nodeCD: (vehicles.getDictDescr(nodeCD).get('itemTypeName'), nodeCD), autoUnlocks)) self._autoGunCD = -1 self._autoTurretCD = -1 for itemType in _RESEARCH_ITEMS: if itemType > len(ITEM_TYPE_NAMES) - 1: continue nodeCD = autoUnlocked[ITEM_TYPE_NAMES[itemType]] if itemType == _TURRET: self._autoTurretCD = nodeCD if hasFakeTurrets: continue elif itemType == _GUN: self._autoGunCD = nodeCD node = self._getNodeData(nodeCD, 0, makeDefUnlockProps(), set([rootCD])) node['state'] |= NODE_STATE.AUTO_UNLOCKED self._nodesIdx[nodeCD] = len(self._nodes) self._nodes.append(node)
def isNext2Unlock(self, vTypeCD, unlocked = set(), xps = None, freeXP = 0): topLevel = self.getTopLevel(vTypeCD) available = False topIDs = set() compare = [] result = makeDefUnlockProps() for parentCD in topLevel: nextLevel = self.__nextLevels[parentCD] idx, xpCost, required = nextLevel[vTypeCD] if required.issubset(unlocked) and parentCD in unlocked: topIDs.add(parentCD) compare.append(UnlockProps(parentCD, idx, xpCost, topIDs)) available = True elif not result.xpCost or result.xpCost > xpCost: result = UnlockProps(parentCD, idx, xpCost, set()) if available: result = self._findNext2Unlock(compare, xps=xps, freeXP=freeXP) return (available, result)
def isNext2Unlock(self, vTypeCD, unlocked=set(), xps=None, freeXP=0): topLevel = self.getTopLevel(vTypeCD) available = False topIDs = set() compare = [] result = makeDefUnlockProps() for parentCD in topLevel: nextLevel = self.__nextLevels[parentCD] idx, xpCost, required = nextLevel[vTypeCD] if required.issubset(unlocked) and parentCD in unlocked: topIDs.add(parentCD) compare.append(UnlockProps(parentCD, idx, xpCost, topIDs)) available = True elif not result.xpCost or result.xpCost > xpCost: result = UnlockProps(parentCD, idx, xpCost, set()) if available: result = self._findNext2Unlock(compare, xps=xps, freeXP=freeXP) return (available, result)
def __loadAutoUnlockItems(self, rootCD, autoUnlocks, hasFakeTurrets=False): autoUnlocked = dict( map( lambda nodeCD: (vehicles.getDictDescr(nodeCD).get('itemTypeName'), nodeCD), autoUnlocks)) self._autoGunCD = -1 self._autoTurretCD = -1 for itemType in _RESEARCH_ITEMS: if itemType > len(ITEM_TYPE_NAMES) - 1: continue nodeCD = autoUnlocked[ITEM_TYPE_NAMES[itemType]] if itemType == _TURRET: self._autoTurretCD = nodeCD if hasFakeTurrets: continue elif itemType == _GUN: self._autoGunCD = nodeCD node = self._getNodeData(nodeCD, 0, makeDefUnlockProps(), set([rootCD])) node['state'] |= NODE_STATE.AUTO_UNLOCKED self._nodesIdx[nodeCD] = len(self._nodes) self._nodes.append(node)
def __loadTopLevel(self, rootItem, unlockStats): itemGetter = self.getItem rootCD = self.getRootCD() for nodeCD in g_techTreeDP.getTopLevel(rootCD): node = self._getNodeData(nodeCD, rootItem, itemGetter(nodeCD), unlockStats, makeDefUnlockProps(), set(), topLevel=True) self._addTopNode(nodeCD, node)
def __loadAutoUnlockItems(self, rootItem, unlockStats): autoUnlocked = rootItem.getAutoUnlockedItemsMap() hasFakeTurrets = not rootItem.hasTurrets rootCD = rootItem.intCD itemGetter = self.getItem self._autoGunCD = -1 self._autoTurretCD = -1 for itemTypeID in _RESEARCH_ITEMS: if itemTypeID > len(ITEM_TYPE_NAMES) - 1: continue nodeCD = autoUnlocked[ITEM_TYPE_NAMES[itemTypeID]] if itemTypeID == GUI_ITEM_TYPE.TURRET: self._autoTurretCD = nodeCD if hasFakeTurrets: continue elif itemTypeID == GUI_ITEM_TYPE.GUN: self._autoGunCD = nodeCD node = self._getNodeData(nodeCD, rootItem, itemGetter(nodeCD), unlockStats, makeDefUnlockProps(), {rootCD}) node['state'] |= NODE_STATE.AUTO_UNLOCKED self._addNode(nodeCD, node)
def __loadRoot(self, rootItem, unlockStats): rootCD = rootItem.intCD node = self._getNodeData(rootCD, rootItem, rootItem, unlockStats, makeDefUnlockProps(), set(), topLevel=True) index = self._addNode(rootCD, node) raise index == 0 or AssertionError('Index of root must be 0')