goalNode.py (8610B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\careerPortal\circleView\goalNode.py 2 from carbon.client.script.environment.AudioUtil import PlaySound 3 from carbon.common.script.sys.serviceConst import ROLE_GML 4 from carbonui import const as uiconst 5 from carbonui.primitives.sprite import Sprite 6 from carbonui.primitives.vectorarc import VectorArc 7 from carbonui.util.dpi import ScaleDpi 8 from careergoals.client.career_goal_svc import get_career_goals_svc 9 from eve.client.script.ui import eveColor 10 from eve.client.script.ui.shared.careerPortal import careerConst 11 from eve.client.script.ui.shared.careerPortal.careerControllerUI import get_career_portal_controller_svc 12 from eve.client.script.ui.shared.careerPortal.circleView.circleNode import CircleNodeWithText 13 from eve.client.script.ui.shared.careerPortal.cpSignals import on_cp_goal_tracking_removed, on_cp_goal_tracking_added 14 from eve.client.script.ui.shared.careerPortal.link.dragData import NodeDragData 15 from eve.client.script.ui.util.uix import QtyPopup 16 from careergoals.client.goal import Goal 17 from localization import GetByLabel 18 GLOW_SPRITE_WIDTH = 64 19 GOAL_NODE_RADIUS = 24 20 DEFAULT_GLOW_OPACITY = 0.8 21 HIGHLIGHT_GLOW_OPACITY = 1.0 22 23 class GoalNode(CircleNodeWithText): 24 default_width = 48 25 default_height = 48 26 isTracked = False 27 28 def ApplyAttributes(self, attributes): 29 self.goal = attributes.goal 30 super(GoalNode, self).ApplyAttributes(attributes) 31 self.UpdateNode() 32 33 def PrepareUI(self): 34 super(GoalNode, self).PrepareUI() 35 self.centerDot = Sprite(name='centerDot', parent=self.iconCont, align=uiconst.CENTER, state=uiconst.UI_DISABLED, pos=(0, 0, 6, 6), texturePath='res:/UI/Texture/Shared/smallDot.png', outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, glowBrightness=0) 36 37 def ConstructIcon(self): 38 self.bgSprite = Sprite(name='bgSprite', parent=self.iconCont, align=uiconst.CENTER, texturePath='res:/UI/Texture/classes/careerPortal/node_glow.png', state=uiconst.UI_DISABLED, outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, glowBrightness=0.2, opacity=DEFAULT_GLOW_OPACITY) 39 self.checkmarkSprite = Sprite(name='checkmarkSprite', parent=self.iconCont, pos=(0, 0, 20, 20), align=uiconst.CENTER, texturePath='res:/UI/Texture/classes/careerPortal/circleView/goalCompleted.png', state=uiconst.UI_DISABLED, color=eveColor.LEAFY_GREEN) 40 self.checkmarkSprite.display = False 41 self.trackedSprite = Sprite(name='trackedSprite', parent=self.iconCont, pos=(0, 0, 32, 32), align=uiconst.CENTER, texturePath='res:/UI/Texture/classes/careerPortal/circleView/eye_open_32.png', state=uiconst.UI_DISABLED, color=eveColor.WHITE, outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, glowBrightness=0) 42 self.trackedSprite.Hide() 43 44 def ConstructFrame(self): 45 self.frame = VectorArc(name='frame', parent=self.iconCont, align=uiconst.CENTER, radius=ScaleDpi(ScaleDpi(GOAL_NODE_RADIUS)), lineWidth=ScaleDpi(2), fill=False, opacity=0, outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, glowBrightness=0) 46 47 def GetSignals(self): 48 signals = super(GoalNode, self).GetSignals() 49 signals.append((careerConst.SELECTED_GOAL_SETTING.on_change, self.OnSelectedGoalChanged)) 50 signals.append((on_cp_goal_tracking_removed, self.OnGoalUntracked)) 51 signals.append((on_cp_goal_tracking_added, self.OnGoalTracked)) 52 return signals 53 54 def GetNameLabel(self): 55 if not self.goal: 56 return '' 57 return self.goal.definition.name 58 59 def GetProgressLabel(self): 60 if not self.goal: 61 return '' 62 totalPoints = self.goal.definition.target_value 63 currentPoints = min(self.goal.progress, totalPoints) 64 return GetByLabel('UI/CareerPortal/ActivityProgressCount', currentPoints=currentPoints, totalPoints=totalPoints) 65 66 def UpdateAnchorPointsAndSize(self, contSize): 67 super(GoalNode, self).UpdateAnchorPointsAndSize(contSize) 68 scaledWidth = self.width + ScaleDpi(GLOW_SPRITE_WIDTH) 69 self.bgSprite.SetSize(scaledWidth, scaledWidth) 70 71 def OnSelectedGoalChanged(self, goalID): 72 self.UpdateNode() 73 74 def OnGoalTracked(self, goalID): 75 isTracked = get_career_portal_controller_svc().is_goal_tracked(self.goal.goal_id) 76 self.isTracked = True if isTracked and not self.IsCompleted() else False 77 self.UpdateTrackedState() 78 79 def OnGoalUntracked(self, goalID): 80 if goalID != self.goal.goal_id: 81 return 82 self.isTracked = False 83 self.UpdateTrackedState() 84 85 def OnGoalUpdated(self, goalID, value): 86 if goalID != self.goal.goal_id: 87 return 88 self.UpdateNode() 89 90 def OnGoalCompleted(self, goalID): 91 if goalID != self.goal.goal_id: 92 return 93 self.UpdateNode() 94 95 def IsCompleted(self): 96 return self.goal.is_completed() 97 98 def IsSelected(self): 99 return careerConst.SELECTED_GOAL_SETTING.get() == self.goal.goal_id 100 101 def UpdateNode(self): 102 super(GoalNode, self).UpdateNode() 103 if self.IsSelected(): 104 self.SetSelectedState() 105 if get_career_portal_controller_svc().is_goal_tracked(self.goal.goal_id) and not self.IsCompleted(): 106 self.isTracked = True 107 else: 108 self.isTracked = False 109 self.UpdateTrackedState() 110 111 def SetSelectedState(self): 112 self.frame.color = eveColor.CRYO_BLUE 113 self.bgSprite.color = eveColor.Color(eveColor.CRYO_BLUE).SetOpacity(HIGHLIGHT_GLOW_OPACITY).GetRGBA() 114 if self.IsCompleted(): 115 return 116 self.centerDot.color = eveColor.WHITE 117 self.centerDot.glowBrightness = 0.5 118 self.trackedSprite.color = eveColor.WHITE 119 if self.isTracked: 120 self.trackedSprite.glowBrightness = 0.6 121 122 def SetNormalState(self): 123 super(GoalNode, self).SetNormalState() 124 if self.IsCompleted(): 125 self.SetCompletedState() 126 return 127 if self.isTracked: 128 self.trackedSprite.color = eveColor.WHITE 129 if self.IsSelected(): 130 return 131 self.frame.color = eveColor.WHITE 132 self.trackedSprite.glowBrightness = 0 133 self.centerDot.color = eveColor.WHITE 134 self.centerDot.glowBrightness = 0 135 self.bgSprite.color = eveColor.Color(eveColor.WHITE).SetOpacity(DEFAULT_GLOW_OPACITY).GetRGBA() 136 137 def SetHoverState(self): 138 super(GoalNode, self).SetHoverState() 139 PlaySound('career_portal_mission_hover_play') 140 if self.IsCompleted(): 141 return 142 if not self.IsSelected(): 143 self.centerDot.color = eveColor.CRYO_BLUE 144 self.frame.color = eveColor.CRYO_BLUE 145 self.centerDot.glowBrightness = 0.5 146 self.bgSprite.color = eveColor.Color(eveColor.CRYO_BLUE).SetOpacity(HIGHLIGHT_GLOW_OPACITY).GetRGBA() 147 if self.isTracked: 148 self.trackedSprite.color = eveColor.CRYO_BLUE 149 150 def SetCompletedState(self): 151 super(GoalNode, self).SetCompletedState() 152 self.checkmarkSprite.Show() 153 self.centerDot.opacity = 0 154 if self.IsSelected(): 155 return 156 self.frame.color = eveColor.LEAFY_GREEN 157 self.bgSprite.color = eveColor.Color(eveColor.LEAFY_GREEN).SetOpacity(DEFAULT_GLOW_OPACITY).GetRGBA() 158 159 def UpdateTrackedState(self): 160 if not self.isTracked: 161 self.trackedSprite.Hide() 162 self.centerDot.Show() 163 return 164 self.trackedSprite.Show() 165 self.centerDot.Hide() 166 167 def OnClick(self, *args): 168 get_career_portal_controller_svc().select_goal(self.goal.goal_id) 169 170 def GetMenu(self): 171 if session and session.role & ROLE_GML: 172 menu = [['Goal ID: {}'.format(self.goal.goal_id), self._CopyGoalID], ['QA: Complete', self._Debug_CompleteGoal], ['QA: Progress', self._Debug_ProgressGoal]] 173 return menu 174 175 def GetDragData(self): 176 if not self.goal: 177 return 178 return NodeDragData(self.goal.definition.career, self.goal.definition.group_id, self.goal.goal_id, self.goal.definition.name) 179 180 def _Debug_CompleteGoal(self): 181 get_career_goals_svc().get_goal_data_controller().admin_complete_goal(self.goal.goal_id) 182 183 def _Debug_ProgressGoal(self): 184 ret = QtyPopup(minvalue=0, setvalue=1, maxvalue=self.goal.definition.target_value) 185 if ret and 'qty' in ret: 186 get_career_goals_svc().get_goal_data_controller().admin_progress_goal(self.goal.goal_id, ret['qty']) 187 188 def _CopyGoalID(self): 189 import blue 190 blue.pyos.SetClipboardData(unicode(self.goal.goal_id))