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

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()