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

multiTrainingOverlay.py (7978B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\monetization\multiTrainingOverlay.py
      2 from carbonui import AxisAlignment, uiconst
      3 from carbonui.primitives.container import Container
      4 from carbonui.primitives.containerAutoSize import ContainerAutoSize
      5 from carbonui.primitives.flowcontainer import FlowContainer
      6 from carbonui.primitives.frame import Frame
      7 from carbonui.primitives.sprite import Sprite
      8 from carbonui.uianimations import animations
      9 from carbonui.util.color import Color
     10 from carbonui.control.button import Button
     11 from carbonui.control.checkbox import Checkbox
     12 from eve.client.script.ui.control.eveIcon import Icon
     13 from eve.client.script.ui.control.eveLabel import EveCaptionLarge, EveLabelLargeBold, EveLabelMedium
     14 from eve.client.script.ui.control.infoIcon import InfoIcon
     15 from eve.client.script.ui.shared.monetization.events import LogMultiPilotTrainingOpenAurOffer, LogMultiPilotTrainingOpenIskOffer
     16 from eve.client.script.ui.shared.vgs.button import BuyButtonAur, BuyButtonIsk
     17 from eve.common.script.util.eveFormat import RoundISK
     18 import evetypes
     19 from inventorycommon.const import typeMultiTrainingToken
     20 from inventorycommon.typeHelpers import GetAveragePrice
     21 import localization
     22 from player_messaging.client import get_supressed_result, set_suppress_result
     23 
     24 class MultiTrainingOverlay(Container):
     25     SUPPRESS_KEY = 'MultiplePilotTraining'
     26     CONTENT_LEFT = 140
     27     CHARACTERS_LEFT = -180
     28     default_align = uiconst.TOALL
     29     default_clipChildren = True
     30     default_state = uiconst.UI_HIDDEN
     31 
     32     def ApplyAttributes(self, attributes):
     33         super(MultiTrainingOverlay, self).ApplyAttributes(attributes)
     34         self.Layout()
     35 
     36     def Layout(self):
     37         self.compactMode = False
     38         Frame(bgParent=self, texturePath='res:/UI/Texture/classes/Monetization/vignette.png', cornerSize=150)
     39         self.characters = Sprite(parent=self, align=uiconst.CENTER, state=uiconst.UI_DISABLED, left=self.CHARACTERS_LEFT, top=10, texturePath='res:/UI/Texture/classes/Monetization/characters.png', width=299, height=355)
     40         self.content = ContainerAutoSize(parent=self, align=uiconst.CENTER, left=self.CONTENT_LEFT, width=340)
     41         EveCaptionLarge(parent=self.content, align=uiconst.TOTOP, text=localization.GetByLabel('UI/SkillQueue/MultiTrainingOverlay/MultiplePilotTraining'))
     42         EveLabelMedium(parent=self.content, align=uiconst.TOTOP, top=4, text=localization.GetByLabel('UI/SkillQueue/MultiTrainingOverlay/MultiTrainingMessageTop'))
     43         itemCont = ContainerAutoSize(parent=self.content, align=uiconst.TOTOP, alignMode=uiconst.TOTOP, top=12)
     44         itemIconCont = ContainerAutoSize(parent=itemCont, align=uiconst.TOLEFT, padding=(0, 8, 0, 8))
     45         Icon(parent=itemIconCont, align=uiconst.TOPLEFT, state=uiconst.UI_DISABLED, size=64, typeID=typeMultiTrainingToken)
     46         Sprite(parent=itemIconCont, align=uiconst.TOPLEFT, state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/classes/InvItem/bgNormal.png', width=64, height=64)
     47         EveLabelLargeBold(parent=itemCont, align=uiconst.TOTOP, padding=(8, 8, 24, 0), text=evetypes.GetName(typeMultiTrainingToken))
     48         InfoIcon(parent=itemCont, align=uiconst.TOPRIGHT, top=8, typeID=typeMultiTrainingToken)
     49         self.estimatePriceLabel = EveLabelMedium(parent=itemCont, align=uiconst.TOTOP, padding=(8, 0, 8, 6), color=Color.GRAY5)
     50         buyButtonCont = FlowContainer(parent=itemCont, align=uiconst.TOTOP, padding=(8, 0, 8, 8), contentSpacing=(8, 0))
     51         MultiTrainingBuyButtonIsk(parent=buyButtonCont, align=uiconst.NOALIGN, typeID=typeMultiTrainingToken)
     52         MultiTrainingBuyButtonAur(parent=buyButtonCont, align=uiconst.NOALIGN, types=[typeMultiTrainingToken])
     53         EveLabelMedium(parent=self.content, align=uiconst.TOTOP, top=12, text=localization.GetByLabel('UI/SkillQueue/MultiTrainingOverlay/MultiTrainingMessageBottom'))
     54         dismissCont = FlowContainer(parent=self.content, align=uiconst.TOTOP, padding=(8, 24, 8, 0), contentAlignment=AxisAlignment.CENTER, contentSpacing=(8, 4))
     55         Button(parent=dismissCont, align=uiconst.NOALIGN, label=localization.GetByLabel('UI/SkillQueue/MultiTrainingOverlay/Dismiss'), func=lambda *args: self.Dismiss())
     56         self.suppressCheckbox = Checkbox(parent=dismissCont, align=uiconst.NOALIGN, width=200, text=localization.GetByLabel('UI/Common/SuppressionShowMessage'), checked=self.suppressed, callback=self.OnSuppressChanged)
     57 
     58     def OnSuppressChanged(self, checkbox):
     59         self.suppressed = self.suppressCheckbox.GetValue()
     60 
     61     @classmethod
     62     def IsSuppressed(cls):
     63         return get_supressed_result(cls.SUPPRESS_KEY, False)
     64 
     65     @property
     66     def suppressed(self):
     67         return self.IsSuppressed()
     68 
     69     @suppressed.setter
     70     def suppressed(self, suppressed):
     71         if suppressed:
     72             set_suppress_result(self.SUPPRESS_KEY, suppressed)
     73         else:
     74             set_suppress_result(self.SUPPRESS_KEY, None)
     75         sm.GetService('settings').SaveSettings()
     76 
     77     def ShouldDisplay(self):
     78         if self.suppressed:
     79             return False
     80         if sm.GetService('skillqueue').SkillInTraining() is not None:
     81             return False
     82         return sm.GetService('skillqueue').IsAllCharacterTrainingSlotsUsed()
     83 
     84     def Display(self):
     85         self.Load()
     86         self.Enable()
     87         self.AnimShow()
     88 
     89     def Load(self):
     90         self.UpdateEstimatedPrice()
     91         self.suppressCheckbox.SetValue(self.suppressed)
     92 
     93     def UpdateEstimatedPrice(self):
     94         try:
     95             tokenAveragePrice = GetAveragePrice(typeMultiTrainingToken)
     96         except KeyError:
     97             tokenAveragePrice = None
     98 
     99         if not tokenAveragePrice:
    100             text = localization.GetByLabel('UI/SkillQueue/MultiTrainingOverlay/EstimatedPriceUnknown')
    101         else:
    102             amount = RoundISK(tokenAveragePrice)
    103             text = localization.GetByLabel('UI/SkillQueue/MultiTrainingOverlay/EstimatedPrice', amount=amount)
    104         self.estimatePriceLabel.SetText(text)
    105 
    106     def Dismiss(self):
    107         self.Disable()
    108         self.AnimHide()
    109 
    110     def AnimShow(self):
    111         self.Show()
    112         animations.FadeTo(self, duration=0.4)
    113         if not self.compactMode:
    114             animations.FadeTo(self.characters, timeOffset=0.3)
    115         animations.FadeTo(self.content, timeOffset=0.3)
    116 
    117     def AnimHide(self):
    118         animations.FadeOut(self, duration=0.4)
    119 
    120     def EnterCompactMode(self):
    121         if self.compactMode:
    122             return
    123         self.compactMode = True
    124         animations.FadeOut(self.characters, duration=0.2)
    125         animations.MorphScalar(self.characters, 'left', startVal=self.characters.left, endVal=self.CHARACTERS_LEFT - 60, duration=0.3)
    126         animations.MorphScalar(self.content, 'left', startVal=self.content.left, endVal=0, duration=0.3)
    127 
    128     def ExitCompactMode(self):
    129         if not self.compactMode:
    130             return
    131         self.compactMode = False
    132         animations.FadeIn(self.characters, duration=0.2)
    133         animations.MorphScalar(self.characters, 'left', startVal=self.characters.left, endVal=self.CHARACTERS_LEFT, duration=0.3)
    134         animations.MorphScalar(self.content, 'left', startVal=self.content.left, endVal=self.CONTENT_LEFT, duration=0.3)
    135 
    136     def UpdateAlignment(self, budgetLeft = 0, budgetTop = 0, budgetWidth = 0, budgetHeight = 0, updateChildrenOnly = False):
    137         if budgetWidth < 640:
    138             self.EnterCompactMode()
    139         else:
    140             self.ExitCompactMode()
    141         return super(MultiTrainingOverlay, self).UpdateAlignment(budgetLeft, budgetTop, budgetWidth, budgetHeight, updateChildrenOnly)
    142 
    143 
    144 class MultiTrainingBuyButtonIsk(BuyButtonIsk):
    145 
    146     def OpenMarketWindow(self):
    147         super(MultiTrainingBuyButtonIsk, self).OpenMarketWindow()
    148         LogMultiPilotTrainingOpenIskOffer()
    149 
    150 
    151 class MultiTrainingBuyButtonAur(BuyButtonAur):
    152 
    153     def OpenOfferWindow(self):
    154         super(MultiTrainingBuyButtonAur, self).OpenOfferWindow()
    155         LogMultiPilotTrainingOpenAurOffer()