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)