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

milestoneProgressGauge.py (4362B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\skillPlan\milestone\milestoneProgressGauge.py
      2 import math
      3 import uthread2
      4 from carbonui import uiconst
      5 from carbonui.primitives.container import Container
      6 from carbonui.primitives.transform import Transform
      7 from carbonui.uianimations import animations
      8 from carbonui.uicore import uicore
      9 from eve.client.script.ui.skillPlan.milestone import milestoneConst
     10 from eve.client.script.ui.skillPlan.milestone.milestoneConst import TRANSFORM_RADIUS
     11 from eve.client.script.ui.skillPlan.milestone.milestoneSegment import ProgressSegment, InTrainingSegment, SkillsMissingSegment
     12 from eve.client.script.ui.skillPlan.milestone.milestoneUtil import GetMissingSkillsColor
     13 from signals import Signal
     14 SEGMENT_HINT_SCALE = 0.12
     15 MIN_GAUGE_RATIO_TRAINED = 0.01
     16 MIN_GAUGE_RATIO = 0.03
     17 
     18 class MilestoneProgressGauge(Container):
     19     default_highlightNotInTraining = False
     20     gaugeTexturePath = 'res:/UI/Texture/classes/SkillPlan/milestones/thinGaugeBG.png'
     21     startAngle = -math.pi / 2
     22     angle = 2 * math.pi
     23 
     24     def ApplyAttributes(self, attributes):
     25         super(MilestoneProgressGauge, self).ApplyAttributes(attributes)
     26         self._radius = attributes.radius
     27         self.controller = attributes.controller
     28         self.highlightNotInTraining = attributes.get('highlightNotInTraining', self.default_highlightNotInTraining)
     29         self.ConstructLayout()
     30 
     31     def ConstructLayout(self):
     32         self.gaugeTransform = Transform(parent=self, align=uiconst.CENTER, pos=(0,
     33          0,
     34          TRANSFORM_RADIUS * 2,
     35          TRANSFORM_RADIUS * 2), scalingCenter=(0.5, 0.5), scale=self._GetTransformScale(self.radius))
     36         self.progressGauge = ProgressSegment(parent=self.gaugeTransform, align=uiconst.CENTER, lineWidth=self.GetLineWidth(TRANSFORM_RADIUS), startAngle=self.startAngle, angle=self.angle, texturePath=self.gaugeTexturePath)
     37         self.inTrainingGauge = InTrainingSegment(parent=self.gaugeTransform, align=uiconst.CENTER, lineWidth=self.GetLineWidth(TRANSFORM_RADIUS), startAngle=self.startAngle, angle=self.angle, texturePath=self.gaugeTexturePath)
     38         self.missingGauge = SkillsMissingSegment(parent=self.gaugeTransform, align=uiconst.CENTER, lineWidth=self.GetLineWidth(TRANSFORM_RADIUS), startAngle=self.startAngle, angle=self.angle, texturePath=self.gaugeTexturePath, highlightNotInTraining=self.highlightNotInTraining, color=GetMissingSkillsColor(self.highlightNotInTraining))
     39 
     40     def SetController(self, controller):
     41         self.controller = controller
     42 
     43     @property
     44     def radius(self):
     45         return self._radius
     46 
     47     @radius.setter
     48     def radius(self, value):
     49         self._radius = value
     50         self._ApplyNewRadius()
     51 
     52     def _ApplyNewRadius(self):
     53         self._ApplyTransformScaling()
     54         self.pickRadius = self.radius
     55 
     56     def SetRadius(self, radius):
     57         self.radius = radius
     58 
     59     def _ApplyTransformScaling(self, animate = False):
     60         scale = self._GetTransformScale(self.radius)
     61         if animate:
     62             animations.MorphVector2(self.gaugeTransform, 'scale', self.gaugeTransform.scale, scale, duration=milestoneConst.SCALE_ANIMATION_DURATION)
     63         else:
     64             self.gaugeTransform.scale = scale
     65 
     66     def _GetTransformScale(self, radius):
     67         scale = float(radius) / TRANSFORM_RADIUS
     68         return (scale, scale)
     69 
     70     def UpdateProgress(self, animate = True):
     71         if not self.controller:
     72             for gauge in (self.progressGauge, self.inTrainingGauge, self.missingGauge):
     73                 gauge.SetStartEnd(0.0, 0.0, animate)
     74 
     75             return
     76         progressRatio = self.controller.GetProgressRatio()
     77         if progressRatio:
     78             progressRatio = min(max(progressRatio, MIN_GAUGE_RATIO_TRAINED), 0.999)
     79         inTrainingRatio = self.controller.GetInTrainingRatio()
     80         if inTrainingRatio:
     81             inTrainingRatio = min(max(inTrainingRatio, MIN_GAUGE_RATIO), 0.999)
     82         remainingRatio = 0.0 if self.controller.IsCompleted() else 1.0 - progressRatio - inTrainingRatio
     83         self.progressGauge.SetStartEnd(None, progressRatio, animate)
     84         self.inTrainingGauge.SetStartEnd(progressRatio, progressRatio + inTrainingRatio, animate)
     85         self.missingGauge.SetStartEnd(1.0 - remainingRatio, None, animate)
     86 
     87     def GetLineWidth(self, radius):
     88         return 0.75 * radius