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

component_instance.py (5022B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\cosmetics\client\ships\skins\live_data\component_instance.py
      2 from cosmetics.client.shipSkinComponentSvc import get_ship_skin_component_svc
      3 from cosmetics.client.ships import ship_skin_signals
      4 from cosmetics.common.ships.skins.live_data.component_instance import BaseMaterialComponentInstance, BasePatternComponentInstance
      5 from cosmetics.common.ships.skins.live_data.component_license_type import ComponentLicenseType
      6 from cosmetics.common.ships.skins.static_data.component import ComponentsDataLoader
      7 from cosmetics.common.ships.skins.static_data.component_category import ComponentCategory
      8 from cosmetics.common.ships.skins.static_data.pattern_attribute import PatternAttribute
      9 from eve.client.script.ui.cosmetics.ship.pages.studio import patternProjectionUtil
     10 from eveProto.generated.eve_public.cosmetic.ship.skin.thirdparty.slot.slot_pb2 import Configuration as SlotConfiguration
     11 from eveProto.generated.eve_public.cosmetic.ship.skin.thirdparty.component.coating.coating_pb2 import Configuration as CoatingConfiguration, Identifier as CoatingIdentifier
     12 from eveProto.generated.eve_public.cosmetic.ship.skin.thirdparty.component.pattern.pattern_pb2 import Configuration as PatternConfiguration, Identifier as PatternIdentifier
     13 from eveProto.generated.eve_public.math.vector_pb2 import Vector3, Vector4
     14 
     15 def create_component_instance(component_id, **kwargs):
     16     component_data = ComponentsDataLoader.get_component_data(component_id)
     17     if component_data:
     18         if component_data.category in (ComponentCategory.MATERIAL, ComponentCategory.METALLIC):
     19             return MaterialComponentInstance(component_id)
     20         if component_data.category == ComponentCategory.PATTERN:
     21             return PatternComponentInstance(component_id, **kwargs)
     22 
     23 
     24 def build_config_proto_from_component_instance(component_instance):
     25     config = SlotConfiguration()
     26     if isinstance(component_instance, MaterialComponentInstance):
     27         config.coating.CopyFrom(SlotConfiguration.Coating(coating=CoatingIdentifier(sequential=component_instance.component_id), configuration=component_instance.build_proto()))
     28     elif isinstance(component_instance, PatternComponentInstance):
     29         config.pattern.CopyFrom(SlotConfiguration.Pattern(pattern=PatternIdentifier(sequential=component_instance.component_id), configuration=component_instance.build_proto()))
     30     return config
     31 
     32 
     33 class MaterialComponentInstance(BaseMaterialComponentInstance):
     34     VECTOR3_PROTO = Vector3
     35     VECTOR4_PROTO = Vector4
     36     COATING_CONFIGURATION_PROTO = CoatingConfiguration
     37 
     38     def __init__(self, component_id):
     39         super(MaterialComponentInstance, self).__init__(component_id)
     40         ship_skin_signals.on_component_license_granted.connect(self._on_component_license_granted)
     41 
     42     def __del__(self):
     43         ship_skin_signals.on_component_license_granted.disconnect(self._on_component_license_granted)
     44 
     45     def _on_component_license_granted(self, component_id, license_type, quantity):
     46         if self.component_license_to_use is None or self.component_license_to_use.license_type == ComponentLicenseType.UNLIMITED:
     47             return
     48         if self.component_license_to_use.license_type == license_type and self.component_license_to_use.component_id == component_id:
     49             self.component_license_to_use = get_ship_skin_component_svc().get_license(component_id, self.category, license_type)
     50 
     51 
     52 class PatternComponentInstance(BasePatternComponentInstance):
     53     VECTOR3_PROTO = Vector3
     54     VECTOR4_PROTO = Vector4
     55     PATTERN_CONFIGURATION_PROTO = PatternConfiguration
     56 
     57     def __init__(self, component_id, scaling_multiplier = 1.0):
     58         super(PatternComponentInstance, self).__init__(component_id, scaling_multiplier)
     59         ship_skin_signals.on_component_license_granted.connect(self._on_component_license_granted)
     60 
     61     def __del__(self):
     62         ship_skin_signals.on_component_license_granted.disconnect(self._on_component_license_granted)
     63 
     64     def _on_component_license_granted(self, component_id, license_type, quantity):
     65         if self.component_license_to_use is None or self.component_license_to_use.license_type == ComponentLicenseType.UNLIMITED:
     66             return
     67         if self.component_license_to_use.license_type == license_type and self.component_license_to_use.component_id == component_id:
     68             self.component_license_to_use = get_ship_skin_component_svc().get_license(component_id, self.category, license_type)
     69 
     70     def apply_user_authored_values(self):
     71         self._apply_user_authored_values()
     72         self.on_attribute_changed(self, PatternAttribute.POSITION, self._position)
     73         self.on_attribute_changed(self, PatternAttribute.ROTATION, self._rotation)
     74 
     75     def _apply_user_authored_values(self):
     76         self._position, self._rotation = patternProjectionUtil.get_pattern_projection_position_and_rotation(self.ellipsoid_center, self.ellipsoid_radii, self.offset_u_ratio, self.offset_v_ratio, self.yaw, self.pitch, self.roll)