tierGauge.py (5507B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\cosmetics\ship\pages\studio\tierGauge.py 2 import math 3 from carbonui import Align 4 from carbonui.text.styles import TextBody 5 from carbonui.primitives.container import Container 6 from carbonui.primitives.transform import Transform 7 from carbonui.uianimations import animations 8 from cosmetics.client.ships.skins.live_data import current_skin_design, current_skin_design_signals 9 from eve.client.script.ui import eveColor 10 from eve.client.script.ui.control.gaugeCircular import GaugeCircular 11 from eve.client.script.ui.cosmetics.ship.pages.studio import studioSignals, studioUtil 12 13 class TierGauge(Container): 14 ANGLE_DEG = 30 15 ANGLE_OFFSET_DEG = 1.8 16 17 def __init__(self, *args, **kwargs): 18 super(TierGauge, self).__init__(*args, **kwargs) 19 self._radius = 0.0 20 self.construct_layout() 21 self.connect_signals() 22 23 def Close(self): 24 try: 25 self.disconnect_signals() 26 finally: 27 super(TierGauge, self).Close() 28 29 def connect_signals(self): 30 current_skin_design_signals.on_tier_level_changed.connect(self.on_tier_level_changed) 31 current_skin_design_signals.on_slot_fitting_changed.connect(self.on_slot_fitting_changed) 32 current_skin_design_signals.on_design_reset.connect(self.on_design_reset) 33 current_skin_design_signals.on_existing_design_loaded.connect(self.on_existing_design_loaded) 34 studioSignals.on_scene_zoom.connect(self.on_scene_zoom) 35 36 def disconnect_signals(self): 37 current_skin_design_signals.on_tier_level_changed.disconnect(self.on_tier_level_changed) 38 current_skin_design_signals.on_slot_fitting_changed.disconnect(self.on_slot_fitting_changed) 39 current_skin_design_signals.on_design_reset.disconnect(self.on_design_reset) 40 current_skin_design_signals.on_existing_design_loaded.disconnect(self.on_existing_design_loaded) 41 studioSignals.on_scene_zoom.disconnect(self.on_scene_zoom) 42 43 def construct_layout(self): 44 self.gauge = GaugeCircular(name='gauge', parent=self, align=Align.CENTER, lineWidth=5.0, startAngle=math.radians(90 - self.ANGLE_DEG * 0.5), angle=math.radians(self.ANGLE_DEG), clockwise=False, showMarker=False, colorStart=eveColor.CRYO_BLUE, colorEnd=eveColor.CRYO_BLUE, value=0.0) 45 self.current_tier_container = Transform(name='current_tier_container', parent=self, align=Align.CENTER) 46 self.current_tier_label = TextBody(name='current_tier_label', parent=self.current_tier_container, align=Align.CENTER, padBottom=7, padLeft=3) 47 self.next_tier_container = Transform(name='next_tier_container', parent=self, align=Align.CENTER) 48 self.next_tier_label = TextBody(name='next_tier_label', parent=self.next_tier_container, align=Align.CENTER, padBottom=7) 49 self.update_tier_values() 50 51 def update_tier_values(self): 52 tier_tresholds = current_skin_design.get().tier_thresholds 53 tier_level = current_skin_design.get().tier_level 54 if tier_level < tier_tresholds.get_max_tier(): 55 self.current_tier_label.text = '{tier}'.format(tier=tier_level) 56 self.next_tier_label.text = '{tier}'.format(tier=tier_level + 1) 57 else: 58 self.current_tier_label.text = '' 59 self.next_tier_label.text = '{tier}'.format(tier=tier_level) 60 if tier_tresholds: 61 tier_points = current_skin_design.get().tier_points 62 max_value = tier_tresholds.get_threshold_for_tier(tier_level) 63 if tier_level > 1: 64 min_value = tier_tresholds.get_threshold_for_tier(tier_level - 1) 65 else: 66 min_value = 0 67 if max_value is not None: 68 gauge_value = float(tier_points - min_value) / float(max_value - min_value) 69 else: 70 gauge_value = 1 71 self.gauge.SetValue(gauge_value) 72 else: 73 self.gauge.SetValue(0.0) 74 75 def on_tier_level_changed(self, tier_level): 76 self.update_tier_values() 77 78 def on_slot_fitting_changed(self, slot_id, component_instance): 79 self.update_tier_values() 80 81 def on_design_reset(self, *args): 82 self.update_tier_values() 83 84 def on_existing_design_loaded(self, *args): 85 self.update_tier_values() 86 87 def on_scene_zoom(self, is_zoomed): 88 target_opacity = 0.0 if is_zoomed else 1.0 89 animations.FadeTo(self, self.opacity, target_opacity, duration=0.15) 90 91 def update_radial_position(self): 92 tier_angle_offset = self.ANGLE_OFFSET_DEG + self.ANGLE_DEG * 0.5 93 current_tier_angle = 90 + tier_angle_offset 94 current_tier_x, current_tier_y = studioUtil.get_radial_position(self.radius, current_tier_angle) 95 self.current_tier_container.left = current_tier_x 96 self.current_tier_container.top = current_tier_y 97 self.current_tier_container.rotation = math.radians(-tier_angle_offset) 98 next_tier_angle = 90 - tier_angle_offset 99 next_tier_x, next_tier_y = studioUtil.get_radial_position(self.radius, next_tier_angle) 100 self.next_tier_container.left = next_tier_x 101 self.next_tier_container.top = next_tier_y 102 self.next_tier_container.rotation = math.radians(tier_angle_offset) 103 self.gauge.SetRadius(self.radius) 104 105 @property 106 def radius(self): 107 return self._radius 108 109 @radius.setter 110 def radius(self, value): 111 self._radius = value 112 self.update_radial_position()