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