asteroid_bracket.py (7180B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\bracketsAndTargets\asteroid_bracket.py 2 import carbonui 3 import carbonui.text.styles 4 import eveicon 5 import uthread2 6 from carbonui import uiconst, Align, PickState 7 from carbonui.primitives.layoutGrid import LayoutGrid 8 from carbonui.primitives.sprite import Sprite 9 from carbonui.uianimations import animations 10 from eve.client.script.parklife import states 11 from eve.client.script.ui.inflight.bracketsAndTargets.expanded_bracket import ExpandedBracket, get_label_and_value_formatted 12 from eve.client.script.ui.inflight.bracketsAndTargets.inSpaceBracket import InSpaceBracket 13 from eve.common.script.util.eveFormat import FmtISK 14 from localization import GetByLabel 15 from mining.client import mining_signals, mining_util 16 from mining.client.asteroid_scanning_service import AsteroidScanningService, QUANTITY_UNKNOWN 17 from mining.client.mining_const import MiningQuantityColor 18 19 class AsteroidBracket(InSpaceBracket): 20 21 def update_icon_visibility(self): 22 self.icon_sprite.display = self.isSelected 23 24 def Select(self, is_selected): 25 super(AsteroidBracket, self).Select(is_selected) 26 self.update_icon_visibility() 27 28 def has_expanded_bracket(self): 29 return True 30 31 def show_expanded_bracket(self): 32 if not self.expanded_bracket: 33 self.expanded_bracket = ExpandedBracketAsteroid(parent=self.parent, item_id=self.itemID, bracket=self, idx=0) 34 35 36 class ExpandedBracketAsteroid(ExpandedBracket): 37 38 def __init__(self, item_id, bracket = None, **kwargs): 39 super(ExpandedBracketAsteroid, self).__init__(item_id=item_id, bracket=bracket, **kwargs) 40 self.connect_signals() 41 42 def Close(self, **kwargs): 43 super(ExpandedBracketAsteroid, self).Close() 44 self.disconnect_signals() 45 46 def connect_signals(self): 47 mining_signals.on_ore_mined.connect(self.on_ore_mined) 48 mining_signals.on_mining_scan_completed.connect(self.on_mining_scan_completed) 49 mining_signals.on_mining_overlay_disabled.connect(self.on_mining_overlay_disabled) 50 51 def disconnect_signals(self): 52 mining_signals.on_ore_mined.disconnect(self.on_ore_mined) 53 mining_signals.on_mining_scan_completed.disconnect(self.on_mining_scan_completed) 54 mining_signals.on_mining_overlay_disabled.connect(self.on_mining_overlay_disabled) 55 56 def on_mining_overlay_disabled(self): 57 self.update() 58 59 def on_mining_scan_completed(self): 60 self.update() 61 62 def construct_layout(self): 63 super(ExpandedBracketAsteroid, self).construct_layout() 64 self.construct_crit_container() 65 66 def construct_labels(self): 67 super(ExpandedBracketAsteroid, self).construct_labels() 68 self.est_value_label = carbonui.text.styles.TextDetail(name='est_value_label', parent=self.layout_grid, display=False, pickState=PickState.OFF) 69 self.total_value_label = carbonui.text.styles.TextDetail(name='total_value_label', parent=self.layout_grid, display=False, pickState=PickState.OFF) 70 self.num_units_label = carbonui.text.styles.TextDetail(name='num_units_label', parent=self.layout_grid, pickState=PickState.OFF, display=False) 71 72 def construct_crit_container(self): 73 self.crit_container = LayoutGrid(parent=self.layout_grid, align=Align.TOPLEFT, columns=2, cellSpacing=(4, 0), display=False, pickState=PickState.OFF) 74 Sprite(parent=self.crit_container, align=Align.CENTERLEFT, color=MiningQuantityColor.CRIT_BONUS, texturePath=eveicon.crit_success, pos=(0, 0, 16, 16)) 75 self.crit_label = carbonui.text.styles.TextDetail(name='asteroid_crit_label', parent=self.crit_container, color=MiningQuantityColor.CRIT_BONUS, align=Align.CENTERLEFT) 76 77 def on_ore_mined(self, asteroid_id, module_item_id, type_id, mined_quantity, crit_quantity, wasted_quantity): 78 if asteroid_id != self.item_id: 79 return 80 if crit_quantity: 81 self.indicate_critical_hit(crit_quantity) 82 83 def indicate_critical_hit(self, quantity): 84 uthread2.start_tasklet(self._show_critical_hit, quantity) 85 86 def _show_critical_hit(self, quantity): 87 self.crit_label.text = GetByLabel('UI/Mining/CriticalHit', amount=quantity) 88 self.crit_container.display = True 89 self.layout_grid.UpdateGridLayout() 90 animations.BlinkIn(self.crit_container, loops=3, sleep=True) 91 uthread2.sleep(2.0) 92 animations.FadeOut(self.crit_container, duration=0.6, sleep=True) 93 self.crit_container.display = False 94 95 def update(self, is_bracket_floating = True): 96 super(ExpandedBracketAsteroid, self).update(is_bracket_floating) 97 quantity = self.get_known_asteroid_quantity() 98 self.est_value_label.text = self.get_est_value_text() 99 self.est_value_label.display = bool(self.est_value_label.text) 100 self.total_value_label.text = self.get_est_total_value_text() 101 self.total_value_label.display = bool(self.total_value_label.text) 102 self.num_units_label.text = self.get_num_units_text(quantity) 103 self.num_units_label.display = bool(self.num_units_label.text) 104 105 def get_est_value_text(self): 106 if not AsteroidScanningService.get_instance().is_scanned(self.item_id): 107 return '' 108 if not (self.is_selected or self.is_hilited): 109 return '' 110 value = mining_util.get_volume_est_price_formatted(self.slim_item.typeID) 111 if not value: 112 value = GetByLabel('UI/Generic/Unknown') 113 return get_label_and_value_formatted(GetByLabel('UI/Common/Value'), value) 114 115 def get_est_total_value_text(self): 116 quantity = self.get_known_asteroid_quantity() 117 if not quantity: 118 return '' 119 if not (self.is_selected or self.is_hilited): 120 return '' 121 unit_price = mining_util.get_unit_est_price(self.slim_item.typeID) 122 if not unit_price: 123 return '' 124 value = FmtISK(unit_price * quantity) 125 return get_label_and_value_formatted(GetByLabel('UI/Common/TotalValue'), value) 126 127 def get_num_units_text(self, quantity): 128 if quantity: 129 if sm.GetService('target').IsTarget(self.item_id): 130 quantity_text = GetByLabel('UI/Shared/NumberOfUnits', num_units=quantity) 131 else: 132 if quantity < 1000: 133 digits = 2 134 else: 135 digits = 3 136 quantity = round(quantity, -digits) 137 quantity_text = GetByLabel('UI/Mining/EstNumberOfUnits', num_units=int(quantity)) 138 return get_label_and_value_formatted(GetByLabel('UI/Common/Quantity'), quantity_text) 139 else: 140 return '' 141 142 def get_known_asteroid_quantity(self): 143 quantity = AsteroidScanningService.get_instance().get_quantity(self.item_id) 144 if quantity is not QUANTITY_UNKNOWN: 145 return quantity 146 147 @property 148 def is_selected(self): 149 return sm.GetService('stateSvc').GetExclState(states.selected) == self.item_id 150 151 @property 152 def is_hilited(self): 153 return sm.GetService('stateSvc').GetExclState(states.mouseOver) == self.item_id