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

bloodlineInfo.py (12660B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\login\charcreation\empireui\bloodlineInfo.py
      2 from carbonui import const as uiconst
      3 from carbonui.primitives.container import Container
      4 from carbonui.uicore import uicore
      5 from characterdata.bloodlines import get_bloodline_name
      6 from charactercreator.client.empireSelectionData import GetBloodlinesInfo
      7 import charactercreator.client.scalingUtils as ccScalingUtils
      8 from eve.common.lib.appConst import bloodlineAmarr, bloodlineNiKunni, bloodlineKhanid
      9 from eve.common.lib.appConst import bloodlineAchura, bloodlineCivire, bloodlineDeteis
     10 from eve.common.lib.appConst import bloodlineGallente, bloodlineIntaki, bloodlineJinMei
     11 from eve.common.lib.appConst import bloodlineBrutor, bloodlineSebiestor, bloodlineVherokior
     12 from carbonui.fontconst import STYLE_HEADER
     13 from eve.client.script.ui.login.charcreation.charCreationButtons import StaticBloodlineButton
     14 from eve.client.script.ui.login.charcreation.label import CCLabel
     15 from eve.client.script.ui.util.uix import GetTextWidth
     16 from localization import GetByMessageID
     17 BLOODLINES_INFO_TEXT_HEIGHT = 85
     18 GENDER_BUTTON_MARGIN = 4
     19 BLOODLINES_INFO_HEIGHT = BLOODLINES_INFO_TEXT_HEIGHT + GENDER_BUTTON_MARGIN
     20 BLOODLINES_INFO_ICON_SIZE = 45
     21 BLOODLINES_INFO_ICON_TOP = 25
     22 BLOODLINES_INFO_ICON_TO_NAME_MARGIN = 11
     23 BLOODLINE_NAME_FONTSIZE = 11
     24 BLOODLINES_INFO_TEXT_WIDTH = 498
     25 BLOODLINES_INFO_ICON_TO_TEXT_MARGIN = 10
     26 BLOODLINES_INFO_TITLE_TO_TEXT_MARGIN = 11
     27 BLOODLINES_INFO_WIDTH = BLOODLINES_INFO_ICON_SIZE + BLOODLINES_INFO_ICON_TO_TEXT_MARGIN + BLOODLINES_INFO_TEXT_WIDTH
     28 BLOODLINES_INFO_TITLE_FONTSIZE = 13
     29 BLOODLINES_INFO_TEXT_FONTSIZE = 11
     30 BLOODLINES_INFO_TITLE_OPACITY = 1.0
     31 BLOODLINES_INFO_TEXT_OPACITY = 0.75
     32 BLOODLINE_ICONS_BY_ID = {bloodlineAmarr: 'res:/UI/Texture/classes/EmpireSelection/BloodlineIcons/bloodline_Amarr.png',
     33  bloodlineKhanid: 'res:/UI/Texture/classes/EmpireSelection/BloodlineIcons/bloodline_Khanid.png',
     34  bloodlineNiKunni: 'res:/UI/Texture/classes/EmpireSelection/BloodlineIcons/bloodline_Nikunni.png',
     35  bloodlineGallente: 'res:/UI/Texture/classes/EmpireSelection/BloodlineIcons/bloodline_Gallente.png',
     36  bloodlineIntaki: 'res:/UI/Texture/classes/EmpireSelection/BloodlineIcons/bloodline_Intaki.png',
     37  bloodlineJinMei: 'res:/UI/Texture/classes/EmpireSelection/BloodlineIcons/bloodline_Jinmei.png',
     38  bloodlineDeteis: 'res:/UI/Texture/classes/EmpireSelection/BloodlineIcons/bloodline_Deteis.png',
     39  bloodlineAchura: 'res:/UI/Texture/classes/EmpireSelection/BloodlineIcons/bloodline_Achura.png',
     40  bloodlineCivire: 'res:/UI/Texture/classes/EmpireSelection/BloodlineIcons/bloodline_Civire.png',
     41  bloodlineSebiestor: 'res:/UI/Texture/classes/EmpireSelection/BloodlineIcons/bloodline_Sebiestor.png',
     42  bloodlineVherokior: 'res:/UI/Texture/classes/EmpireSelection/BloodlineIcons/bloodline_Vherokior.png',
     43  bloodlineBrutor: 'res:/UI/Texture/classes/EmpireSelection/BloodlineIcons/bloodline_Brutor.png'}
     44 
     45 def GetBloodlineInfoContainerWidth():
     46     return BLOODLINES_INFO_WIDTH * ccScalingUtils.GetScaleFactor()
     47 
     48 
     49 def GetBloodlineInfoContainerHeight():
     50     return BLOODLINES_INFO_HEIGHT * ccScalingUtils.GetScaleFactor()
     51 
     52 
     53 class BloodlineInfoContainer(Container):
     54 
     55     def ApplyAttributes(self, attributes):
     56         super(BloodlineInfoContainer, self).ApplyAttributes(attributes)
     57         self.raceID = attributes.raceID
     58         self.bloodlineIDs = attributes.bloodlineIDs
     59         self.selectedBloodlineID = attributes.selectedBloodlineID
     60         self.bloodlineButtonsByBloodline = {}
     61         self.bloodlineTitlesByBloodline = {}
     62         self.containersByBloodline = {}
     63         self.bloodlineBtns = []
     64         self.hoveredBloodlineID = None
     65         self.displayedBloodlineID = None
     66         bloodlineInfoContainerWidth = GetBloodlineInfoContainerWidth()
     67         bloodlineInfoContainerHeight = GetBloodlineInfoContainerHeight()
     68         self.contentContainer = Container(name='contentContainer', parent=self, align=uiconst.CENTER, width=bloodlineInfoContainerWidth, height=bloodlineInfoContainerHeight)
     69         self.ConstructLogos()
     70         self.ConstructText()
     71         self.SwitchBloodlines()
     72 
     73     def ConstructLogos(self):
     74         scaleFactor = ccScalingUtils.GetScaleFactor()
     75         logoSize = BLOODLINES_INFO_ICON_SIZE * scaleFactor
     76         marginToName = BLOODLINES_INFO_ICON_TO_NAME_MARGIN * scaleFactor
     77         nameHeight = BLOODLINE_NAME_FONTSIZE * scaleFactor
     78         iconContainerWidth = logoSize
     79         iconContainerHeight = logoSize + marginToName + nameHeight
     80         iconContainerTop = BLOODLINES_INFO_ICON_TOP * scaleFactor
     81         bloodlineNameFontsize = BLOODLINE_NAME_FONTSIZE * scaleFactor
     82         for bloodlineID in self.bloodlineIDs:
     83             cont = self.containersByBloodline[bloodlineID] = Container(name='cont_%i' % bloodlineID, parent=self.contentContainer, align=uiconst.TOPLEFT, width=iconContainerWidth, height=iconContainerHeight, opacity=0.0, top=iconContainerTop)
     84             btn = StaticBloodlineButton(name='bloodlineBtn_%d' % bloodlineID, parent=cont, align=uiconst.TOTOP, pos=(0,
     85              0,
     86              logoSize,
     87              logoSize), iconTexturePath=BLOODLINE_ICONS_BY_ID[bloodlineID])
     88             bloodlineName = get_bloodline_name(bloodlineID)
     89             bloodlineNameWidth = GetTextWidth(strng=bloodlineName, fontsize=bloodlineNameFontsize, hspace=0, uppercase=True)
     90             bloodlineTitle = CCLabel(name='bloodlineName_%s' % bloodlineName, parent=cont, fontsize=bloodlineNameFontsize, align=uiconst.BOTTOMLEFT, text=bloodlineName.upper(), letterspace=0, top=0, bold=0, left=iconContainerWidth / 2 - bloodlineNameWidth / 2)
     91             self.bloodlineTitlesByBloodline[bloodlineID] = bloodlineTitle
     92             self.bloodlineButtonsByBloodline[bloodlineID] = btn
     93             self.bloodlineBtns.append(btn)
     94 
     95     def ConstructText(self):
     96         bloodlineInfoContainerHeight = GetBloodlineInfoContainerHeight()
     97         scaleFactor = ccScalingUtils.GetScaleFactor()
     98         textWidth = BLOODLINES_INFO_TEXT_WIDTH * scaleFactor
     99         self.textCont = Container(name='bloodlineTextCont', parent=self.contentContainer, align=uiconst.TORIGHT, width=textWidth, height=bloodlineInfoContainerHeight, state=uiconst.UI_NORMAL)
    100         self.textContCentered = Container(name='bloodlineTextContCentered', parent=self.textCont, align=uiconst.CENTER, width=textWidth, height=bloodlineInfoContainerHeight, state=uiconst.UI_NORMAL)
    101         self.title = CCLabel(parent=self.textContCentered, fontsize=BLOODLINES_INFO_TITLE_FONTSIZE * scaleFactor, align=uiconst.TOTOP, text='', letterspace=0, top=0, bold=0, fontStyle=STYLE_HEADER, opacity=BLOODLINES_INFO_TITLE_OPACITY)
    102         self.text = CCLabel(parent=self.textContCentered, fontsize=BLOODLINES_INFO_TEXT_FONTSIZE * scaleFactor, align=uiconst.TOTOP, text='', letterspace=0, top=0, bold=0, fontStyle=STYLE_HEADER, opacity=BLOODLINES_INFO_TEXT_OPACITY, padTop=BLOODLINES_INFO_TITLE_TO_TEXT_MARGIN * scaleFactor)
    103 
    104     def GetInfo(self):
    105         return self.parent.GetInfo()
    106 
    107     def AlignButtonIcons(self, bloodlineID, left):
    108         if self.displayedBloodlineID is not None:
    109             return
    110         scaleFactor = ccScalingUtils.GetScaleFactor()
    111         logoSize = BLOODLINES_INFO_ICON_SIZE * scaleFactor
    112         marginToName = BLOODLINES_INFO_ICON_TO_NAME_MARGIN * scaleFactor
    113         nameHeight = BLOODLINE_NAME_FONTSIZE * scaleFactor
    114         nameFontsize = BLOODLINE_NAME_FONTSIZE * scaleFactor
    115         containerSizeDifference = ccScalingUtils.GetMainPanelWidth() - GetBloodlineInfoContainerWidth()
    116         containerWidth = logoSize
    117         containerHeight = logoSize + marginToName + nameHeight
    118         cont = self.containersByBloodline[bloodlineID]
    119         cont.left = left - containerWidth / 2 - containerSizeDifference / 2
    120         cont.state = uiconst.UI_PICKCHILDREN
    121         cont.width = containerWidth
    122         cont.height = containerHeight
    123         label = self.bloodlineTitlesByBloodline[bloodlineID]
    124         bloodlineName = get_bloodline_name(bloodlineID)
    125         nameWidth = GetTextWidth(strng=bloodlineName, fontsize=nameFontsize, hspace=0, uppercase=True)
    126         label.left = containerWidth / 2 - nameWidth / 2
    127 
    128     def ShowLogos(self):
    129         for logo in self.containersByBloodline.values():
    130             logo.opacity = 1.0
    131 
    132     def ShowBloodlineNames(self):
    133         for label in self.bloodlineTitlesByBloodline.values():
    134             label.opacity = 1.0
    135 
    136     def HideBloodlineNames(self):
    137         for label in self.bloodlineTitlesByBloodline.values():
    138             label.opacity = 0.0
    139 
    140     def ShowText(self):
    141         self.textCont.display = True
    142 
    143     def HideText(self):
    144         self.textCont.display = False
    145 
    146     def SelectBloodline(self, bloodlineID):
    147         self.selectedBloodlineID = bloodlineID
    148 
    149     def StopLogoAnimations(self):
    150         for bloodlineID in self.bloodlineIDs:
    151             logo = self.containersByBloodline[bloodlineID]
    152             uicore.animations.StopAllAnimations(logo)
    153 
    154     def SwitchBloodlines(self):
    155         self.StopLogoAnimations()
    156         if self.hoveredBloodlineID is not None:
    157             self.displayedBloodlineID = self.hoveredBloodlineID
    158         elif self.selectedBloodlineID is not None:
    159             self.displayedBloodlineID = self.selectedBloodlineID
    160         if self.displayedBloodlineID is None:
    161             self.ShowBloodlineNames()
    162             self.ShowLogos()
    163             self.HideText()
    164             return
    165         self.ShowText()
    166         self.HideBloodlineNames()
    167         for bloodlineID in self.bloodlineIDs:
    168             logo = self.containersByBloodline[bloodlineID]
    169             logo.left = 0
    170             logo.top = 0
    171             if bloodlineID != self.displayedBloodlineID:
    172                 logo.opacity = 0.0
    173             else:
    174                 logo.opacity = 1.0
    175                 bloodlineTitle = get_bloodline_name(bloodlineID)
    176                 bloodlineDescriptionLabel = GetBloodlinesInfo(self.raceID)[bloodlineID]
    177                 bloodlineDescription = GetByMessageID(bloodlineDescriptionLabel)
    178                 self.title.text = bloodlineTitle.upper()
    179                 self.text.text = bloodlineDescription
    180 
    181     def HoverBloodline(self, bloodlineID):
    182         if bloodlineID != self.hoveredBloodlineID:
    183             self.hoveredBloodlineID = bloodlineID
    184             self.SwitchBloodlines()
    185 
    186     def ResetInfo(self):
    187         self.hoveredBloodlineID = None
    188         self.displayedBloodlineID = None
    189         if not self.selectedBloodlineID:
    190             for bloodlineID in self.bloodlineIDs:
    191                 logo = self.containersByBloodline[bloodlineID]
    192                 scaleFactor = ccScalingUtils.GetScaleFactor()
    193                 iconContainerTop = BLOODLINES_INFO_ICON_TOP * scaleFactor
    194                 logo.top = iconContainerTop
    195 
    196         self.SwitchBloodlines()
    197 
    198     def UpdateLayout(self):
    199         scaleFactor = ccScalingUtils.GetScaleFactor()
    200         bloodlineInfoContainerWidth = GetBloodlineInfoContainerWidth()
    201         bloodlineInfoContainerHeight = GetBloodlineInfoContainerHeight()
    202         textWidth = BLOODLINES_INFO_TEXT_WIDTH * scaleFactor
    203         self.contentContainer.width = bloodlineInfoContainerWidth
    204         self.contentContainer.height = bloodlineInfoContainerHeight
    205         self.textCont.width = textWidth
    206         self.textCont.height = bloodlineInfoContainerHeight
    207         self.textContCentered.width = textWidth
    208         self.textContCentered.height = bloodlineInfoContainerHeight
    209         self.title.fontsize = BLOODLINES_INFO_TITLE_FONTSIZE * scaleFactor
    210         self.text.fontsize = BLOODLINES_INFO_TEXT_FONTSIZE * scaleFactor
    211         self.text.padTop = BLOODLINES_INFO_TITLE_TO_TEXT_MARGIN * scaleFactor
    212         logoSize = BLOODLINES_INFO_ICON_SIZE * scaleFactor
    213         marginToName = BLOODLINES_INFO_ICON_TO_NAME_MARGIN * scaleFactor
    214         nameHeight = BLOODLINE_NAME_FONTSIZE * scaleFactor
    215         nameFontsize = BLOODLINE_NAME_FONTSIZE * scaleFactor
    216         iconContainerWidth = logoSize
    217         iconContainerHeight = logoSize + marginToName + nameHeight
    218         iconContainerTop = BLOODLINES_INFO_ICON_TOP * scaleFactor
    219         for cont in self.containersByBloodline.values():
    220             cont.width = iconContainerWidth
    221             cont.height = iconContainerHeight
    222             cont.top = iconContainerTop
    223 
    224         for btn in self.bloodlineBtns:
    225             btn.Resize(logoSize, logoSize)
    226 
    227         for bloodlineID, label in self.bloodlineTitlesByBloodline.iteritems():
    228             nameWidth = GetTextWidth(strng=get_bloodline_name(bloodlineID), fontsize=nameFontsize, hspace=0, uppercase=True)
    229             label.fontsize = nameFontsize
    230             label.left = iconContainerWidth / 2 - nameWidth / 2
    231 
    232         self.SwitchBloodlines()