def handleInput(self, inputClass):
        ' Calls function mapped in DomesticAdvisorInputMap'
        # only get from the map if it has the key

        if (inputClass.getNotifyCode() ==
                NotifyCode.NOTIFY_LISTBOX_ITEM_SELECTED):
            if (inputClass.getMouseX() == 0):
                screen = CyGInterfaceScreen("DomesticAdvisor",
                                            CvScreenEnums.DOMESTIC_ADVISOR)
                screen.hideScreen()

                CyInterface().selectCity(
                    gc.getPlayer(inputClass.getData1()).getCity(
                        inputClass.getData2()), True)

                popupInfo = CyPopupInfo()
                popupInfo.setButtonPopupType(
                    ButtonPopupTypes.BUTTONPOPUP_PYTHON_SCREEN)
                popupInfo.setText(u"showDomesticAdvisor")
                popupInfo.addPopup(inputClass.getData1())
            else:
                self.updateAppropriateCitySelection()
                self.updateSpecialists()
        elif (inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED):
            if (inputClass.getFunctionName() == "DomesticSplit"):
                screen = CyGInterfaceScreen("DomesticAdvisor",
                                            CvScreenEnums.DOMESTIC_ADVISOR)
                screen.hideScreen()

        return 0
예제 #2
0
class CvTopCivs:
    "The Greatest Civilizations screen"

    def __init__(self):

        self.X_SCREEN = 0  #205
        self.Y_SCREEN = 0  #27
        self.W_SCREEN = 1024  #426
        self.H_SCREEN = 768  #470

        self.X_MAIN_PANEL = 250  #250
        self.Y_MAIN_PANEL = 70
        self.W_MAIN_PANEL = 550  #550
        self.H_MAIN_PANEL = 500

        self.iMarginSpace = 15

        self.X_HEADER_PANEL = self.X_MAIN_PANEL + self.iMarginSpace
        self.Y_HEADER_PANEL = self.Y_MAIN_PANEL + self.iMarginSpace
        self.W_HEADER_PANEL = self.W_MAIN_PANEL - (self.iMarginSpace * 2)
        self.H_HEADER_PANEL = self.H_MAIN_PANEL - (self.iMarginSpace * 2)

        #        iWHeaderPanelRemainingAfterLeader = self.W_HEADER_PANEL - self.W_LEADER_ICON + (self.iMarginSpace * 3)
        #        iXHeaderPanelRemainingAfterLeader = self.X_LEADER_ICON + self.W_LEADER_ICON + self.iMarginSpace
        self.X_LEADER_TITLE_TEXT = 500  #iXHeaderPanelRemainingAfterLeader + (iWHeaderPanelRemainingAfterLeader / 2)
        self.Y_LEADER_TITLE_TEXT = self.Y_HEADER_PANEL + self.iMarginSpace
        self.W_LEADER_TITLE_TEXT = self.W_HEADER_PANEL / 3
        self.H_LEADER_TITLE_TEXT = self.H_HEADER_PANEL / 3

        self.X_TEXT_PANEL = self.X_HEADER_PANEL + self.iMarginSpace
        self.Y_TEXT_PANEL = self.Y_HEADER_PANEL + 132
        self.W_TEXT_PANEL = self.W_HEADER_PANEL - (self.iMarginSpace * 2)
        self.H_TEXT_PANEL = 265  #self.H_MAIN_PANEL - self.H_HEADER_PANEL - (self.iMarginSpace * 3) + 10 #10 is the fudge factor
        self.iTEXT_PANEL_MARGIN = 35

        self.X_RANK_TEXT = self.X_MAIN_PANEL + 100  #PAE
        self.Y_RANK_TEXT = 230
        self.W_RANK_TEXT = 500
        self.H_RANK_TEXT = 30

        self.X_EXIT = 460
        self.Y_EXIT = self.Y_MAIN_PANEL + 440
        self.W_EXIT = 120
        self.H_EXIT = 30

    def showScreen(self):

        'Use a popup to display the opening text'
        if (CyGame().isPitbossHost()):
            return

        # Text
        self.TITLE_TEXT = u"<font=3>" + localText.getText(
            "TXT_KEY_TOPCIVS_TITLE", ()).upper() + u"</font>"
        self.EXIT_TEXT = localText.getText("TXT_KEY_PEDIA_SCREEN_EXIT",
                                           ()).upper()

        self.HistorianList = [
            localText.getText("TXT_KEY_TOPCIVS_HISTORIAN1", ()),
            localText.getText("TXT_KEY_TOPCIVS_HISTORIAN2", ()),
            localText.getText("TXT_KEY_TOPCIVS_HISTORIAN3", ()),
            localText.getText("TXT_KEY_TOPCIVS_HISTORIAN4", ()),
            localText.getText("TXT_KEY_TOPCIVS_HISTORIAN5", ()),
            localText.getText("TXT_KEY_TOPCIVS_HISTORIAN6", ()),
            localText.getText("TXT_KEY_TOPCIVS_HISTORIAN7", ()),
            localText.getText("TXT_KEY_TOPCIVS_HISTORIAN8", ()),
            localText.getText("TXT_KEY_TOPCIVS_HISTORIAN9", ()),
            localText.getText("TXT_KEY_TOPCIVS_HISTORIAN10", ()),
            localText.getText("TXT_KEY_TOPCIVS_HISTORIAN11", ())
        ]

        self.RankList = [
            localText.getText("TXT_KEY_TOPCIVS_RANK1", ()),
            localText.getText("TXT_KEY_TOPCIVS_RANK2", ()),
            localText.getText("TXT_KEY_TOPCIVS_RANK3", ()),
            localText.getText("TXT_KEY_TOPCIVS_RANK4", ()),
            localText.getText("TXT_KEY_TOPCIVS_RANK5", ()),
            localText.getText("TXT_KEY_TOPCIVS_RANK6", ()),
            localText.getText("TXT_KEY_TOPCIVS_RANK7", ()),
            localText.getText("TXT_KEY_TOPCIVS_RANK8", ())
        ]

        self.TypeList = [
            localText.getText("TXT_KEY_TOPCIVS_WEALTH", ()),
            localText.getText("TXT_KEY_TOPCIVS_POWER", ()),
            localText.getText("TXT_KEY_TOPCIVS_TECH", ()),
            localText.getText("TXT_KEY_TOPCIVS_CULTURE", ()),
            localText.getText("TXT_KEY_TOPCIVS_SIZE", ()),
        ]

        # Randomly choose what category and what historian will be used
        szTypeRand = random.choice(self.TypeList)
        szHistorianRand = random.choice(self.HistorianList)

        # Create screen

        self.screen = CyGInterfaceScreen("CvTopCivs", CvScreenEnums.TOP_CIVS)

        self.screen.setSound("AS2D_TOP_CIVS")
        self.screen.showScreen(PopupStates.POPUPSTATE_QUEUED, False)
        self.screen.showWindowBackground(False)
        self.screen.setDimensions(self.screen.centerX(self.X_SCREEN),
                                  self.screen.centerY(self.Y_SCREEN),
                                  self.W_SCREEN, self.H_SCREEN)

        # Create panels

        # Main
        szMainPanel = "TopCivsMainPanel"
        self.screen.addPanel(szMainPanel, "", "", True, True,
                             self.X_MAIN_PANEL, self.Y_MAIN_PANEL,
                             self.W_MAIN_PANEL, self.H_MAIN_PANEL,
                             PanelStyles.PANEL_STYLE_MAIN)

        # Top
        szHeaderPanel = "TopCivsHeaderPanel"
        szHeaderText = ""  #gc.getLeaderHeadInfo(self.player.getLeaderType()).getDescription() + "\n-" + self.player.getCivilizationDescription(0) + "-"
        self.screen.addPanel(szHeaderPanel, szHeaderText, "", True, True,
                             self.X_HEADER_PANEL, self.Y_HEADER_PANEL,
                             self.W_HEADER_PANEL, self.H_HEADER_PANEL,
                             PanelStyles.PANEL_STYLE_DAWNBOTTOM)

        # Bottom
        szTextPanel = "TopCivsTextPanel"
        szHeaderText = ""  #self.Text_Title
        self.screen.addPanel(szTextPanel, szHeaderText, "", True, True,
                             self.X_TEXT_PANEL, self.Y_TEXT_PANEL,
                             self.W_TEXT_PANEL, self.H_TEXT_PANEL,
                             PanelStyles.PANEL_STYLE_DAWNTOP)

        self.screen.setButtonGFC("Exit", self.EXIT_TEXT, "", self.X_EXIT,
                                 self.Y_EXIT, self.W_EXIT, self.H_EXIT,
                                 WidgetTypes.WIDGET_CLOSE_SCREEN, -1, -1,
                                 ButtonStyles.BUTTON_STYLE_STANDARD)

        # Title Text
        self.X_TITLE_TEXT = self.X_HEADER_PANEL + (self.W_HEADER_PANEL / 2)
        self.Y_TITLE_TEXT = self.Y_HEADER_PANEL + 15
        self.screen.setLabel("DawnTitle", "Background", self.TITLE_TEXT,
                             CvUtil.FONT_CENTER_JUSTIFY, self.X_TITLE_TEXT,
                             self.Y_TITLE_TEXT, -2.0, FontTypes.GAME_FONT,
                             WidgetTypes.WIDGET_GENERAL, -1, -1)

        # 1 Text
        self.X_INFO_TEXT = self.X_TITLE_TEXT - 260  #self.X_HEADER_PANEL + (self.W_HEADER_PANEL / 2)
        self.Y_INFO_TEXT = self.Y_TITLE_TEXT + 50
        self.W_INFO_TEXT = self.W_HEADER_PANEL
        self.H_INFO_TEXT = 70
        szText = localText.getText(
            "TXT_KEY_TOPCIVS_TEXT1",
            (szHistorianRand, )) + u"\n" + localText.getText(
                "TXT_KEY_TOPCIVS_TEXT2", (szTypeRand, ))
        self.screen.addMultilineText("InfoText1", szText, self.X_INFO_TEXT,
                                     self.Y_INFO_TEXT, self.W_INFO_TEXT,
                                     self.H_INFO_TEXT,
                                     WidgetTypes.WIDGET_GENERAL, -1, -1,
                                     CvUtil.FONT_CENTER_JUSTIFY)

        self.makeList(szTypeRand)

    def makeList(self, szType):

        # Determine the list of top civs

        # Will eventually Store [iValue, iPlayerID]
        self.aiTopCivsValues = []

        # Loop through all players except the barbs
        for iPlayerLoop in xrange(gc.getMAX_PLAYERS() - 1):

            if (gc.getPlayer(iPlayerLoop).isAlive()):

                if (szType == localText.getText("TXT_KEY_TOPCIVS_WEALTH", ())):

                    self.aiTopCivsValues.append(
                        [gc.getPlayer(iPlayerLoop).getGold(), iPlayerLoop])
                    CvUtil.pyPrint(
                        "Player %d Num Gold: %d" %
                        (iPlayerLoop, gc.getPlayer(iPlayerLoop).getGold()))

                if (szType == localText.getText("TXT_KEY_TOPCIVS_POWER", ())):

                    self.aiTopCivsValues.append(
                        [gc.getPlayer(iPlayerLoop).getPower(), iPlayerLoop])

                if (szType == localText.getText("TXT_KEY_TOPCIVS_TECH", ())):

                    iPlayerNumTechs = 0
                    iNumTotalTechs = gc.getNumTechInfos()

                    for iTechLoop in xrange(iNumTotalTechs):

                        bPlayerHasTech = gc.getTeam(
                            gc.getPlayer(iPlayerLoop).getTeam()).isHasTech(
                                iTechLoop)

                        if (bPlayerHasTech):
                            iPlayerNumTechs = iPlayerNumTechs + 1

                    self.aiTopCivsValues.append([iPlayerNumTechs, iPlayerLoop])

                if (szType == localText.getText("TXT_KEY_TOPCIVS_CULTURE",
                                                ())):

                    self.aiTopCivsValues.append([
                        gc.getPlayer(iPlayerLoop).countTotalCulture(),
                        iPlayerLoop
                    ])

                if (szType == localText.getText("TXT_KEY_TOPCIVS_SIZE", ())):

                    self.aiTopCivsValues.append([
                        gc.getPlayer(iPlayerLoop).getTotalLand(), iPlayerLoop
                    ])

        # Lowest to Highest
        self.aiTopCivsValues.sort()
        # Switch it around - want the best to be first
        self.aiTopCivsValues.reverse()

        self.printList(szType)

    def printList(self, szType):

        # Print out the list
        for iRankLoop in xrange(8):

            if (iRankLoop > len(self.aiTopCivsValues) - 1):
                return

            iPlayer = self.aiTopCivsValues[iRankLoop][1]
            #             iValue = self.aiTopCivsValues[iRankLoop][0]

            szPlayerName = gc.getPlayer(iPlayer).getNameKey()

            if (szPlayerName != ""):

                pActivePlayerTeam = gc.getTeam(
                    gc.getPlayer(CyGame().getActivePlayer()).getTeam())
                iPlayerTeam = gc.getPlayer(iPlayer).getTeam()
                szCivText = ""

                # Does the Active player know this player exists?
                if (iPlayer == CyGame().getActivePlayer()
                        or pActivePlayerTeam.isHasMet(iPlayerTeam)):
                    szCivText = localText.getText(
                        "TXT_KEY_TOPCIVS_TEXT3",
                        (szPlayerName, self.RankList[iRankLoop]))

                else:
                    szCivText = localText.getText("TXT_KEY_TOPCIVS_UNKNOWN",
                                                  ())

                szWidgetName = "Text" + str(iRankLoop)
                szWidgetDesc = "%d) %s" % (iRankLoop + 1, szCivText)
                iXLoc = self.X_RANK_TEXT
                iYLoc = self.Y_RANK_TEXT + (iRankLoop * self.H_RANK_TEXT)
                #self.screen.setText(szWidgetName, "Background", szWidgetDesc, CvUtil.FONT_LEFT_JUSTIFY, iXLoc, iYLoc, TEXT_Z, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
                self.screen.addMultilineText(szWidgetName,
                                             unicode(szWidgetDesc), iXLoc,
                                             iYLoc, self.W_RANK_TEXT,
                                             self.H_RANK_TEXT,
                                             WidgetTypes.WIDGET_GENERAL, -1,
                                             -1, CvUtil.FONT_LEFT_JUSTIFY)

    def turnChecker(self, iTurnNum):

        # Check to see if this is a turn when the screen should pop up (every 50 turns)
        if (not CyGame().isNetworkMultiPlayer()
                and CyGame().getActivePlayer() >= 0):
            if (iTurnNum % 50 == 0 and iTurnNum > 0
                    and gc.getPlayer(CyGame().getActivePlayer()).isAlive()):
                self.showScreen()

    #####################################################################################################################################

    def handleInput(self, inputClass):
        self.screen = CyGInterfaceScreen("CvTopCivs", CvScreenEnums.TOP_CIVS)

        if (inputClass.getFunctionName() == "Exit"
                and inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED):
            self.screen.hideScreen()
            return 1
        elif (inputClass.getData() == int(InputTypes.KB_RETURN)):
            self.screen.hideScreen()
            return 1
        return 0

    def update(self, fDelta):
        return