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