def __init__(self, currentVehicle, carouselItemWrapper, proxy): super(CustomizationCarouselDataProvider, self).__init__() self._currentVehicle = currentVehicle self._tabIndex = 0 self._seasonID = SeasonType.SUMMER self._onlyOwnedAndFreeItems = False self._historicOnlyItems = False self._onlyAppliedItems = False self._selectIntCD = None self.setItemWrapper(carouselItemWrapper) self._proxy = proxy self._currentlyApplied = set() self._allSeasonAndTabFilterData = {} visibleTabs = defaultdict(set) c11nContext = self.service.getCtx() anchorsData = c11nContext.hangarSpace.getSlotPositions() requirement = createCustomizationBaseRequestCriteria(self._currentVehicle.item, self.eventsCache.questsProgress, self._proxy.getAppliedItems()) allItems = self.itemsCache.items.getItems(GUI_ITEM_TYPE.CUSTOMIZATIONS, requirement) for tabIndex in TABS_ITEM_MAPPING.iterkeys(): self._allSeasonAndTabFilterData[tabIndex] = {} for season in SeasonType.COMMON_SEASONS: self._allSeasonAndTabFilterData[tabIndex][season] = CustomizationSeasonAndTypeFilterData() for item in sorted(allItems.itervalues(), key=comparisonKey): if item.isHiddenInUI(): continue groupName = item.groupUserName tabIndex = TYPE_TO_TAB_IDX.get(item.itemTypeID) for seasonType in SeasonType.COMMON_SEASONS: if item.season & seasonType: seasonAndTabData = self._allSeasonAndTabFilterData[tabIndex][seasonType] if groupName and groupName not in seasonAndTabData.allGroups: seasonAndTabData.allGroups.append(groupName) seasonAndTabData.itemCount += 1 if tabIndex not in C11nTabs.VISIBLE: continue if item.itemTypeID in (GUI_ITEM_TYPE.INSCRIPTION, GUI_ITEM_TYPE.EMBLEM): for areaData in anchorsData.itervalues(): if areaData.get(item.itemTypeID): hasSlots = True break else: hasSlots = False if not hasSlots: continue visibleTabs[seasonType].add(tabIndex) c11nContext.updateVisibleTabsList(visibleTabs) for tabIndex in TABS_ITEM_MAPPING.iterkeys(): for seasonType in SeasonType.COMMON_SEASONS: seasonAndTabData = self._allSeasonAndTabFilterData[tabIndex][seasonType] seasonAndTabData.allGroups.append(_ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_FILTER_ALLGROUPS)) seasonAndTabData.selectedGroupIndex = len(seasonAndTabData.allGroups) - 1 self._customizationItems = [] self._itemSizeData = [] self._customizationBookmarks = [] self._selectedIdx = -1 return
def _buildCustomizationItems(self): season = self._seasonID requirement = createCustomizationBaseRequestCriteria(self._currentVehicle.item, self.eventsCache.questsProgress, self._proxy.getAppliedItems(), season) seasonAndTabData = self._allSeasonAndTabFilterData[self._tabIndex][season] allItemsGroup = len(seasonAndTabData.allGroups) - 1 if seasonAndTabData.selectedGroupIndex != allItemsGroup: selectedGroup = seasonAndTabData.allGroups[seasonAndTabData.selectedGroupIndex] requirement |= REQ_CRITERIA.CUSTOMIZATION.ONLY_IN_GROUP(selectedGroup) if self._historicOnlyItems: requirement |= ~REQ_CRITERIA.CUSTOMIZATION.HISTORICAL if self._onlyOwnedAndFreeItems: requirement |= REQ_CRITERIA.CUSTOM(lambda item: self._proxy.getItemInventoryCount(item) > 0) if self._onlyAppliedItems: appliedItems = self._proxy.getAppliedItems(isOriginal=False) requirement |= REQ_CRITERIA.CUSTOM(lambda item: item.intCD in appliedItems) allItems = self.itemsCache.items.getItems(TABS_ITEM_MAPPING[self._tabIndex], requirement) self._customizationItems = [] self._customizationBookmarks = [] lastGroupID = None for idx, item in enumerate(sorted(allItems.itervalues(), key=comparisonKey)): if item.isHiddenInUI(): continue groupID = item.groupID if item.intCD == self._selectIntCD: self._selectedIdx = len(self._customizationItems) self._selectIntCD = None if groupID != lastGroupID: lastGroupID = groupID self._customizationBookmarks.append(CustomizationBookmarkVO(item.groupUserName, idx).asDict()) self._customizationItems.append(item.intCD) self._itemSizeData.append(item.isWide()) return
def __updateVisibleTabsList(self): visibleTabs = defaultdict(set) anchorsData = g_currentVehicle.hangarSpace.getSlotPositions() requirement = createCustomizationBaseRequestCriteria( g_currentVehicle.item, self.eventsCache.questsProgress, self.getAppliedItems()) items = self.service.getItems(GUI_ITEM_TYPE.CUSTOMIZATIONS, criteria=requirement) for item in sorted(items.itervalues(), key=comparisonKey): tabIndex = TYPE_TO_TAB_IDX.get(item.itemTypeID) if tabIndex not in C11nTabs.VISIBLE or tabIndex == C11nTabs.CAMOUFLAGE and g_currentVehicle.item.descriptor.type.hasCustomDefaultCamouflage: continue for seasonType in SeasonType.COMMON_SEASONS: if item.season & seasonType: if item.itemTypeID in (GUI_ITEM_TYPE.INSCRIPTION, GUI_ITEM_TYPE.EMBLEM): for areaData in anchorsData.itervalues(): if areaData.get(item.itemTypeID): hasSlots = True break else: hasSlots = False if not hasSlots: continue visibleTabs[seasonType].add(tabIndex) self.__visibleTabs = visibleTabs
def __initItemsData(self): self.__itemsData.clear() requirement = createCustomizationBaseRequestCriteria( g_currentVehicle.item, self.__eventsCache.questsProgress, self.__ctx.mode.getAppliedItems()) requirement |= REQ_CRITERIA.CUSTOM( lambda item: not item.isHiddenInUI()) itemTypes = [] for tabId, slotType in CustomizationTabs.SLOT_TYPES.iteritems(): if vehicleHasSlot(slotType): itemTypes.extend(CustomizationTabs.ITEM_TYPES[tabId]) allItems = self.__itemsCache.items.getItems(tuple(itemTypes), requirement) sortedItems = sorted(allItems.itervalues(), key=comparisonKey) customModeTabs = CustomizationTabs.MODES[CustomizationModes.CUSTOM] for item in sortedItems: tabId = ITEM_TYPE_TO_TAB[item.itemTypeID] modeId = CustomizationModes.CUSTOM if tabId in customModeTabs else CustomizationModes.STYLED for season in SeasonType.COMMON_SEASONS: if not item.season & season: continue itemsDataStorage = self.__itemsData[modeId][season] if not itemsDataStorage or tabId != itemsDataStorage.keys( )[-1]: itemsDataStorage[tabId] = ItemsData() itemsData = itemsDataStorage.values()[-1] if not itemsData.groups or item.groupID != itemsData.groups.keys( )[-1]: itemsData.groups[item.groupID] = item.groupUserName itemsData.items.append(item)
def __init__(self, currentVehicle, carouselItemWrapper, proxy): super(CustomizationCarouselDataProvider, self).__init__() self._currentVehicle = currentVehicle self._tabIndex = 0 self._seasonID = SeasonType.SUMMER self._onlyOwnedAndFreeItems = False self._historicOnlyItems = False self._onlyAppliedItems = False self._selectIntCD = None self.setItemWrapper(carouselItemWrapper) self._proxy = proxy self._currentlyApplied = set() self._allSeasonAndTabFilterData = {} hasCustomDefaultCamouflage = g_currentVehicle.item.descriptor.type.hasCustomDefaultCamouflage requirement = createCustomizationBaseRequestCriteria( self._currentVehicle.item, self.eventsCache.questsProgress, self._proxy.getAppliedItems()) allItems = self.itemsCache.items.getItems(GUI_ITEM_TYPE.CUSTOMIZATIONS, requirement) for tabIndex in TABS_ITEM_MAPPING.iterkeys(): self._allSeasonAndTabFilterData[tabIndex] = {} for season in SeasonType.COMMON_SEASONS: self._allSeasonAndTabFilterData[tabIndex][ season] = CustomizationSeasonAndTypeFilterData() for item in sorted(allItems.itervalues(), key=comparisonKey): if isServiceItem(item) and hasCustomDefaultCamouflage: continue groupName = item.groupUserName tabIndex = TYPE_TO_TAB_IDX.get(item.itemTypeID) for seasonType in SeasonType.COMMON_SEASONS: if item.season & seasonType: seasonAndTabData = self._allSeasonAndTabFilterData[ tabIndex][seasonType] if groupName and groupName not in seasonAndTabData.allGroups: seasonAndTabData.allGroups.append(groupName) seasonAndTabData.itemCount += 1 for tabIndex in TABS_ITEM_MAPPING.iterkeys(): for seasonType in SeasonType.COMMON_SEASONS: seasonAndTabData = self._allSeasonAndTabFilterData[tabIndex][ seasonType] seasonAndTabData.allGroups.append( _ms(VEHICLE_CUSTOMIZATION.CUSTOMIZATION_FILTER_ALLGROUPS)) seasonAndTabData.selectedGroupIndex = len( seasonAndTabData.allGroups) - 1 self._customizationItems = [] self._itemSizeData = [] self._customizationBookmarks = [] self._selectedIdx = -1 return
def __initItemsData(self): self.__itemsData.clear() requirement = createCustomizationBaseRequestCriteria( g_currentVehicle.item, self.__eventsCache.questsProgress, self.__ctx.mode.getAppliedItems()) requirement |= REQ_CRITERIA.CUSTOM( lambda item: not item.isHiddenInUI()) itemTypes = [] for tabId, slotType in CustomizationTabs.SLOT_TYPES.iteritems(): if vehicleHasSlot(slotType): itemTypes.extend(CustomizationTabs.ITEM_TYPES[tabId]) allItems = [] customizationCache = vehicles.g_cache.customization20().itemTypes cTypes = set((C11N_ITEM_TYPE_MAP[iType] for iType in itemTypes if iType in C11N_ITEM_TYPE_MAP)) for cType in cTypes: for itemID in customizationCache[cType]: if itemID == EMPTY_ITEM_ID: continue intCD = vehicles.makeIntCompactDescrByID( 'customizationItem', cType, itemID) item = self.__service.getItemByCD(intCD) if requirement(item): allItems.append(item) sortedItems = sorted(allItems, key=comparisonKey) customModeTabs = CustomizationTabs.MODES[CustomizationModes.CUSTOM] for item in sortedItems: tabId = ITEM_TYPE_TO_TAB[item.itemTypeID] modeId = CustomizationModes.CUSTOM if tabId in customModeTabs else CustomizationModes.STYLED for season in SeasonType.COMMON_SEASONS: if not item.season & season: continue itemsDataStorage = self.__itemsData[modeId][season] if not itemsDataStorage or tabId != itemsDataStorage.keys( )[-1]: itemsDataStorage[tabId] = ItemsData() itemsData = itemsDataStorage.values()[-1] if not itemsData.groups or item.groupID != itemsData.groups.keys( )[-1]: itemsData.groups[item.groupID] = item.groupUserName itemsData.items.append(item)