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

  1. ## Sid Meier's Civilization 4
  2. ## Copyright Firaxis Games 2005
  3. from CvPythonExtensions import *
  4. import CvUtil
  5. import ScreenInput
  6. import CvScreenEnums
  7. import string
  8.  
  9. # globals
  10. gc = CyGlobalContext()
  11. ArtFileMgr = CyArtFileMgr()
  12. localText = CyTranslator()
  13.  
  14. class CvPediaProject:
  15.     "Civilopedia Screen for Projects"
  16.     
  17.     def __init__(self, main):
  18.         self.iProject = -1
  19.         self.top = main
  20.  
  21.         
  22.         self.X_MAIN_PANE = 45
  23.         self.Y_MAIN_PANE = 85
  24.         self.W_MAIN_PANE = 460
  25.         self.H_MAIN_PANE = 210
  26.  
  27.         self.X_ICON = 78
  28.         self.Y_ICON = 120
  29.         self.W_ICON = 150
  30.         self.H_ICON = 150
  31.         self.ICON_SIZE = 64
  32.  
  33.         self.X_STATS_PANE = self.X_ICON + self.W_ICON + 20
  34.         self.Y_STATS_PANE = 165
  35.         self.W_STATS_PANE = 200
  36.         self.H_STATS_PANE = 200
  37.  
  38.         self.X_REQUIRES = self.X_MAIN_PANE + self.W_MAIN_PANE + 20
  39.         self.Y_REQUIRES = 185
  40.         self.W_REQUIRES = 223
  41.         self.H_REQUIRES = 110
  42.  
  43.         self.X_SPECIAL = self.X_MAIN_PANE
  44.         self.Y_SPECIAL = self.Y_MAIN_PANE + self.H_MAIN_PANE + 10
  45.         self.W_SPECIAL = 705
  46.         self.H_SPECIAL = 130
  47.  
  48.         self.X_TEXT = self.X_MAIN_PANE
  49.         self.Y_TEXT = self.Y_SPECIAL + self.H_SPECIAL + 20
  50.         self.W_TEXT = 705
  51.         self.H_TEXT = 220
  52.         
  53.     # Screen construction function
  54.     def interfaceScreen(self, iProject):    
  55.             
  56.         self.iProject = iProject
  57.     
  58.         self.top.deleteAllWidgets()                        
  59.                             
  60.         screen = self.top.getScreen()
  61.         
  62.         bNotActive = (not screen.isActive())
  63.         if bNotActive:
  64.             self.top.setPediaCommonWidgets()
  65.  
  66.         # Header...
  67.         szHeader = u"<font=4b>" + gc.getProjectInfo(self.iProject).getDescription().upper() + u"</font>"
  68.         szHeaderId = self.top.getNextWidgetName()
  69.         screen.setLabel(szHeaderId, "Background", szHeader, CvUtil.FONT_CENTER_JUSTIFY, self.top.X_SCREEN, self.top.Y_TITLE, 0, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
  70.         
  71.         # Top
  72.         screen.setText(self.top.getNextWidgetName(), "Background", self.top.MENU_TEXT, CvUtil.FONT_LEFT_JUSTIFY, self.top.X_MENU, self.top.Y_MENU, 0, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_PEDIA_MAIN, CivilopediaPageTypes.CIVILOPEDIA_PAGE_PROJECT, -1)
  73.  
  74.         if self.top.iLastScreen    != CvScreenEnums.PEDIA_PROJECT or bNotActive:        
  75.             self.placeLinks()
  76.             self.top.iLastScreen = CvScreenEnums.PEDIA_PROJECT
  77.             
  78.         # Icon
  79.         screen.addPanel( self.top.getNextWidgetName(), "", "", False, False,
  80.             self.X_MAIN_PANE, self.Y_MAIN_PANE, self.W_MAIN_PANE, self.H_MAIN_PANE, PanelStyles.PANEL_STYLE_BLUE50)
  81.         screen.addPanel(self.top.getNextWidgetName(), "", "", false, false,
  82.             self.X_ICON, self.Y_ICON, self.W_ICON, self.H_ICON, PanelStyles.PANEL_STYLE_MAIN)
  83.         screen.addDDSGFC(self.top.getNextWidgetName(), gc.getProjectInfo(self.iProject).getButton(),
  84.             self.X_ICON + self.W_ICON/2 - self.ICON_SIZE/2, self.Y_ICON + self.H_ICON/2 - self.ICON_SIZE/2, self.ICON_SIZE, self.ICON_SIZE, WidgetTypes.WIDGET_GENERAL, -1, -1 )
  85. #        screen.addDDSGFC(self.top.getNextWidgetName(), gc.getProjectInfo(self.iProject).getButton(), self.X_ICON, self.Y_ICON, self.W_ICON, self.H_ICON, WidgetTypes.WIDGET_GENERAL, self.iProject, -1 )
  86.         
  87.         self.placeStats()
  88.         self.placeRequires()
  89.         self.placeSpecial()
  90.         self.placeText()
  91.         
  92.         return
  93.             
  94.     # Place happiness/health/commerce/great people modifiers
  95.     def placeStats(self):
  96.  
  97.         screen = self.top.getScreen()
  98.         
  99.         panelName = self.top.getNextWidgetName()
  100.         screen.addListBoxGFC(panelName, "",
  101.             self.X_STATS_PANE, self.Y_STATS_PANE, self.W_STATS_PANE, self.H_STATS_PANE, TableStyles.TABLE_STYLE_EMPTY)
  102.         screen.enableSelect(panelName, False)
  103.         
  104.         projectInfo = gc.getProjectInfo(self.iProject)
  105.     
  106.         if (isWorldProject(self.iProject)):
  107.             iMaxInstances = gc.getProjectInfo(self.iProject).getMaxGlobalInstances()
  108.             szProjectType = localText.getText("TXT_KEY_PEDIA_WORLD_PROJECT", ())
  109.             if (iMaxInstances > 1):
  110.                 szProjectType += " " + localText.getText("TXT_KEY_PEDIA_WONDER_INSTANCES", (iMaxInstances,))
  111.             screen.appendListBoxString(panelName, u"<font=4>" + szProjectType.upper() + u"</font>", WidgetTypes.WIDGET_GENERAL, 0, 0, CvUtil.FONT_LEFT_JUSTIFY)
  112. #            screen.attachTextGFC(panelName, "", szProjectType.upper(), FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
  113.  
  114.         if (isTeamProject(self.iProject)):
  115.             iMaxInstances = gc.getProjectInfo(self.iProject).getMaxTeamInstances()
  116.             szProjectType = localText.getText("TXT_KEY_PEDIA_TEAM_PROJECT", ())
  117.             if (iMaxInstances > 1):
  118.                 szProjectType += " " + localText.getText("TXT_KEY_PEDIA_WONDER_INSTANCES", (iMaxInstances,))
  119.             screen.appendListBoxString(panelName, u"<font=4>" + szProjectType.upper() + u"</font>", WidgetTypes.WIDGET_GENERAL, 0, 0, CvUtil.FONT_LEFT_JUSTIFY)
  120. #            screen.attachTextGFC(panelName, "", szProjectType.upper(), FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
  121.  
  122.         if (projectInfo.getProductionCost() > 0):
  123.             if self.top.iActivePlayer == -1:
  124.                 szCost = localText.getText("TXT_KEY_PEDIA_COST", ((projectInfo.getProductionCost() * gc.getDefineINT("BUILDING_PRODUCTION_PERCENT"))/100,))
  125.             else:
  126.                 szCost = localText.getText("TXT_KEY_PEDIA_COST", (gc.getActivePlayer().getProjectProductionNeeded(self.iProject),))
  127.             screen.appendListBoxString(panelName, u"<font=4>" + szCost.upper() + u"%c" % gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getChar() + u"</font>", WidgetTypes.WIDGET_GENERAL, 0, 0, CvUtil.FONT_LEFT_JUSTIFY)
  128. #            screen.attachTextGFC(panelName, "", szCost.upper() + u"%c" % gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getChar(), FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
  129.             
  130.     # Place prereqs (techs, resources)
  131.     def placeRequires(self):
  132.  
  133.         screen = self.top.getScreen()
  134.         
  135.         panelName = self.top.getNextWidgetName()
  136.         screen.addPanel( panelName, localText.getText("TXT_KEY_PEDIA_REQUIRES", ()), "", false, true,
  137.                  self.X_REQUIRES, self.Y_REQUIRES, self.W_REQUIRES, self.H_REQUIRES, PanelStyles.PANEL_STYLE_BLUE50 )
  138.         screen.enableSelect(panelName, False)
  139.         screen.attachLabel(panelName, "", "  ")
  140.                                     
  141.         # add tech buttons
  142.         iPrereq = gc.getProjectInfo(self.iProject).getTechPrereq()
  143.         if (iPrereq >= 0):
  144.             screen.attachImageButton( panelName, "", gc.getTechInfo(iPrereq).getButton(), GenericButtonSizes.BUTTON_SIZE_CUSTOM, WidgetTypes.WIDGET_PEDIA_JUMP_TO_TECH, iPrereq, 1, False )
  145.         
  146.     # Place Special abilities
  147.     def placeSpecial(self):
  148.         
  149.         screen = self.top.getScreen()
  150.         
  151.         panelName = self.top.getNextWidgetName()
  152.         screen.addPanel( panelName, localText.getText("TXT_KEY_PEDIA_EFFECTS", ()), "", true, false,
  153.                  self.X_SPECIAL, self.Y_SPECIAL, self.W_SPECIAL, self.H_SPECIAL, PanelStyles.PANEL_STYLE_BLUE50 )
  154.         
  155.         listName = self.top.getNextWidgetName()
  156.         screen.attachListBoxGFC( panelName, listName, "", TableStyles.TABLE_STYLE_EMPTY )
  157.         screen.enableSelect(listName, False)
  158.         
  159.         szSpecialText = CyGameTextMgr().getProjectHelp(self.iProject, True, None)
  160.         splitText = string.split( szSpecialText, "\n" )
  161.         for special in splitText:
  162.             if len( special ) != 0:
  163.                 screen.appendListBoxString( listName, special, WidgetTypes.WIDGET_GENERAL, -1, -1, CvUtil.FONT_LEFT_JUSTIFY )
  164.         
  165.     def placeText(self):
  166.         
  167.         screen = self.top.getScreen()
  168.         
  169.         panelName = self.top.getNextWidgetName()
  170.         screen.addPanel( panelName, "", "", true, true,
  171.                  self.X_TEXT, self.Y_TEXT, self.W_TEXT, self.H_TEXT, PanelStyles.PANEL_STYLE_BLUE50 )
  172.  
  173.         szText = gc.getProjectInfo(self.iProject).getCivilopedia()
  174.         screen.attachMultilineText( panelName, "Text", szText, WidgetTypes.WIDGET_GENERAL, -1, -1, CvUtil.FONT_LEFT_JUSTIFY)
  175.     
  176.     def placeLinks(self):
  177.  
  178.         screen = self.top.getScreen()
  179.         
  180.         screen.clearListBoxGFC(self.top.LIST_ID)
  181.  
  182.         listSorted = self.getProjectSortedList()
  183.  
  184.         iSelected = 0
  185.         i = 0
  186.         for iI in range(len(listSorted)):
  187.             if (not gc.getProjectInfo(listSorted[iI][1]).isGraphicalOnly()):
  188.                 screen.appendListBoxString(self.top.LIST_ID, listSorted[iI][0], WidgetTypes.WIDGET_PEDIA_JUMP_TO_PROJECT, listSorted[iI][1], 0, CvUtil.FONT_LEFT_JUSTIFY)
  189.                 if listSorted[iI][1] == self.iProject:
  190.                     iSelected = i
  191.                 i += 1        
  192.  
  193.         screen.setSelectedListBoxStringGFC(self.top.LIST_ID, iSelected)
  194.             
  195.     def getProjectType(self, iProject):
  196.         if (isWorldProject(iProject)):
  197.             return (3)            
  198.  
  199.         if (isTeamProject(iProject)):
  200.             return (2)
  201.  
  202.         # Regular project
  203.         return (1)
  204.  
  205.     def getProjectSortedList(self):
  206.         listOfAllTypes = []
  207.         for iBuildingType in range(4):        
  208.             listBuildings = []
  209.             iCount = 0
  210.             for iBuilding in range(gc.getNumProjectInfos()):
  211.                 if (self.getProjectType(iBuilding) == iBuildingType):
  212.                     listBuildings.append(iBuilding)
  213.                     iCount += 1
  214.             
  215.             listSorted = [(0,0)] * iCount
  216.             iI = 0
  217.             for iBuilding in listBuildings:
  218.                 listSorted[iI] = (gc.getProjectInfo(iBuilding).getDescription(), iBuilding)
  219.                 iI += 1
  220.             listSorted.sort()
  221.             for i in range(len(listSorted)):
  222.                 listOfAllTypes.append(listSorted[i])
  223.         return listOfAllTypes
  224.  
  225.                     
  226.     # Will handle the input for this screen...
  227.     def handleInput (self, inputClass):
  228.         return 0
  229.  
  230.