skin_tier.py (3765B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\cosmetics\common\ships\skins\static_data\skin_tier.py 2 import shipgroup 3 from fsdBuiltData.common.base import BuiltDataLoader 4 try: 5 import ship_skin_design_tier_thresholdsLoader 6 except ImportError: 7 ship_skin_design_tier_thresholdsLoader = None 8 9 class _ShipSkinTierThresholdsDataLoader(BuiltDataLoader): 10 __resBuiltFile__ = 'res:/staticdata/ship_skin_design_tier_thresholds.fsdbinary' 11 __clientAutobuildBuiltFile__ = 'eve/autobuild/staticData/client/ship_skin_design_tier_thresholds.fsdbinary' 12 __serverAutobuildBuiltFile__ = 'eve/autobuild/staticData/server/ship_skin_design_tier_thresholds.fsdbinary' 13 __loader__ = ship_skin_design_tier_thresholdsLoader 14 15 16 def get_tier_thresholds_data(): 17 return _ShipSkinTierThresholdsDataLoader.GetData() 18 19 20 class ShipSkinTierThresholdsSet(object): 21 22 def __init__(self, info_group_id, thresholds_per_tier_level): 23 self._info_group_id = info_group_id 24 self._thresholds = [] 25 self._build_thresholds_list(thresholds_per_tier_level) 26 27 def _build_thresholds_list(self, thresholds_per_tier_level): 28 max_tier = max(thresholds_per_tier_level.keys()) + 1 29 self._thresholds.append(0) 30 for tier_level in range(1, max_tier): 31 if tier_level not in thresholds_per_tier_level: 32 raise Exception('The list of SKIN tier thresholds for info group id %s is missing a value for tier %s' % (self._info_group_id, tier_level)) 33 self._thresholds.append(thresholds_per_tier_level[tier_level]) 34 35 previous = -1 36 for x in self._thresholds: 37 if x <= previous: 38 raise Exception('The list of SKIN tier thresholds for info group id %s is not strictly ascending' % self._info_group_id) 39 previous = x 40 41 def get_tier_level(self, points_value): 42 if points_value > self._thresholds[-1]: 43 return self.get_max_tier() 44 if self.get_max_tier() <= 1 or points_value <= self._thresholds[1]: 45 return 1 46 for tier_level in range(2, len(self._thresholds)): 47 if self._thresholds[tier_level - 1] < points_value <= self._thresholds[tier_level]: 48 return tier_level 49 50 def get_max_tier(self): 51 return len(self._thresholds) 52 53 def get_threshold_for_tier(self, tier_level): 54 if tier_level < 0: 55 tier_level = 0 56 if tier_level >= self.get_max_tier(): 57 return None 58 return self._thresholds[tier_level] 59 60 61 class ShipSkinTierTable(object): 62 63 def __init__(self): 64 self._tier_thresholds_sets = None 65 66 @property 67 def tier_thresholds_sets(self): 68 if self._tier_thresholds_sets is None: 69 self._load_thresholds() 70 return self._tier_thresholds_sets 71 72 def _load_thresholds(self): 73 self._tier_thresholds_sets = {} 74 fsd_data = get_tier_thresholds_data() 75 for info_group_id, thresholds in fsd_data.iteritems(): 76 self._tier_thresholds_sets[info_group_id] = ShipSkinTierThresholdsSet(info_group_id, thresholds) 77 78 def get_thresholds_for_ship_type(self, ship_type_id): 79 ship_group_id = shipgroup.get_ship_group_id(ship_type_id) 80 if ship_group_id is None: 81 return 82 return self.tier_thresholds_sets.get(ship_group_id, None) 83 84 def get_tier_level_for_design(self, skin_design): 85 return self.get_tier_level(skin_design.ship_type_id, skin_design.compute_current_points_value()) 86 87 def get_tier_level(self, ship_type_id, points_value): 88 thresholds_set = self.get_thresholds_for_ship_type(ship_type_id) 89 if thresholds_set is None: 90 return 1 91 return thresholds_set.get_tier_level(points_value)