shipSkinDataSvc.py (2165B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\cosmetics\client\shipSkinDataSvc.py 2 import logging 3 from cosmetics.client.messengers.cosmetics.ship.shipSkinDataRequestMessenger import PublicShipSkinDataRequestMessenger 4 from cosmetics.client.ships.skins.live_data.skin_design import SkinDesign 5 from cosmetics.common.ships.skins.static_data.pattern_blend_mode import NO_SECONDARY_COLOR_BLEND_MODES 6 from cosmetics.common.ships.skins.static_data.slot_name import SlotID 7 logger = logging.getLogger(__name__) 8 _instance = None 9 10 def get_ship_skin_data_svc(): 11 global _instance 12 if _instance is None: 13 _instance = _ShipSkinDataSvc() 14 return _instance 15 16 17 class _ShipSkinDataSvc(object): 18 __startupdependencies__ = ['publicGatewaySvc'] 19 __notifyevents__ = ['OnSessionChanged'] 20 21 def __init__(self): 22 self._cache = {} 23 public_gateway = sm.GetService('publicGatewaySvc') 24 self._request_messenger = PublicShipSkinDataRequestMessenger(public_gateway) 25 sm.RegisterNotify(self) 26 27 def OnSessionChanged(self, _isRemote, _sess, change): 28 if 'charid' in change: 29 self._clear_cache() 30 31 def _clear_cache(self): 32 self._cache = {} 33 34 def cache_skin_data(self, design_hex, design_data): 35 self._cache[design_hex] = design_data 36 37 def clear_skin_data(self, design_hex): 38 if design_hex in self._cache: 39 self._cache.pop(design_hex) 40 41 def get_skin_data(self, design_hex, force_refresh = False): 42 if design_hex not in self._cache or force_refresh: 43 skin_design = self._request_messenger.get_skin_data_request(design_hex) 44 skin_design.design_hex = design_hex 45 self._cache[design_hex] = skin_design 46 return self._cache.get(design_hex, None) 47 48 def clean_up_skin(self, skin_data): 49 if skin_data is None or skin_data.slot_layout is None: 50 return skin_data 51 if skin_data.slot_layout.pattern_blend_mode not in NO_SECONDARY_COLOR_BLEND_MODES: 52 return skin_data 53 skin_data.slot_layout.unfit_slot(SlotID.SECONDARY_PATTERN_MATERIAL, True) 54 return skin_data