shipLogoController.py (3204B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\cosmetics\client\shipLogoController.py 2 from featuremanagement.client.flag import flag_bool 3 from shipcosmetics.common.const import CosmeticsType, GetSupportedCosmeticsTypes 4 from shipcosmetics.client.factory import ShipCosmeticGatewayFactory 5 from shipcosmetics.client.fittingsgateway.fittingsSignals import on_ship_cosmetics_changed 6 from shipcosmetics.client.fittingsgateway.quasar import on_ship_cosmetics_changed_internal 7 from shipcosmetics.common.const import DISABLE_ALL_SHIP_EMBLEMS_FLAG, DISABLE_ALL_SHIP_EMBLEMS_FLAG_DEFAULT 8 from shipcosmetics.structs import * 9 10 class ShipLogoController(object): 11 12 def __init__(self): 13 self._cache = {} 14 self._fittings_gateway = ShipCosmeticGatewayFactory().fittings_gateway 15 on_ship_cosmetics_changed_internal.connect(self._on_ship_cosmetics_changed) 16 self._disable_all_ship_emblems = DISABLE_ALL_SHIP_EMBLEMS_FLAG_DEFAULT 17 flag_bool(key=DISABLE_ALL_SHIP_EMBLEMS_FLAG, default_value=DISABLE_ALL_SHIP_EMBLEMS_FLAG_DEFAULT, callback=self._on_disable_all_ship_emblems_flag_changed) 18 19 def _refresh_cache(self, ship_id): 20 self._cache[ship_id] = self._fittings_gateway.getShipCosmeticFitting(ship_id) 21 22 def flush_cache(self, ship_id = None): 23 if ship_id is None: 24 self._cache = {} 25 elif ship_id in self._cache: 26 self._cache.pop(ship_id) 27 28 def enable_ship_cosmetic_license(self, license, slot_index, group_index, enable): 29 if self.are_ship_emblems_disabled(): 30 return True 31 if license.shipTypeID != sm.GetService('godma').GetItem(session.shipid).typeID: 32 return False 33 if license.cosmeticType in GetSupportedCosmeticsTypes(): 34 module = ShipCosmeticLogo(license) if enable else None 35 return self._fittings_gateway.setShipCosmeticFittingModule(module, slot_index, group_index, session.shipid) 36 return False 37 38 def get_enabled_ship_cosmetics(self, ship_id, force_refresh = False): 39 if self.are_ship_emblems_disabled(): 40 return [] 41 if force_refresh or ship_id not in self._cache: 42 self._refresh_cache(ship_id) 43 fitting = self._cache[ship_id] 44 enabled_cosmetics = fitting.get_ship_cosmetic_fitting_types() 45 if CosmeticsType.ALLIANCE_LOGO in enabled_cosmetics and session.allianceid is None: 46 enabled_cosmetics.remove(CosmeticsType.ALLIANCE_LOGO) 47 return enabled_cosmetics 48 49 def _on_ship_cosmetics_changed(self, ship_id, cosmetics_types): 50 self.flush_cache(ship_id) 51 if CosmeticsType.ALLIANCE_LOGO in cosmetics_types and session.allianceid is None: 52 cosmetics_types.remove(CosmeticsType.ALLIANCE_LOGO) 53 on_ship_cosmetics_changed(ship_id, cosmetics_types) 54 55 def are_ship_emblems_disabled(self): 56 return self._disable_all_ship_emblems 57 58 def _on_disable_all_ship_emblems_flag_changed(self, evaluate_flag): 59 previousValue = self._disable_all_ship_emblems 60 self._disable_all_ship_emblems = evaluate_flag() 61 if self._disable_all_ship_emblems != previousValue: 62 self.flush_cache()