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

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))