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

progressBar.py (10797B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\careerPortal\progressBar.py
      2 import appConst
      3 import trinity
      4 from carbon.common.script.sys.serviceConst import ROLE_GML
      5 from carbonui import uiconst
      6 from carbonui.primitives.container import Container
      7 from carbonui.primitives.containerAutoSize import ContainerAutoSize
      8 from carbonui.primitives.frame import Frame
      9 from carbonui.primitives.sprite import Sprite
     10 from carbonui.primitives.stretchspritehorizontal import StretchSpriteHorizontal
     11 from carbonui.uianimations import animations
     12 from carbonui.uicore import uicore
     13 from careergoals.client.career_goal_svc import get_career_goals_svc
     14 from careergoals.client.signal import on_goal_progress_changed, on_goal_completed, on_definitions_loaded
     15 from eve.client.script.ui import eveColor
     16 from eve.client.script.ui.control.eveLabel import EveLabelMedium, EveCaptionSmall
     17 from eve.client.script.ui.control.gauge import Gauge
     18 from eve.client.script.ui.control.infoIcon import CheckMarkGlyphIcon
     19 from eve.client.script.ui.control.itemIcon import ItemIcon
     20 from eve.client.script.ui.shared.careerPortal.util import get_overall_progress_goals_description
     21 from eve.client.script.ui.tooltips.tooltipsWrappers import TooltipHeaderDescriptionWrapper
     22 from eve.client.script.ui.util.uix import QtyPopup
     23 from localization import GetByLabel
     24 ICON_SIZE = 24
     25 GAUGE_CONT_HEIGHT = 30
     26 GAUGE_HEIGHT = 4
     27 GAUGE_PADDING = 1
     28 MARKER_HEIGHT = 10
     29 CRATE_SIZE = 86
     30 
     31 class ProgressBar(Gauge):
     32     default_state = uiconst.UI_NORMAL
     33     default_backgroundColor = eveColor.BLACK
     34     default_gaugeHeight = 10
     35     default_height = 10
     36     default_width = 0
     37     default_color = eveColor.CRYO_BLUE
     38     default_labelClass = EveCaptionSmall
     39     normalGaugeColor = eveColor.CRYO_BLUE
     40     fullGaugeColor = eveColor.SUCCESS_GREEN
     41 
     42     def GetMenu(self):
     43         if session and session.role & ROLE_GML:
     44             menu = [['QA: Progress', self._Debug_ProgressGoal]]
     45             return menu
     46 
     47     def _Debug_ProgressGoal(self):
     48         ret = QtyPopup(minvalue=0, setvalue=1)
     49         if ret and 'qty' in ret:
     50             for goal in get_career_goals_svc().get_goal_data_controller().get_overall_goals():
     51                 get_career_goals_svc().get_goal_data_controller().admin_progress_goal(goal.goal_id, ret['qty'])
     52 
     53     def ApplyAttributes(self, attributes):
     54         super(ProgressBar, self).ApplyAttributes(attributes)
     55         self.markerByGoalID = {}
     56         self.progressHint = None
     57         self.frame = Frame(parent=self.gaugeCont, opacity=1.2, color=self.normalGaugeColor, idx=0)
     58         self.bgGauge = Container(parent=self.gaugeCont, name='bgGauge', align=uiconst.TOPLEFT_PROP, clipChildren=True, width=0.0, height=self.default_gaugeHeight, state=uiconst.UI_DISABLED)
     59         self.bgGaugeGradient = self._CreateGradient(parent=self.bgGauge, color=eveColor.LEAFY_GREEN)
     60         self.gauge.opacity = 0.8
     61         self.gaugeCont.clipChildren = False
     62         self.gaugeCont.state = uiconst.UI_PICKCHILDREN
     63         self._InitGaugeWithGoalData()
     64         on_goal_progress_changed.connect(self.OnGoalProgressChanged)
     65         on_goal_completed.connect(self.OnGoalCompleted)
     66         on_definitions_loaded.connect(self._InitGaugeWithGoalData)
     67 
     68     def _CreateGradient(self, parent, color):
     69         gradient = super(ProgressBar, self)._CreateGradient(parent, color)
     70         gradient.outputMode = uiconst.OUTPUT_COLOR_AND_GLOW
     71         gradient.glowBrightness = 0.3
     72         return gradient
     73 
     74     def _InitGaugeWithGoalData(self):
     75         goal_data_controller = get_career_goals_svc().get_goal_data_controller()
     76         self.currentProgress = goal_data_controller.get_overall_progress()
     77         color = self.fullGaugeColor if goal_data_controller.are_all_overall_goals_completed() else self.normalGaugeColor
     78         self.SetColor(color)
     79         self.frame.color = color
     80         max_target = goal_data_controller.get_max_overall_target()
     81         self.CreateMarkers(goal_data_controller.get_overall_goals(), max_target)
     82         self.SetValue(self.currentProgress / float(max_target), animate=False)
     83         self.tooltipPanelClassInfo = TooltipHeaderDescriptionWrapper(header=self._GetProgressBarTitle(), description=self._GetProgressBarDescription())
     84 
     85     def CreateMarkers(self, overall_goals, max_target):
     86         if not max_target:
     87             return
     88         for i, goal in enumerate(overall_goals):
     89             percentValue = float(goal.definition.target_value) / float(max_target)
     90             goal_rewards = goal.definition.rewards
     91             if not goal_rewards:
     92                 continue
     93             reward = goal_rewards[0]
     94             typeID = reward.type_id
     95             color = self.fullGaugeColor if goal.is_completed() else self.normalGaugeColor
     96             self.ShowMarker(percentValue, width=RewardMarker.default_width, color=color, rewardTypeID=typeID, completed=goal.is_completed(), goalID=goal.goal_id, index=i)
     97 
     98     def SetValue(self, value, frequency = 10.0, animate = True, timeOffset = 0.0, duration = 0.6, flash = True):
     99         if animate:
    100             animations.MorphScalar(self.bgGauge, 'width', self.bgGauge.width, value, duration=duration, curveSet=self._GetCorrectCurveSet(), callback=lambda : animations.FadeOut(self.progressHint, duration=0.4, callback=self.progressHint.Close))
    101         super(ProgressBar, self).SetValue(value, frequency, animate, timeOffset + 1.0, duration, flash=False)
    102 
    103     def Close(self):
    104         on_goal_progress_changed.disconnect(self.OnGoalProgressChanged)
    105         on_goal_completed.disconnect(self.OnGoalCompleted)
    106         on_definitions_loaded.disconnect(self._InitGaugeWithGoalData)
    107         super(ProgressBar, self).Close()
    108 
    109     def _CreateBackgroundFill(self, backgroundColor):
    110         super(ProgressBar, self)._CreateBackgroundFill(backgroundColor)
    111         StretchSpriteHorizontal(name='backgroundGlowSprite', parent=self, align=uiconst.TOTOP_NOPUSH, height=18, rightEdgeSize=6, leftEdgeSize=6, top=-14, padding=(-4, 0, -4, 0), texturePath='res:/UI/Texture/classes/careerPortal/progressBarBackgroundGlow.png', outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, color=self.normalGaugeColor)
    112 
    113     def _CreateMarker(self, color, value, width, **kwargs):
    114         marker = RewardMarker(parent=self, top=0.5, left=value, width=width, state=uiconst.UI_NORMAL, color=color, idx=0, opacity=0, **kwargs)
    115         animations.FadeIn(marker, duration=1.0, timeOffset=kwargs.get('index', 0) / 4 + 0.1, curveType=uiconst.ANIM_OVERSHOT2)
    116         self.markerByGoalID[kwargs.get('goalID', None)] = marker
    117         return marker
    118 
    119     def SetText(self, text):
    120         super(ProgressBar, self).SetText(text)
    121         self.label.align = uiconst.TOPLEFT
    122         self.label.top = -28
    123         self.label.width = self.label.MeasureTextSize(self.label.text)[0]
    124 
    125     def GetTooltipPosition(self):
    126         l, t = self.gauge.GetCurrentAbsolutePosition()
    127         w, h = self.gauge.GetCurrentAbsoluteSize()
    128         return (l + w,
    129          t,
    130          10,
    131          10)
    132 
    133     def OnGoalProgressChanged(self, goal_id, progress_value):
    134         goal_data_controller = get_career_goals_svc().get_goal_data_controller()
    135         if not goal_data_controller.is_overall_goal(goal_id):
    136             return
    137         self._ShowProgressHint(progress_value)
    138         self.currentProgress = goal_data_controller.get_overall_progress()
    139         self.SetValue(self.currentProgress / float(goal_data_controller.get_max_overall_target()))
    140         self.SetColor(self.fullGaugeColor if goal_data_controller.are_all_overall_goals_completed() else self.normalGaugeColor)
    141         self.tooltipPanelClassInfo.headerText = self._GetProgressBarTitle()
    142 
    143     def _ShowProgressHint(self, newProgress):
    144         if self.progressHint:
    145             self.progressHint.Close()
    146         l, t = self.gauge.GetCurrentAbsolutePosition()
    147         w, h = self.gauge.GetCurrentAbsoluteSize()
    148         self.progressHint = ContainerAutoSize(name='careerPortalProgressHint', parent=uicore.layer.hint, pos=(l + w,
    149          t - 20,
    150          0,
    151          16))
    152         Sprite(parent=self.progressHint, align=uiconst.TOLEFT, texturePath='res:/UI/Texture/classes/careerPortal/career_point_icon.png', width=16, height=16, color=eveColor.LEAFY_GREEN)
    153         EveLabelMedium(parent=self.progressHint, align=uiconst.TOLEFT, text='+%s' % (newProgress - self.currentProgress), color=eveColor.LEAFY_GREEN, left=4)
    154 
    155     def OnGoalCompleted(self, goal_id):
    156         if not get_career_goals_svc().get_goal_data_controller().is_overall_goal(goal_id):
    157             return
    158         marker = self.markerByGoalID.get(goal_id, None)
    159         if not marker:
    160             return
    161         marker.MarkCompleted()
    162 
    163     def _GetProgressBarTitle(self):
    164         goal_data_controller = get_career_goals_svc().get_goal_data_controller()
    165         title = GetByLabel('UI/CareerPortal/OverallCareerPoints', currentPoints=goal_data_controller.get_overall_progress(), totalPoints=goal_data_controller.get_max_overall_target())
    166         return title
    167 
    168     def _GetProgressBarDescription(self):
    169         return get_overall_progress_goals_description()
    170 
    171 
    172 class RewardMarker(Container):
    173     default_name = 'CareerRewardMarker'
    174     default_align = uiconst.TOPLEFT_PROP
    175     default_height = 48
    176     default_width = 36
    177     default_rewardTypeID = appConst.typeSkillInjector
    178 
    179     def __init__(self, *args, **kwargs):
    180         super(RewardMarker, self).__init__(*args, **kwargs)
    181         self.rewardTypeID = kwargs.get('rewardTypeID', self.default_rewardTypeID)
    182         self.color = kwargs.get('color', eveColor.CRYO_BLUE)
    183         self.ConstructLayout()
    184         if kwargs.get('completed', False):
    185             self.MarkCompleted()
    186 
    187     def ConstructLayout(self):
    188         self.successIcon = CheckMarkGlyphIcon(parent=self, align=uiconst.CENTER, pos=(0, 0, 16, 16), opacity=0, state=uiconst.UI_HIDDEN)
    189         self.itemIcon = ItemIcon(parent=self, align=uiconst.CENTER, pos=(0, 0, 22, 22), typeID=self.rewardTypeID)
    190         self.itemIcon.techIcon.Hide()
    191         self.GetHint = self.itemIcon.GetHint
    192         self.hexagon = Sprite(name='hexagon', parent=self, align=uiconst.CENTER, pos=(0, 0, 58, 58), texturePath='res:/UI/Texture/classes/careerPortal/hexagon.png', textureSecondaryPath=self._GetMaskTexturePath(), outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, glowBrightness=0.8, spriteEffect=trinity.TR2_SFX_MODULATE, color=self.color, state=uiconst.UI_DISABLED)
    193 
    194     def _GetMaskTexturePath(self):
    195         if self.left == 1:
    196             return 'res:/UI/Texture/classes/careerPortal/hexagon_mask_right.png'
    197         else:
    198             return 'res:/UI/Texture/classes/careerPortal/hexagon_mask.png'
    199 
    200     def MarkCompleted(self):
    201         self.successIcon.state = uiconst.UI_DISABLED
    202         self.successIcon.opacity = 1
    203         self.itemIcon.opacity = 0.4
    204         self.hexagon.spriteEffect = Sprite.default_spriteEffect