NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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