home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 January / Gamestar_80_2006-01_dvd.iso / Dema / Civilization4 / data1.cab / Civ4DemoComponent / Assets / Python / Screens / CvTopCivs.py < prev    next >
Encoding:
Python Source  |  2005-11-09  |  10.1 KB  |  261 lines

  1. ## Sid Meier's Civilization 4
  2. ## Copyright Firaxis Games 2005
  3. # Author - Jon Shafer
  4. # Top Civilizations screen
  5.  
  6. import PyHelpers
  7. import CvUtil
  8. import CvScreenEnums
  9. import random
  10. from CvPythonExtensions import *
  11.  
  12. PyPlayer = PyHelpers.PyPlayer
  13. gc = CyGlobalContext()
  14. localText = CyTranslator()
  15.  
  16. NUM_CIVILIZATIONS = 8
  17.  
  18. class CvTopCivs:
  19.     "The Greatest Civilizations screen"
  20.     
  21.     def __init__(self):
  22.         return
  23.         
  24.         self.X_SCREEN = 0#205
  25.         self.Y_SCREEN = 0#27
  26.         self.W_SCREEN = 1024#426
  27.         self.H_SCREEN = 768#470
  28.  
  29.         self.X_MAIN_PANEL = 250
  30.         self.Y_MAIN_PANEL = 70
  31.         self.W_MAIN_PANEL = 550
  32.         self.H_MAIN_PANEL = 500
  33.         
  34.         self.iMarginSpace = 15
  35.         
  36.         self.X_HEADER_PANEL = self.X_MAIN_PANEL + self.iMarginSpace
  37.         self.Y_HEADER_PANEL = self.Y_MAIN_PANEL + self.iMarginSpace
  38.         self.W_HEADER_PANEL = self.W_MAIN_PANEL - (self.iMarginSpace * 2)
  39.         self.H_HEADER_PANEL = self.H_MAIN_PANEL - (self.iMarginSpace * 2)
  40.         
  41. #        iWHeaderPanelRemainingAfterLeader = self.W_HEADER_PANEL - self.W_LEADER_ICON + (self.iMarginSpace * 3)
  42. #        iXHeaderPanelRemainingAfterLeader = self.X_LEADER_ICON + self.W_LEADER_ICON + self.iMarginSpace
  43.         self.X_LEADER_TITLE_TEXT = 500#iXHeaderPanelRemainingAfterLeader + (iWHeaderPanelRemainingAfterLeader / 2)
  44.         self.Y_LEADER_TITLE_TEXT = self.Y_HEADER_PANEL + self.iMarginSpace
  45.         self.W_LEADER_TITLE_TEXT = self.W_HEADER_PANEL / 3
  46.         self.H_LEADER_TITLE_TEXT = self.H_HEADER_PANEL / 3
  47.         
  48.         self.X_TEXT_PANEL = self.X_HEADER_PANEL + self.iMarginSpace
  49.         self.Y_TEXT_PANEL = self.Y_HEADER_PANEL + 132
  50.         self.W_TEXT_PANEL = self.W_HEADER_PANEL - (self.iMarginSpace * 2)
  51.         self.H_TEXT_PANEL = 265#self.H_MAIN_PANEL - self.H_HEADER_PANEL - (self.iMarginSpace * 3) + 10 #10 is the fudge factor
  52.         self.iTEXT_PANEL_MARGIN = 35
  53.         
  54.         self.X_RANK_TEXT = 430
  55.         self.Y_RANK_TEXT = 230
  56.         self.W_RANK_TEXT = 300
  57.         self.H_RANK_TEXT = 30
  58.         
  59.         self.X_EXIT = 460
  60.         self.Y_EXIT = self.Y_MAIN_PANEL + 440
  61.         self.W_EXIT = 120
  62.         self.H_EXIT = 30
  63.  
  64.     def showScreen(self):
  65.         return
  66.               
  67.         'Use a popup to display the opening text'
  68.         if ( CyGame().isPitbossHost() ):
  69.             return
  70.  
  71.         # Text
  72.         self.TITLE_TEXT = u"<font=3>" + localText.getText("TXT_KEY_TOPCIVS_TITLE", ()).upper() + u"</font>"
  73.         self.EXIT_TEXT = localText.getText("TXT_KEY_PEDIA_SCREEN_EXIT", ()).upper()
  74.         
  75.         self.HistorianList = [    localText.getText("TXT_KEY_TOPCIVS_HISTORIAN1", ()),
  76.                     localText.getText("TXT_KEY_TOPCIVS_HISTORIAN2", ()),
  77.                     localText.getText("TXT_KEY_TOPCIVS_HISTORIAN3", ()),
  78.                     localText.getText("TXT_KEY_TOPCIVS_HISTORIAN4", ()),
  79.                     localText.getText("TXT_KEY_TOPCIVS_HISTORIAN5", ()),
  80.                     localText.getText("TXT_KEY_TOPCIVS_HISTORIAN6", ()),
  81.                     localText.getText("TXT_KEY_TOPCIVS_HISTORIAN7", ()),
  82.                     localText.getText("TXT_KEY_TOPCIVS_HISTORIAN8", ()),
  83.                     localText.getText("TXT_KEY_TOPCIVS_HISTORIAN9", ()),
  84.                     localText.getText("TXT_KEY_TOPCIVS_HISTORIAN10", ()),
  85.                     localText.getText("TXT_KEY_TOPCIVS_HISTORIAN11", ())
  86.                     ]
  87.                     
  88.         self.RankList =     [    localText.getText("TXT_KEY_TOPCIVS_RANK1", ()),
  89.                     localText.getText("TXT_KEY_TOPCIVS_RANK2", ()),
  90.                     localText.getText("TXT_KEY_TOPCIVS_RANK3", ()),
  91.                     localText.getText("TXT_KEY_TOPCIVS_RANK4", ()),
  92.                     localText.getText("TXT_KEY_TOPCIVS_RANK5", ()),
  93.                     localText.getText("TXT_KEY_TOPCIVS_RANK6", ()),
  94.                     localText.getText("TXT_KEY_TOPCIVS_RANK7", ()),
  95.                     localText.getText("TXT_KEY_TOPCIVS_RANK8", ())
  96.                     ]
  97.  
  98.         self.TypeList =    [    localText.getText("TXT_KEY_TOPCIVS_WEALTH", ()),
  99.                     localText.getText("TXT_KEY_TOPCIVS_POWER", ()),
  100.                     localText.getText("TXT_KEY_TOPCIVS_TECH", ()),
  101.                     localText.getText("TXT_KEY_TOPCIVS_CULTURE", ()),
  102.                     localText.getText("TXT_KEY_TOPCIVS_SIZE", ()),
  103.                     ]
  104.  
  105.         # Randomly choose what category and what historian will be used
  106.         szTypeRand = random.choice(self.TypeList)
  107.         szHistorianRand = random.choice(self.HistorianList)
  108.         
  109.         # Create screen
  110.         
  111.         self.screen = CyGInterfaceScreen( "CvTopCivs", CvScreenEnums.TOP_CIVS )
  112.  
  113.         self.screen.setSound("AS2D_TOP_CIVS")
  114.         self.screen.showScreen(PopupStates.POPUPSTATE_QUEUED, False)
  115.         self.screen.showWindowBackground( False )
  116.         self.screen.setDimensions(self.screen.centerX(self.X_SCREEN), self.screen.centerY(self.Y_SCREEN), self.W_SCREEN, self.H_SCREEN)
  117.         
  118.         # Create panels
  119.         
  120.         # Main
  121.         szMainPanel = "TopCivsMainPanel"
  122.         self.screen.addPanel( szMainPanel, "", "", true, true,
  123.             self.X_MAIN_PANEL, self.Y_MAIN_PANEL, self.W_MAIN_PANEL, self.H_MAIN_PANEL, PanelStyles.PANEL_STYLE_MAIN )
  124.         
  125.         # Top
  126.         szHeaderPanel = "TopCivsHeaderPanel"
  127.         szHeaderText = ""#gc.getLeaderHeadInfo(self.player.getLeaderType()).getDescription() + "\n-" + self.player.getCivilizationDescription(0) + "-"
  128.         self.screen.addPanel( szHeaderPanel, szHeaderText, "", true, true,
  129.             self.X_HEADER_PANEL, self.Y_HEADER_PANEL, self.W_HEADER_PANEL, self.H_HEADER_PANEL, PanelStyles.PANEL_STYLE_DAWNBOTTOM )
  130.         
  131.         # Bottom
  132.         szTextPanel = "TopCivsTextPanel"
  133.         szHeaderText = ""#self.Text_Title
  134.         self.screen.addPanel( szTextPanel, szHeaderText, "", true, true,
  135.             self.X_TEXT_PANEL, self.Y_TEXT_PANEL, self.W_TEXT_PANEL, self.H_TEXT_PANEL, PanelStyles.PANEL_STYLE_DAWNTOP )
  136.         
  137.         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 )
  138.         
  139.         # Title Text
  140.         self.X_TITLE_TEXT = self.X_HEADER_PANEL + (self.W_HEADER_PANEL / 2)
  141.         self.Y_TITLE_TEXT = self.Y_HEADER_PANEL + 15
  142.         self.screen.setLabel("DawnTitle", "Background", self.TITLE_TEXT, CvUtil.FONT_CENTER_JUSTIFY,
  143.                 self.X_TITLE_TEXT, self.Y_TITLE_TEXT, -2.0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
  144.         
  145.         # 1 Text
  146.         self.X_INFO_TEXT = self.X_TITLE_TEXT - 260#self.X_HEADER_PANEL + (self.W_HEADER_PANEL / 2)
  147.         self.Y_INFO_TEXT = self.Y_TITLE_TEXT + 50
  148.         self.W_INFO_TEXT = self.W_HEADER_PANEL
  149.         self.H_INFO_TEXT = 70
  150.         szText = localText.getText("TXT_KEY_TOPCIVS_TEXT1", (szHistorianRand, )) + u"\n" + localText.getText("TXT_KEY_TOPCIVS_TEXT2", (szTypeRand, ))
  151.         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)
  152.         
  153.         self.makeList(szTypeRand)
  154.         
  155.     def makeList(self, szType):
  156.  
  157.         # Determine the list of top civs
  158.         
  159.         # Will eventually Store [iValue, iPlayerID]
  160.         self.aiTopCivsValues = []
  161.         
  162.         # Loop through all players except the barbs
  163.         for iPlayerLoop in range(gc.getMAX_PLAYERS()-1):
  164.                 
  165.             if (gc.getPlayer(iPlayerLoop).isAlive()):
  166.                 
  167.                 if (szType == localText.getText("TXT_KEY_TOPCIVS_WEALTH", ())):
  168.  
  169.                     self.aiTopCivsValues.append([gc.getPlayer(iPlayerLoop).getGold(), iPlayerLoop])
  170.                     print("Player %d Num Gold: %d" %(iPlayerLoop, gc.getPlayer(iPlayerLoop).getGold()))
  171.                     
  172.                 if (szType == localText.getText("TXT_KEY_TOPCIVS_POWER", ())):
  173.  
  174.                     self.aiTopCivsValues.append([gc.getPlayer(iPlayerLoop).getPower(), iPlayerLoop])
  175.  
  176.                 if (szType == localText.getText("TXT_KEY_TOPCIVS_TECH", ())):
  177.  
  178.                     iPlayerNumTechs = 0
  179.                     iNumTotalTechs = gc.getNumTechInfos()
  180.  
  181.                     for iTechLoop in range(iNumTotalTechs):
  182.  
  183.                         bPlayerHasTech = gc.getTeam(gc.getPlayer(iPlayerLoop).getTeam()).isHasTech(iTechLoop)
  184.  
  185.                         if (bPlayerHasTech):
  186.                             iPlayerNumTechs = iPlayerNumTechs + 1
  187.                             
  188.                     self.aiTopCivsValues.append([iPlayerNumTechs, iPlayerLoop])
  189.  
  190.                 if (szType == localText.getText("TXT_KEY_TOPCIVS_CULTURE", ())):
  191.  
  192.                     self.aiTopCivsValues.append([gc.getPlayer(iPlayerLoop).countTotalCulture(), iPlayerLoop])
  193.  
  194.                 if (szType == localText.getText("TXT_KEY_TOPCIVS_SIZE", ())):
  195.  
  196.                     self.aiTopCivsValues.append([gc.getPlayer(iPlayerLoop).getTotalLand(), iPlayerLoop])
  197.  
  198.         # Lowest to Highest
  199.         self.aiTopCivsValues.sort()
  200.         # Switch it around - want the best to be first
  201.         self.aiTopCivsValues.reverse()
  202.  
  203.         self.printList(szType)
  204.         
  205.     def printList(self, szType):
  206.         
  207.         # Print out the list
  208.         for iRankLoop in range(8):
  209.             
  210.             if (iRankLoop > len(self.aiTopCivsValues)-1):
  211.                 return
  212.             
  213.             iPlayer = self.aiTopCivsValues[iRankLoop][1]
  214.             iValue = self.aiTopCivsValues[iRankLoop][0]
  215.             
  216.             szPlayerName = gc.getPlayer(iPlayer).getNameKey()
  217.             
  218.             if (szPlayerName != ""):
  219.                 
  220.                 pActivePlayerTeam = gc.getTeam(gc.getPlayer(CyGame().getActivePlayer()).getTeam())
  221.                 iPlayerTeam = gc.getPlayer(iPlayer).getTeam()
  222.                 szCivText = ""
  223.                 
  224.                 # Does the Active player know this player exists?
  225.                 if (iPlayer == CyGame().getActivePlayer() or pActivePlayerTeam.isHasMet(iPlayerTeam)):
  226.                     szCivText = localText.getText("TXT_KEY_TOPCIVS_TEXT3", (szPlayerName, self.RankList[iRankLoop]))
  227.                     
  228.                 else:
  229.                     szCivText = localText.getText("TXT_KEY_TOPCIVS_UNKNOWN", ())
  230.                     
  231.                 szWidgetName = "Text" + str(iRankLoop)
  232.                 szWidgetDesc = "%d) %s" % (iRankLoop + 1, szCivText)
  233.                 iXLoc = self.X_RANK_TEXT
  234.                 iYLoc = self.Y_RANK_TEXT + (iRankLoop * self.H_RANK_TEXT)
  235.                 #self.screen.setText(szWidgetName, "Background", szWidgetDesc, CvUtil.FONT_LEFT_JUSTIFY, iXLoc, iYLoc, TEXT_Z, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
  236.                 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)
  237.                 
  238.     def turnChecker(self, iTurnNum):
  239.  
  240.         # Check to see if this is a turn when the screen should pop up (every 50 turns)
  241.         if (CyGame().getActivePlayer()>=0):
  242.             print("iTurn: %d" %(iTurnNum))
  243.             if (iTurnNum % 50 == 0 and iTurnNum > 0 and gc.getPlayer(CyGame().getActivePlayer()).isAlive()):
  244.                 self.showScreen()
  245.  
  246.     #####################################################################################################################################
  247.           
  248.     def handleInput( self, inputClass ):
  249.         self.screen = CyInterfaceScreen( "CvTopCivs", CvScreenEnums.TOP_CIVS )        
  250.  
  251.         if ( inputClass.getFunctionName() == "Exit" and inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED ):
  252.             self.screen.hideScreen()
  253.             return 1
  254.         elif ( inputClass.getData() == int(InputTypes.KB_RETURN) ):
  255.             self.screen.hideScreen()
  256.             return 1
  257.         return 0
  258.  
  259.     def update(self, fDelta):
  260.         return
  261.