## Sid Meier's Civilization 4
## Copyright Firaxis Games 2005
from CvPythonExtensions import *
import CvUtil
import ScreenInput
import CvScreenEnums
import CvScreensInterface
TEXTURE_SIZE = 24
X_START = 6
#X_INCREMENT = 27 # default BUG 27
X_INCREMENT = 24 # default BUG 27
Y_ROW = 32
CIV_HAS_TECH = 0
CIV_IS_RESEARCHING = 1
CIV_NO_RESEARCH = 2
CIV_TECH_AVAILABLE = 3
# globals
gc = CyGlobalContext()
ArtFileMgr = CyArtFileMgr()
localText = CyTranslator()
# BUG - GP Tech Prefs - start
import TechPrefs
import BugCore
BugOpt = BugCore.game.Advisors
ClockOpt = BugCore.game.NJAGC
import BugUtil
PREF_ICON_SIZE = 24
PREF_ICON_TOP = 168
PREF_ICON_LEFT = 10
FLAVORS = [ TechPrefs.FLAVOR_PRODUCTION, TechPrefs.FLAVOR_GOLD, TechPrefs.FLAVOR_SCIENCE,
TechPrefs.FLAVOR_CULTURE, TechPrefs.FLAVOR_RELIGION, TechPrefs.FLAVOR_MILITARY,
TechPrefs.FLAVOR_ESPIONAGE]
UNIT_CLASSES = [ "UNITCLASS_ENGINEER", "UNITCLASS_MERCHANT", "UNITCLASS_SCIENTIST",
"UNITCLASS_ARTIST", "UNITCLASS_PROPHET", "UNITCLASS_GREAT_GENERAL",
"UNITCLASS_GREAT_SPY"]
# BUG - GP Tech Prefs - end
# BUG - 3.19 No Espionage - start
import GameUtil
# BUG - 3.19 No Espionage - end
# BUG - Mac Support - start
BugUtil.fixSets(globals())
# BUG - Mac Support - end
# Rise of Mankind 2.91 - tech tree colors - start
RoMOpt = BugCore.game.RoMSettings
# Rise of Mankind 2.91 - tech tree colors - end
# BUG - Tech Era Colors - start
def getEraDescription(eWidgetType, iData1, iData2, bOption):
return gc.getEraInfo(iData1).getDescription()
# BUG - Tech Era Colors - end
# BUG - GP Tech Prefs - start
def resetTechPrefs(args=[]):
CvScreensInterface.techChooser.resetTechPrefs()
def getAllTechPrefsHover(widgetType, iData1, iData2, bOption):
return buildTechPrefsHover("TXT_KEY_BUG_TECH_PREFS_ALL", CvScreensInterface.techChooser.pPrefs.getAllFlavorTechs(iData1))
def getCurrentTechPrefsHover(widgetType, iData1, iData2, bOption):
return buildTechPrefsHover("TXT_KEY_BUG_TECH_PREFS_CURRENT", CvScreensInterface.techChooser.pPrefs.getCurrentFlavorTechs(iData1))
def getFutureTechPrefsHover(widgetType, iData1, iData2, bOption):
pPlayer = gc.getPlayer(CvScreensInterface.techChooser.iCivSelected)
sTechs = set()
for i in range(gc.getNumTechInfos()):
if (pPlayer.isResearchingTech(i)):
sTechs.add(CvScreensInterface.techChooser.pPrefs.getTech(i))
return buildTechPrefsHover("TXT_KEY_BUG_TECH_PREFS_FUTURE", CvScreensInterface.techChooser.pPrefs.getCurrentWithFlavorTechs(iData1, sTechs))
def buildTechPrefsHover(key, lTechs):
szText = BugUtil.getPlainText(key) + "\n"
for pTech in lTechs:
szText += "<img=%s size=24></img>" % pTech.getInfo().getButton().replace(" ", "_")
return szText
# BUG - GP Tech Prefs - end
class CvTechChooser:
"Tech Chooser Screen"
def __init__(self):
self.nWidgetCount = 0
self.iCivSelected = 0
self.aiCurrentState = []
# Advanced Start
self.m_iSelectedTech = -1
self.m_bSelectedTechDirty = False
self.m_bTechRecordsDirty = False
# BUG - GP Tech Prefs - start
self.bPrefsShowing = False
self.resetTechPrefs()
# BUG - GP Tech Prefs - end
# Rise of Mankind 2.7 - more techs vertically
# self.PIXEL_INCREMENT = 7 # BUG default 7
self.PIXEL_INCREMENT = 10 # BUG default 7
self.BOX_INCREMENT_WIDTH = 24 # Used to be 33 #Should be a multiple of 3...
# self.BOX_INCREMENT_HEIGHT = 9 #Should be a multiple of 3...
self.BOX_INCREMENT_HEIGHT = 6 #Should be a multiple of 3...
# self.BOX_INCREMENT_Y_SPACING = 6 #Should be a multiple of 3...
self.BOX_INCREMENT_Y_SPACING = 3 #Should be a multiple of 3...
# Rise of Mankind 2.7 - more techs vertically
self.BOX_INCREMENT_X_SPACING = 9 # default 9, Should be a multiple of 3...
def getScreen(self):
return CyGInterfaceScreen( "TechChooser", CvScreenEnums.TECH_CHOOSER )
def hideScreen (self):
# Get the screen
screen = self.getScreen()
# Hide the screen
screen.hideScreen()
# Screen construction function
def interfaceScreen(self):
# BugUtil.debug("CvTechChooser: interfacescreen")
# self.timer = BugUtil.Timer("CvTechChooser")
if ( CyGame().isPitbossHost() ):
return
# Create a new screen, called TechChooser, using the file CvTechChooser.py for input
screen = self.getScreen()
screen.setRenderInterfaceOnly(True)
screen.showScreen(PopupStates.POPUPSTATE_IMMEDIATE, False)
screen.hide("AddTechButton")
screen.hide("ASPointsLabel")
screen.hide("SelectedTechLabel")
# BUG - GP Tech Prefs - start
self.NO_TECH_ART = ArtFileMgr.getInterfaceArtInfo("INTERFACE_BUTTONS_CANCEL").getPath()
# BUG - GP Tech Prefs - end
if ( CyGame().cheatCodesEnabled() or gc.getTeam(gc.getGame().getActiveTeam()).getNumMembers() > 1):
screen.addDropDownBoxGFC( "CivDropDown", 22, 12, 192, WidgetTypes.WIDGET_GENERAL, -1, -1, FontTypes.SMALL_FONT )
screen.setActivation( "CivDropDown", ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
for j in range(gc.getMAX_PLAYERS()):
if (gc.getPlayer(j).isAlive()):
if (CyGame().cheatCodesEnabled() or gc.getPlayer(j).getTeam() == gc.getGame().getActiveTeam()):
screen.addPullDownString( "CivDropDown", gc.getPlayer(j).getName(), j, j, False )
else:
screen.hide( "CivDropDown" )
if ( screen.isPersistent() and self.iCivSelected == gc.getGame().getActivePlayer()):
self.updateTechRecords(False)
return
self.nWidgetCount = 0
self.sWidgets = []
self.iCivSelected = gc.getGame().getActivePlayer()
self.aiCurrentState = []
screen.setPersistent( True )
# Advanced Start
if (gc.getPlayer(self.iCivSelected).getAdvancedStartPoints() >= 0):
self.m_bSelectedTechDirty = True
self.X_ADD_TECH_BUTTON = 10
self.Y_ADD_TECH_BUTTON = 731
self.W_ADD_TECH_BUTTON = 150
self.H_ADD_TECH_BUTTON = 30
self.X_ADVANCED_START_TEXT = self.X_ADD_TECH_BUTTON + self.W_ADD_TECH_BUTTON + 20
szText = localText.getText("TXT_KEY_WB_AS_ADD_TECH", ())
screen.setButtonGFC( "AddTechButton", szText, "", self.X_ADD_TECH_BUTTON, self.Y_ADD_TECH_BUTTON, self.W_ADD_TECH_BUTTON, self.H_ADD_TECH_BUTTON, WidgetTypes.WIDGET_GENERAL, -1, -1, ButtonStyles.BUTTON_STYLE_STANDARD )
screen.hide("AddTechButton")
# BUG - Tech Screen Resolution - start
if (BugOpt.isWideTechScreen() and screen.getXResolution() > 1024):
xPanelWidth = screen.getXResolution() - 60
else:
xPanelWidth = 1024
yPanelHeight = 768
screen.showWindowBackground( False )
screen.setDimensions((screen.getXResolution() - xPanelWidth) / 2, screen.centerY(0), xPanelWidth, yPanelHeight)
# BUG - Tech Screen Resolution - end
screen.addPanel( "TechTopPanel", u"", u"", True, False, 0, 0, xPanelWidth, 55, PanelStyles.PANEL_STYLE_TOPBAR )
screen.addDDSGFC("TechBG", ArtFileMgr.getInterfaceArtInfo("SCREEN_BG_OPAQUE").getPath(), 0, 51, xPanelWidth, yPanelHeight - 96, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.addPanel( "TechBottomPanel", u"", u"", True, False, 0, yPanelHeight - 55, xPanelWidth, 55, PanelStyles.PANEL_STYLE_BOTTOMBAR )
screen.setText( "TechChooserExit", "Background", u"<font=4>" + CyTranslator().getText("TXT_KEY_PEDIA_SCREEN_EXIT", ()).upper() + "</font>", CvUtil.FONT_RIGHT_JUSTIFY, xPanelWidth - 30, yPanelHeight - 42, 0, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_CLOSE_SCREEN, -1, -1 )
screen.setActivation( "TechChooserExit", ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
# Header...
szText = u"<font=4>"
szText = szText + localText.getText("TXT_KEY_TECH_CHOOSER_TITLE", ()).upper()
szText = szText + u"</font>"
screen.setLabel( "TechTitleHeader", "Background", szText, CvUtil.FONT_CENTER_JUSTIFY, xPanelWidth / 2, 8, 0, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
# Make the scrollable area for the city list...
if BugOpt.isShowGPTechPrefs():
iX = 80
iW = xPanelWidth - 80
else:
iX = 0
iW = xPanelWidth
self.TabPanels = ["TechList", "TechTrade"]
screen.addScrollPanel(self.TabPanels[0], u"", iX, 64, iW, yPanelHeight - 142, PanelStyles.PANEL_STYLE_EXTERNAL )
screen.setActivation(self.TabPanels[0], ActivationTypes.ACTIVATE_NORMAL )
screen.addScrollPanel(self.TabPanels[1], u"", 80, 64, xPanelWidth - 80, yPanelHeight - 142, PanelStyles.PANEL_STYLE_EXTERNAL )
screen.setActivation(self.TabPanels[1], ActivationTypes.ACTIVATE_NORMAL )
# BUG - GP Tech Prefs - start
if BugOpt.isShowGPTechPrefs():
screen.addPanel("GPTechPref", u"", u"", True, False, 0, 51, 80, yPanelHeight - 95, PanelStyles.PANEL_STYLE_MAIN_WHITE )
# BUG - GP Tech Prefs - end
# Add the Highlight
#screen.addDDSGFC( "TechHighlight", ArtFileMgr.getInterfaceArtInfo("TECH_HIGHLIGHT").getPath(), 0, 0, self.getXStart() + 6, 12 + ( self.BOX_INCREMENT_HEIGHT * self.PIXEL_INCREMENT ), WidgetTypes.WIDGET_GENERAL, -1, -1 )
#screen.hide( "TechHighlight" )
self.X_SELECT_TAB = 30
self.X_TRADE_TAB = 165
self.Y_TABS = 730
self.sTechSelectTab = self.getNextWidgetName("TechSelectTab")
self.sTechTradeTab = self.getNextWidgetName("TechTradeTab")
self.sTechTabID = self.sTechSelectTab
# reset widget array so that the above never get deleted
self.nWidgetCount = 0
self.sWidgets = []
self.ConstructTabs()
self.ShowTab()
return
def ConstructTabs(self):
# BugUtil.debug("cvTechChooser: ConstructTabs")
screen = self.getScreen()
# Rise of Mankind 2.7
# self.BOX_INCREMENT_WIDTH = 33 # Used to be 33 #Should be a multiple of 3...
self.BOX_INCREMENT_WIDTH = 24 # Used to be 33 #Should be a multiple of 3...
# Rise of Mankind 2.7
self.DrawTechChooser(screen, self.TabPanels[0], True, True, True, True, True, True)
self.BOX_INCREMENT_WIDTH = 12 # Used to be 33 #Should be a multiple of 3... BUG default 12
self.DrawTechChooser(screen, self.TabPanels[1], True, False, True, False, False, True)
# Rise of Mankind 2.7
# self.BOX_INCREMENT_WIDTH = 33 # Used to be 33 #Should be a multiple of 3...
self.BOX_INCREMENT_WIDTH = 24 # Used to be 33 #Should be a multiple of 3...
# Rise of Mankind 2.7
# def DrawTechChooser(self, screen, sPanel, bTechPanel, bTechName, bTechIcon, bTechDetails, bANDPreReq, bORPreReq):
def ShowTab(self):
# BugUtil.debug("cvTechChooser: ShowTab")
screen = self.getScreen()
for tp in self.TabPanels:
screen.hide(tp)
# remove these 2 lines when we return to multi-tab screen and uncomment out the 10 below.
screen.show(self.TabPanels[0])
screen.setFocus(self.TabPanels[0])
# if(self.sTechTabID == self.sTechSelectTab):
# screen.setText(self.sTechSelectTab, "", "Tech Select", CvUtil.FONT_LEFT_JUSTIFY, self.X_SELECT_TAB, self.Y_TABS, 0, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
# screen.setText(self.sTechTradeTab, "", "Tech Trade - under development", CvUtil.FONT_LEFT_JUSTIFY, self.X_TRADE_TAB, self.Y_TABS, 0, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
# screen.show(self.TabPanels[0])
# screen.setFocus(self.TabPanels[0])
# elif(self.sTechTabID == self.sTechTradeTab):
# screen.setText(self.sTechSelectTab, "", "Tech Select", CvUtil.FONT_LEFT_JUSTIFY, self.X_SELECT_TAB, self.Y_TABS, 0, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
# screen.setText(self.sTechTradeTab, "", "Tech Trade - under development", CvUtil.FONT_LEFT_JUSTIFY, self.X_TRADE_TAB, self.Y_TABS, 0, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
# screen.show(self.TabPanels[1])
# screen.setFocus(self.TabPanels[1])
def DrawTechChooser(self, screen, sPanel, bTechPanel, bTechName, bTechIcon, bTechDetails, bANDPreReq, bORPreReq):
# BugUtil.debug("cvTechChooser: DrawTechChooser (%s)", sPanel)
# self.timer.reset()
# self.timer.start()
# Place the tech blocks
self.placeTechs(screen, sPanel, bTechPanel, bTechName, bTechIcon, bTechDetails)
# Draw the arrows
self.drawArrows(screen, sPanel, bANDPreReq, bORPreReq)
self.updateTechPrefs()
screen.moveToFront( "CivDropDown" )
screen.moveToFront( "AddTechButton" )
# self.timer.logSpan("total")
def placeTechs(self, screen, sPanel, bTechPanel, bTechName, bTechIcon, bTechDetails):
# BugUtil.debug("cvTechChooser: placeTechs")
iMaxX = 0
iMaxY = 0
if sPanel == self.TabPanels[0]:
sPanelWidget = ""
else:
sPanelWidget = sPanel
# If we are the Pitboss, we don't want to put up an interface at all
if ( CyGame().isPitbossHost() ):
return
# Cache some tech infos
self.createTechInfoCache()
# Go through all the techs
for i in range(gc.getNumTechInfos()):
#Afforess Skip Mountaineering w/o Mountains Mod
if (not gc.getPlayer(0).canEverResearch(i)) : continue
# Create and place a tech in its proper location
iX = 30 + ( (gc.getTechInfo(i).getGridX() - 1) * ( ( self.BOX_INCREMENT_X_SPACING + self.BOX_INCREMENT_WIDTH ) * self.PIXEL_INCREMENT ) )
# Rise of Mankind 2.7 - more techs vertically
# iY = ( gc.getTechInfo(i).getGridY() - 1 ) * ( self.BOX_INCREMENT_Y_SPACING * self.PIXEL_INCREMENT ) + 5
iY = ( gc.getTechInfo(i).getGridY() - 1 ) * ( self.BOX_INCREMENT_Y_SPACING * self.PIXEL_INCREMENT )
# Rise of Mankind 2.7 - more techs vertically
szTechRecord = sPanelWidget + "TechRecord" + str(i)
if ( iMaxX < iX + self.getXStart() ):
iMaxX = iX + self.getXStart()
if ( iMaxY < iY + ( self.BOX_INCREMENT_HEIGHT * self.PIXEL_INCREMENT ) ):
iMaxY = iY + ( self.BOX_INCREMENT_HEIGHT * self.PIXEL_INCREMENT )
# BUG - Tech Era Colors - start
szTechRecordShadow = sPanelWidget + "TechRecordShadow" + str(i)
iShadowOffset = 9
screen.attachPanelAt( sPanel, szTechRecordShadow, u"", u"", True, False, PanelStyles.PANEL_STYLE_TECH, iX - 6 + iShadowOffset, iY - 6 + iShadowOffset, self.getXStart() + 6, 12 + ( self.BOX_INCREMENT_HEIGHT * self.PIXEL_INCREMENT ), WidgetTypes.WIDGET_TECH_CHOOSER_ERA, gc.getTechInfo(i).getEra(), -1 )
self.setTechPanelShadowColor(screen, szTechRecordShadow, gc.getTechInfo(i).getEra())
screen.hide( szTechRecordShadow )
# BUG - Tech Era Colors - end
screen.attachPanelAt( sPanel, szTechRecord, u"", u"", True, False, PanelStyles.PANEL_STYLE_TECH, iX - 6, iY - 6, self.getXStart() + 6, 12 + ( self.BOX_INCREMENT_HEIGHT * self.PIXEL_INCREMENT ), WidgetTypes.WIDGET_TECH_TREE, i, -1 )
screen.setActivation( szTechRecord, ActivationTypes.ACTIVATE_MIMICPARENTFOCUS)
screen.hide( szTechRecord )
#reset so that it offsets from the tech record's panel
iX = 6
iY = 6
if ( gc.getTeam(gc.getPlayer(self.iCivSelected).getTeam()).isHasTech(i) ):
screen.setPanelColor(szTechRecord, 0, 0, 0)
self.aiCurrentState.append(CIV_HAS_TECH)
elif ( gc.getPlayer(self.iCivSelected).getCurrentResearch() == i ):
screen.setPanelColor(szTechRecord, 0, 0, 200)
self.aiCurrentState.append(CIV_IS_RESEARCHING)
elif ( gc.getPlayer(self.iCivSelected).isResearchingTech(i) ):
screen.setPanelColor(szTechRecord, 200, 0, 0)
self.aiCurrentState.append(CIV_IS_RESEARCHING)
elif ( gc.getPlayer(self.iCivSelected).canEverResearch(i) ):
# Rise of Mankind 2.91 - tech tree colors - start
if (RoMOpt.isRoMTechTreeColors()):
# Ancient Era
if ( gc.getTechInfo(i).getEra() == 0 ):
screen.setPanelColor(szTechRecord, 160, 100, 160)
# Classical Era
elif ( gc.getTechInfo(i).getEra() == 1 ):
screen.setPanelColor(szTechRecord, 160, 100, 100)
# Medieval Era
elif ( gc.getTechInfo(i).getEra() == 2 ):
screen.setPanelColor(szTechRecord, 160, 160, 100)
# Renaissance Era
elif ( gc.getTechInfo(i).getEra() == 3 ):
screen.setPanelColor(szTechRecord, 160, 160, 50)
# Industrial Era
elif ( gc.getTechInfo(i).getEra() == 4 ):
screen.setPanelColor(szTechRecord, 60, 200, 60)
# Modern Era
elif ( gc.getTechInfo(i).getEra() == 5 ):
screen.setPanelColor(szTechRecord, 100, 104, 160)
# Future Era
else:
screen.setPanelColor(szTechRecord, 50, 160, 250)
else:
screen.setPanelColor(szTechRecord, 100, 104, 160)
# Rise of Mankind 2.91 - tech tree colors - end
self.aiCurrentState.append(CIV_NO_RESEARCH)
else:
screen.setPanelColor(szTechRecord, 206, 65, 69)
self.aiCurrentState.append(CIV_TECH_AVAILABLE)
if bTechName:
szTechID = sPanelWidget + "TechID" + str(i)
szTechString = "<font=1>"
if ( gc.getPlayer(self.iCivSelected).isResearchingTech(i) ):
szTechString = szTechString + str(gc.getPlayer(self.iCivSelected).getQueuePosition(i)) + ". "
szTechString += gc.getTechInfo(i).getDescription()
szTechString = szTechString + "</font>"
screen.setTextAt( szTechID, szTechRecord, szTechString, CvUtil.FONT_LEFT_JUSTIFY, iX + 6 + X_INCREMENT, iY + 6, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_TECH_TREE, i, -1 )
screen.setActivation( szTechID, ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
if bTechIcon:
szTechButtonID = sPanelWidget + "TechButtonID" + str(i)
screen.addDDSGFCAt( szTechButtonID, szTechRecord, gc.getTechInfo(i).getButton(), iX + 6, iY + 6, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_TECH_TREE, i, -1, False )
if bTechDetails:
self.addIconsToTechPanel(screen, i, X_START, iX, iY, szTechRecord)
if bTechPanel:
if BugOpt.isShowTechEra():
screen.show( szTechRecordShadow )
else:
screen.hide( szTechRecordShadow )
screen.show( szTechRecord )
else:
screen.hide( szTechRecordShadow )
screen.hide( szTechRecord )
# delete the tech info cache
self.deleteTechInfoCache()
screen.setViewMin( sPanel, iMaxX + 20, iMaxY + 20 )
return
def createTechInfoCache(self):
self.UnitCache = dict()
for j in range( gc.getNumUnitClassInfos() ):
eLoopUnit = gc.getCivilizationInfo(gc.getGame().getActiveCivilizationType()).getCivilizationUnits(j)
if (gc.getGame().canEverTrain(eLoopUnit)):
ePrereq = gc.getUnitInfo(eLoopUnit).getPrereqAndTech()
if (ePrereq != TechTypes.NO_TECH):
if (ePrereq not in self.UnitCache):
self.UnitCache[ePrereq] = list()
self.UnitCache[ePrereq].append(eLoopUnit)
self.BuildingCache = dict()
self.BuildingObsoleteCache = dict()
for j in range(gc.getNumBuildingClassInfos()):
eLoopBuilding = gc.getCivilizationInfo(gc.getGame().getActiveCivilizationType()).getCivilizationBuildings(j)
if (gc.getGame().canEverConstruct(eLoopBuilding)):
ePrereq = gc.getBuildingInfo(eLoopBuilding).getPrereqAndTech()
if (ePrereq != TechTypes.NO_TECH):
if (ePrereq not in self.BuildingCache):
self.BuildingCache[ePrereq] = list()
self.BuildingCache[ePrereq].append(eLoopBuilding)
eObsolete = gc.getBuildingInfo(eLoopBuilding).getObsoleteTech()
if (eObsolete != TechTypes.NO_TECH):
if (eObsolete not in self.BuildingObsoleteCache):
self.BuildingObsoleteCache[eObsolete] = list()
self.BuildingObsoleteCache[eObsolete].append(eLoopBuilding)
def deleteTechInfoCache(self):
del self.UnitCache
del self.BuildingCache
del self.BuildingObsoleteCache
def addIconsToTechPanel(self, screen, i, fX, iX, iY, szTechRecord):
BugUtil.debug("CvTechChooser: addIconsToTechPanel")
j = 0
k = 0
iCount = 0
if (not gc.getPlayer(0).canEverResearch(i)):
return
# Unlockable units...
if (i in self.UnitCache):
for eLoopUnit in self.UnitCache[i]:
szUnitButton = self.getNextWidgetName("Unit")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szUnitButton, szTechRecord, gc.getPlayer(gc.getGame().getActivePlayer()).getUnitButton(eLoopUnit), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_PEDIA_JUMP_TO_UNIT, eLoopUnit, 1, True )
fX += X_INCREMENT
#for j in range( gc.getNumUnitClassInfos() ):
# eLoopUnit = gc.getCivilizationInfo(gc.getGame().getActiveCivilizationType()).getCivilizationUnits(j)
# if (gc.getGame().canEverTrain(eLoopUnit)):
# if (gc.getUnitInfo(eLoopUnit).getPrereqAndTech() == i):
# szUnitButton = self.getNextWidgetName("Unit")
# iCount += 1
# if (iCount < 10):
# screen.addDDSGFCAt( szUnitButton, szTechRecord, gc.getPlayer(gc.getGame().getActivePlayer()).getUnitButton(eLoopUnit), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_PEDIA_JUMP_TO_UNIT, eLoopUnit, 1, True )
# fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 1")
# Unlockable Buildings...
if (i in self.BuildingCache):
for eLoopBuilding in self.BuildingCache[i]:
szBuildingButton = self.getNextWidgetName("Building")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szBuildingButton, szTechRecord, gc.getBuildingInfo(eLoopBuilding).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_PEDIA_JUMP_TO_BUILDING, eLoopBuilding, 1, True )
fX += X_INCREMENT
#for j in range(gc.getNumBuildingClassInfos()):
# bTechFound = 0
# eLoopBuilding = gc.getCivilizationInfo(gc.getGame().getActiveCivilizationType()).getCivilizationBuildings(j)
# if (gc.getGame().canEverConstruct(eLoopBuilding)):
# if (gc.getBuildingInfo(eLoopBuilding).getPrereqAndTech() == i):
# szBuildingButton = self.getNextWidgetName("Building")
# iCount += 1
# if (iCount < 10):
# screen.addDDSGFCAt( szBuildingButton, szTechRecord, gc.getBuildingInfo(eLoopBuilding).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_PEDIA_JUMP_TO_BUILDING, eLoopBuilding, 1, True )
# fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 2")
# Obsolete Buildings...
if (i in self.BuildingObsoleteCache):
for eLoopBuilding in self.BuildingObsoleteCache[i]:
# Add obsolete picture here...
szObsoleteButton = self.getNextWidgetName("Obsolete")
szObsoleteX = self.getNextWidgetName("ObsoleteX")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szObsoleteButton, szTechRecord, gc.getBuildingInfo(eLoopBuilding).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_OBSOLETE, eLoopBuilding, -1, False )
screen.addDDSGFCAt( szObsoleteX, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_BUTTONS_RED_X").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_OBSOLETE, eLoopBuilding, -1, False )
fX += X_INCREMENT
#for j in range(gc.getNumBuildingClassInfos()):
# eLoopBuilding = gc.getCivilizationInfo(gc.getPlayer(self.iCivSelected).getCivilizationType()).getCivilizationBuildings(j)
# if (gc.getGame().canEverConstruct(eLoopBuilding)):
# if (gc.getBuildingInfo(eLoopBuilding).getObsoleteTech() == i):
# Add obsolete picture here...
# szObsoleteButton = self.getNextWidgetName("Obsolete")
# szObsoleteX = self.getNextWidgetName("ObsoleteX")
# iCount += 1
# if (iCount < 10):
# screen.addDDSGFCAt( szObsoleteButton, szTechRecord, gc.getBuildingInfo(eLoopBuilding).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_OBSOLETE, eLoopBuilding, -1, False )
# screen.addDDSGFCAt( szObsoleteX, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_BUTTONS_RED_X").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_OBSOLETE, eLoopBuilding, -1, False )
# fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 3")
# Obsolete Bonuses...
for j in range(gc.getNumBonusInfos()):
if (gc.getBonusInfo(j).getTechObsolete() == i):
# Add obsolete picture here...
szObsoleteButton = self.getNextWidgetName("ObsoleteBonus")
szObsoleteX = self.getNextWidgetName("ObsoleteXBonus")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szObsoleteButton, szTechRecord, gc.getBonusInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_OBSOLETE_BONUS, j, -1, False )
screen.addDDSGFCAt( szObsoleteX, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_BUTTONS_RED_X").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_OBSOLETE_BONUS, j, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 4")
# Obsolete Monastaries...
for j in range (gc.getNumSpecialBuildingInfos()):
if (gc.getSpecialBuildingInfo(j).getObsoleteTech() == i):
# Add obsolete picture here...
szObsoleteSpecialButton = self.getNextWidgetName("ObsoleteSpecial")
szObsoleteSpecialX = self.getNextWidgetName("ObsoleteSpecialX")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szObsoleteSpecialButton, szTechRecord, gc.getSpecialBuildingInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_OBSOLETE_SPECIAL, j, -1, False )
screen.addDDSGFCAt( szObsoleteSpecialX, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_BUTTONS_RED_X").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_OBSOLETE_SPECIAL, j, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 5")
# Route movement change
for j in range(gc.getNumRouteInfos()):
if ( gc.getRouteInfo(j).getTechMovementChange(i) != 0 ):
szMoveButton = self.getNextWidgetName("Move")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szMoveButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_MOVE_BONUS").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_MOVE_BONUS, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 6")
# Promotion Info
for j in range( gc.getNumPromotionInfos() ):
if ( gc.getPromotionInfo(j).getTechPrereq() == i ):
szPromotionButton = self.getNextWidgetName("Promotion")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szPromotionButton, szTechRecord, gc.getPromotionInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_PEDIA_JUMP_TO_PROMOTION, j, -1, False )
fX += X_INCREMENT
elif ( gc.getPromotionInfo(j).getObsoleteTech() == i ):
szPromotionButton = self.getNextWidgetName("Promotion")
szObsoleteX = self.getNextWidgetName("ObsoleteX")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szPromotionButton, szTechRecord, gc.getPromotionInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_OBSOLETE_PROMOTION, j, -1, False )
screen.addDDSGFCAt( szObsoleteX, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_BUTTONS_RED_X").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_OBSOLETE_PROMOTION, j, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 7")
# Free unit
if ( gc.getTechInfo(i).getFirstFreeUnitClass() != UnitClassTypes.NO_UNITCLASS ):
szFreeUnitButton = self.getNextWidgetName("FreeUnit")
eLoopUnit = gc.getCivilizationInfo(gc.getGame().getActiveCivilizationType()).getCivilizationUnits(gc.getTechInfo(i).getFirstFreeUnitClass())
if (eLoopUnit != -1):
# BUG - 3.19 No Espionage - start
# CvUnitInfo.getEspionagePoints() was added in 319
if (GameUtil.getVersion() < 319 or gc.getUnitInfo(eLoopUnit).getEspionagePoints() == 0 or not gc.getGame().isOption(GameOptionTypes.GAMEOPTION_NO_ESPIONAGE)):
# BUG - 3.19 No Espionage - end
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szFreeUnitButton, szTechRecord, gc.getPlayer(gc.getGame().getActivePlayer()).getUnitButton(eLoopUnit), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_FREE_UNIT, eLoopUnit, i, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 8")
# Feature production modifier
if ( gc.getTechInfo(i).getFeatureProductionModifier() != 0 ):
szFeatureProductionButton = self.getNextWidgetName("FeatureProduction")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szFeatureProductionButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_FEATURE_PRODUCTION").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_FEATURE_PRODUCTION, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 9")
# Worker speed
if ( gc.getTechInfo(i).getWorkerSpeedModifier() != 0 ):
szWorkerModifierButton = self.getNextWidgetName("Worker")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szWorkerModifierButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_WORKER_SPEED").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_WORKER_RATE, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 10")
# Trade Routes per City change
if ( gc.getTechInfo(i).getTradeRoutes() != 0 ):
szTradeRouteButton = self.getNextWidgetName("TradeRoutes")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szTradeRouteButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_TRADE_ROUTES").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_TRADE_ROUTES, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 11")
# Health Rate bonus from this tech...
if ( gc.getTechInfo(i).getHealth() != 0 ):
szHealthRateButton = self.getNextWidgetName("HealthRate")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szHealthRateButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_HEALTH").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_HEALTH_RATE, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 12")
# Happiness Rate bonus from this tech...
if ( gc.getTechInfo(i).getHappiness() != 0 ):
szHappinessRateButton = self.getNextWidgetName("HappinessRate")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szHappinessRateButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_HAPPINESS").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_HAPPINESS_RATE, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 13")
# Free Techs
if ( gc.getTechInfo(i).getFirstFreeTechs() > 0 ):
szFreeTechButton = self.getNextWidgetName("FreeTech")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szFreeTechButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_FREETECH").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_FREE_TECH, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 14")
# Line of Sight bonus...
if ( gc.getTechInfo(i).isExtraWaterSeeFrom() ):
szLOSButton = self.getNextWidgetName("LOS")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szLOSButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_LOS").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_LOS_BONUS, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 14")
# Map Center Bonus...
if ( gc.getTechInfo(i).isMapCentering() ):
szMapCenterButton = self.getNextWidgetName("MapCenter")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szMapCenterButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_MAPCENTER").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_MAP_CENTER, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 15")
# Map Reveal...
if ( gc.getTechInfo(i).isMapVisible() ):
szMapRevealButton = self.getNextWidgetName("MapReveal")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szMapRevealButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_MAPREVEAL").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_MAP_REVEAL, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 16")
# Map Trading
if ( gc.getTechInfo(i).isMapTrading() == True ):
szMapTradeButton = self.getNextWidgetName("MapTrade")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szMapTradeButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_MAPTRADING").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_MAP_TRADE, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 17")
# Tech Trading
if ( gc.getTechInfo(i).isTechTrading() ):
szTechTradeButton = self.getNextWidgetName("TechTrade")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szTechTradeButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_TECHTRADING").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_TECH_TRADE, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 18")
# Gold Trading
if ( gc.getTechInfo(i).isGoldTrading() ):
szGoldTradeButton = self.getNextWidgetName("GoldTrade")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szGoldTradeButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_GOLDTRADING").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_GOLD_TRADE, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 19")
# Open Borders
if ( gc.getTechInfo(i).isOpenBordersTrading() ):
szOpenBordersButton = self.getNextWidgetName("OpenBorders")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szOpenBordersButton , szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_OPENBORDERS").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_OPEN_BORDERS, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 20")
# Defensive Pact
if ( gc.getTechInfo(i).isDefensivePactTrading() ):
szDefensivePactButton = self.getNextWidgetName("DefensivePact")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szDefensivePactButton , szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_DEFENSIVEPACT").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_DEFENSIVE_PACT, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 21")
# Permanent Alliance
if ( gc.getTechInfo(i).isPermanentAllianceTrading() ):
szPermanentAllianceButton = self.getNextWidgetName("PermanentAlliance")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szPermanentAllianceButton , szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_PERMALLIANCE").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_PERMANENT_ALLIANCE, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 22")
# Vassal States
if ( gc.getTechInfo(i).isVassalStateTrading() ):
szVassalStateButton = self.getNextWidgetName("VassalState")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szVassalStateButton , szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_VASSAL").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_VASSAL_STATE, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 23")
# Bridge Building
if ( gc.getTechInfo(i).isBridgeBuilding() ):
szBuildBridgeButton = self.getNextWidgetName("BuildBridge")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szBuildBridgeButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_BRIDGEBUILDING").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_BUILD_BRIDGE, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 24")
# Irrigation unlocked...
if ( gc.getTechInfo(i).isIrrigation() ):
szIrrigationButton = self.getNextWidgetName("Irrigation")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szIrrigationButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_IRRIGATION").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_IRRIGATION, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 25")
# Ignore Irrigation unlocked...
if ( gc.getTechInfo(i).isIgnoreIrrigation() ):
szIgnoreIrrigationButton = self.getNextWidgetName("IgnoreIrrigation")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szIgnoreIrrigationButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_NOIRRIGATION").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_IGNORE_IRRIGATION, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 26")
# Coastal Work unlocked...
if ( gc.getTechInfo(i).isWaterWork() ):
szWaterWorkButton = self.getNextWidgetName("WaterWork")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szWaterWorkButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_WATERWORK").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_WATER_WORK, i, -1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 27")
# Improvements
for j in range(gc.getNumBuildInfos()):
bTechFound = False;
if (gc.getBuildInfo(j).getTechPrereq() == -1):
bTechFound = False
for k in range(gc.getNumFeatureInfos()):
if (gc.getBuildInfo(j).getFeatureTech(k) == i):
bTechFound = True
else:
if (gc.getBuildInfo(j).getTechPrereq() == i):
bTechFound = True
if (bTechFound):
iCount += 1
if (iCount < 10):
szImprovementButton = self.getNextWidgetName("Improvement")
screen.addDDSGFCAt( szImprovementButton, szTechRecord, gc.getBuildInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_IMPROVEMENT, i, j, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 28")
# Improvements Can Upgrade
for j in range(gc.getNumImprovementInfos()):
if (gc.getImprovementInfo(j).getPrereqTech() == i):
if (gc.getImprovementInfo(j).getImprovementPillage() != -1):
iCount += 1
if (iCount < 10):
szImprovementButton = self.getNextWidgetName("Improvement")
screen.addDDSGFCAt( szImprovementButton, szTechRecord, gc.getImprovementInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_IMPROVEMENT_CAN_UPGRADE, j, j, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 29")
# Domain Extra Moves
for j in range( DomainTypes.NUM_DOMAIN_TYPES ):
if (gc.getTechInfo(i).getDomainExtraMoves(j) != 0):
iCount += 1
if (iCount < 10):
szDomainExtraMovesButton = self.getNextWidgetName("DomainExtraMoves")
screen.addDDSGFCAt( szDomainExtraMovesButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_WATERMOVES").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_DOMAIN_EXTRA_MOVES, i, j, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 30")
# Adjustments
for j in range( CommerceTypes.NUM_COMMERCE_TYPES ):
if (gc.getTechInfo(i).isCommerceFlexible(j) and not (gc.getTeam(gc.getPlayer(self.iCivSelected).getTeam()).isCommerceFlexible(j))):
szAdjustButton = self.getNextWidgetName("AdjustButton")
if ( j == CommerceTypes.COMMERCE_CULTURE ):
szFileName = ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_CULTURE").getPath()
elif ( j == CommerceTypes.COMMERCE_ESPIONAGE ):
szFileName = ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_ESPIONAGE").getPath()
else:
szFileName = ArtFileMgr.getInterfaceArtInfo("INTERFACE_GENERAL_QUESTIONMARK").getPath()
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szAdjustButton, szTechRecord, szFileName, iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_ADJUST, i, j, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 31")
# Terrain opens up as a trade route
for j in range( gc.getNumTerrainInfos() ):
if (gc.getTechInfo(i).isTerrainTrade(j) and not (gc.getTeam(gc.getPlayer(self.iCivSelected).getTeam()).isTerrainTrade(j))):
iCount += 1
if (iCount < 10):
szTerrainTradeButton = self.getNextWidgetName("TerrainTradeButton")
screen.addDDSGFCAt( szTerrainTradeButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_WATERTRADE").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_TERRAIN_TRADE, i, j, False )
fX += X_INCREMENT
j = gc.getNumTerrainInfos()
if (gc.getTechInfo(i).isRiverTrade() and not (gc.getTeam(gc.getPlayer(self.iCivSelected).getTeam()).isRiverTrade())):
szTerrainTradeButton = self.getNextWidgetName("TerrainTradeButton")
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szTerrainTradeButton, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_TECH_RIVERTRADE").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_TERRAIN_TRADE, i, j, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 32")
# Special buildings like monestaries...
for j in range( gc.getNumSpecialBuildingInfos() ):
if (gc.getSpecialBuildingInfo(j).getTechPrereq() == i):
iCount += 1
if (iCount < 10):
szSpecialBuilding = self.getNextWidgetName("SpecialBuildingButton")
screen.addDDSGFCAt( szSpecialBuilding, szTechRecord, gc.getSpecialBuildingInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_SPECIAL_BUILDING, i, j, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 33")
# Yield change
for j in range( gc.getNumImprovementInfos() ):
bFound = False
for k in range( YieldTypes.NUM_YIELD_TYPES ):
if (gc.getImprovementInfo(j).getTechYieldChanges(i, k)):
if ( bFound == False ):
iCount += 1
if (iCount < 10):
szYieldChange = self.getNextWidgetName("YieldChangeButton")
screen.addDDSGFCAt( szYieldChange, szTechRecord, gc.getImprovementInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_YIELD_CHANGE, i, j, False )
fX += X_INCREMENT
bFound = True
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 34")
# Bonuses revealed
for j in range( gc.getNumBonusInfos() ):
if (gc.getBonusInfo(j).getTechReveal() == i):
iCount += 1
if (iCount < 10):
szBonusReveal = self.getNextWidgetName("BonusRevealButton")
screen.addDDSGFCAt( szBonusReveal, szTechRecord, gc.getBonusInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_BONUS_REVEAL, i, j, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 35")
# Civic options
for j in range( gc.getNumCivicInfos() ):
if (gc.getCivicInfo(j).getTechPrereq() == i):
iCount += 1
if (iCount < 10):
szCivicReveal = self.getNextWidgetName("CivicRevealButton")
screen.addDDSGFCAt( szCivicReveal, szTechRecord, gc.getCivicInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_CIVIC_REVEAL, i, j, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 36")
# Projects possible
for j in range( gc.getNumProjectInfos() ):
if (gc.getProjectInfo(j).getTechPrereq() == i):
iCount += 1
if (iCount < 10):
szProjectInfo = self.getNextWidgetName("ProjectInfoButton")
screen.addDDSGFCAt( szProjectInfo, szTechRecord, gc.getProjectInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_PEDIA_JUMP_TO_PROJECT, j, 1, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 37")
# Processes possible
for j in range( gc.getNumProcessInfos() ):
if (gc.getProcessInfo(j).getTechPrereq() == i):
iCount += 1
if (iCount < 10):
szProcessInfo = self.getNextWidgetName("ProcessInfoButton")
screen.addDDSGFCAt( szProcessInfo, szTechRecord, gc.getProcessInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_PROCESS_INFO, i, j, False )
fX += X_INCREMENT
j = 0
k = 0
BugUtil.debug("CvTechChooser: Marker 38")
# Religions unlocked
for j in range( gc.getNumReligionInfos() ):
if ( gc.getReligionInfo(j).getTechPrereq() == i ):
szFoundReligion = self.getNextWidgetName("FoundReligionButton")
if gc.getGame().isOption(GameOptionTypes.GAMEOPTION_PICK_RELIGION):
szButton = ArtFileMgr.getInterfaceArtInfo("INTERFACE_POPUPBUTTON_RELIGION").getPath()
else:
szButton = gc.getReligionInfo(j).getButton()
iCount += 1
if (iCount < 10):
screen.addDDSGFCAt( szFoundReligion, szTechRecord, szButton, iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_FOUND_RELIGION, i, j, False )
fX += X_INCREMENT
BugUtil.debug("CvTechChooser: Marker 39")
#Corporations Unlocked
for j in range( gc.getNumCorporationInfos() ):
if (gc.getGame().canEverSpread(j) ):
if ( gc.getCorporationInfo(j).getTechPrereq() == i ):
iCount += 1
if (iCount < 10):
szFoundCorporation = self.getNextWidgetName("FoundCorporationButton")
screen.addDDSGFCAt( szFoundCorporation, szTechRecord, gc.getCorporationInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_FOUND_CORPORATION, i, j, False )
fX += X_INCREMENT
elif (gc.getCorporationInfo(j).getObsoleteTech() == i):
iCount += 1
if (iCount < 10):
szCorporation = self.getNextWidgetName("FoundCorporationButton")
szObsoleteX = self.getNextWidgetName("ObsoleteX")
screen.addDDSGFCAt( szCorporation, szTechRecord, gc.getCorporationInfo(j).getButton(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_OBSOLETE_CORPORATION, i, j, False )
screen.addDDSGFCAt( szObsoleteX, szTechRecord, ArtFileMgr.getInterfaceArtInfo("INTERFACE_BUTTONS_RED_X").getPath(), iX + fX, iY + Y_ROW, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_OBSOLETE_CORPORATION, j, -1, False )
# Will update the tech records based on color, researching, researched, queued, etc.
def updateTechRecords (self, bForce):
# BugUtil.debug("cvTechChooser: updateTechRecords")
# If we are the Pitboss, we don't want to put up an interface at all
if ( CyGame().isPitbossHost() ):
return
if (self.sTechTabID == self.sTechSelectTab):
bTechName = True
sPanel = self.TabPanels[0]
# Rise of Mankind 2.7
self.BOX_INCREMENT_WIDTH = 24 # Used to be 33 #Should be a multiple of 3...
# Rise of Mankind 2.7
else:
bTechName = False
sPanel = self.TabPanels[1]
self.BOX_INCREMENT_WIDTH = 12 # Used to be 33 #Should be a multiple of 3...
# Get the screen
screen = self.getScreen()
abChanged = []
bAnyChanged = 0
# Go through all the techs
for i in range(gc.getNumTechInfos()):
abChanged.append(0)
if (not gc.getPlayer(0).canEverResearch(i)): continue
if ( gc.getTeam(gc.getPlayer(self.iCivSelected).getTeam()).isHasTech(i) ):
if ( self.aiCurrentState[i] != CIV_HAS_TECH ):
self.aiCurrentState[i] = CIV_HAS_TECH
abChanged[i] = 1
bAnyChanged = 1
elif ( gc.getPlayer(self.iCivSelected).getCurrentResearch() == i ):
if ( self.aiCurrentState[i] != CIV_IS_RESEARCHING ):
self.aiCurrentState[i] = CIV_IS_RESEARCHING
abChanged[i] = 1
bAnyChanged = 1
elif ( gc.getPlayer(self.iCivSelected).isResearchingTech(i) ):
if ( self.aiCurrentState[i] != CIV_IS_RESEARCHING ):
self.aiCurrentState[i] = CIV_IS_RESEARCHING
abChanged[i] = 1
bAnyChanged = 1
elif ( gc.getPlayer(self.iCivSelected).canEverResearch(i) ):
if ( self.aiCurrentState[i] != CIV_NO_RESEARCH ):
self.aiCurrentState[i] = CIV_NO_RESEARCH
abChanged[i] = 1
bAnyChanged = 1
else:
if ( self.aiCurrentState[i] != CIV_TECH_AVAILABLE ):
self.aiCurrentState[i] = CIV_TECH_AVAILABLE
abChanged[i] = 1
bAnyChanged = 1
for i in range(gc.getNumTechInfos()):
if (abChanged[i] or bForce or (bAnyChanged and gc.getPlayer(self.iCivSelected).isResearchingTech(i))):
# Create and place a tech in its proper location
szTechRecord = "TechRecord" + str(i)
szTechID = "TechID" + str(i)
szTechString = "<font=1>"
if ( gc.getPlayer(self.iCivSelected).isResearchingTech(i) ):
szTechString = szTechString + unicode(gc.getPlayer(self.iCivSelected).getQueuePosition(i)) + ". "
iX = 30 + ( (gc.getTechInfo(i).getGridX() - 1) * ( ( self.BOX_INCREMENT_X_SPACING + self.BOX_INCREMENT_WIDTH ) * self.PIXEL_INCREMENT ) )
# Rise of Mankind 2.7 - more techs vertically
iY = ( gc.getTechInfo(i).getGridY() - 1 ) * ( self.BOX_INCREMENT_Y_SPACING * self.PIXEL_INCREMENT )
# Rise of Mankind 2.7 - more techs vertically
if bTechName:
szTechString += gc.getTechInfo(i).getDescription()
if ( gc.getPlayer(self.iCivSelected).isResearchingTech(i) ):
szTechString += " ("
szTechString += str(gc.getPlayer(self.iCivSelected).getResearchTurnsLeft(i, ( gc.getPlayer(self.iCivSelected).getCurrentResearch() == i )))
szTechString += ")"
szTechString = szTechString + "</font>"
screen.setTextAt( szTechID, sPanel, szTechString, CvUtil.FONT_LEFT_JUSTIFY, iX + 6 + X_INCREMENT, iY + 6, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_TECH_TREE, i, -1 )
screen.setActivation( szTechID, ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
if ( gc.getTeam(gc.getPlayer(self.iCivSelected).getTeam()).isHasTech(i) ):
screen.setPanelColor(szTechRecord, 0, 0, 0)
elif ( gc.getPlayer(self.iCivSelected).getCurrentResearch() == i ):
screen.setPanelColor(szTechRecord, 0, 0, 200)
elif ( gc.getPlayer(self.iCivSelected).isResearchingTech(i) ):
screen.setPanelColor(szTechRecord, 200, 0, 0)
elif ( gc.getPlayer(self.iCivSelected).canEverResearch(i) ):
# Rise of Mankind 2.91 - tech tree colors - start
if (RoMOpt.isRoMTechTreeColors()):
# Ancient Era
if ( gc.getTechInfo(i).getEra() == 0 ):
screen.setPanelColor(szTechRecord, 160, 100, 160)
# Classical Era
elif ( gc.getTechInfo(i).getEra() == 1 ):
screen.setPanelColor(szTechRecord, 160, 100, 100)
# Medieval Era
elif ( gc.getTechInfo(i).getEra() == 2 ):
screen.setPanelColor(szTechRecord, 160, 160, 100)
# Renaissance Era
elif ( gc.getTechInfo(i).getEra() == 3 ):
screen.setPanelColor(szTechRecord, 160, 160, 50)
# Industrial Era
elif ( gc.getTechInfo(i).getEra() == 4 ):
screen.setPanelColor(szTechRecord, 60, 200, 60)
# Modern Era
elif ( gc.getTechInfo(i).getEra() == 5 ):
screen.setPanelColor(szTechRecord, 100, 104, 160)
# Future Era
else:
screen.setPanelColor(szTechRecord, 50, 160, 250)
#screen.setPanelColor(szTechRecord, 0, 160, 160)
else:
screen.setPanelColor(szTechRecord, 100, 104, 160)
# Rise of Mankind 2.91 - tech tree colors - end
else:
screen.setPanelColor(szTechRecord, 206, 65, 69)
# BUG - GP Tech Prefs - start
self.updateTechPrefs()
# BUG - GP Tech Prefs - end
# BUG - Tech Era Colors - start
def setTechPanelShadowColor(self, screen, sPanel, iEra):
szEra = gc.getEraInfo(iEra).getType()
iColor = ClockOpt.getEraColor(szEra)
if iColor != -1:
color = gc.getColorInfo(iColor)
if color:
rgb = color.getColor() # NiColorA object
if rgb:
screen.setPanelColor(sPanel, int(100 * rgb.r), int(100 * rgb.g), int(100 * rgb.b))
# BUG - Tech Era Colors - end
# Will draw the arrows
def drawArrows(self, screen, sPanel, bANDPreReq, bORPreReq):
# BugUtil.debug("cvTechChooser: drawArrows")
iLoop = 0
ARROW_X = ArtFileMgr.getInterfaceArtInfo("ARROW_X").getPath()
ARROW_Y = ArtFileMgr.getInterfaceArtInfo("ARROW_Y").getPath()
ARROW_MXMY = ArtFileMgr.getInterfaceArtInfo("ARROW_MXMY").getPath()
ARROW_XY = ArtFileMgr.getInterfaceArtInfo("ARROW_XY").getPath()
ARROW_MXY = ArtFileMgr.getInterfaceArtInfo("ARROW_MXY").getPath()
ARROW_XMY = ArtFileMgr.getInterfaceArtInfo("ARROW_XMY").getPath()
ARROW_HEAD = ArtFileMgr.getInterfaceArtInfo("ARROW_HEAD").getPath()
for i in range(gc.getNumTechInfos()):
bFirst = 1
fX = (self.BOX_INCREMENT_WIDTH * self.PIXEL_INCREMENT) - 8
if (not gc.getPlayer(0).canEverResearch(i)) : continue
if bANDPreReq:
numTechOverrides = gc.getTechInfo(i).getNumTechArrowOverrides()
for j in range( gc.getNUM_AND_TECH_PREREQS() ):
eTech = gc.getTechInfo(i).getPrereqAndTechs(j)
if (numTechOverrides > 0):
for k in range (numTechOverrides):
fTech = gc.getTechInfo(i).getTechArrowOverride(k)
if ( eTech > -1 and eTech != fTech):
fX = fX - X_INCREMENT
iX = 30 + ( (gc.getTechInfo(i).getGridX() - 1) * ( ( self.BOX_INCREMENT_X_SPACING + self.BOX_INCREMENT_WIDTH ) * self.PIXEL_INCREMENT ) )
# Rise of Mankind 2.7 - more techs vertically
# iY = ( gc.getTechInfo(i).getGridY() - 1 ) * ( self.BOX_INCREMENT_Y_SPACING * self.PIXEL_INCREMENT ) + 5
iY = ( gc.getTechInfo(i).getGridY() - 1 ) * ( self.BOX_INCREMENT_Y_SPACING * self.PIXEL_INCREMENT )
# Rise of Mankind 2.7 - more techs vertically
szTechPrereqID = "TechPrereqID" + str((i * 1000) + j)
screen.addDDSGFCAt( szTechPrereqID, sPanel, gc.getTechInfo(eTech).getButton(), iX + fX, iY + 6, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_TECH_PREPREQ, eTech, -1, False )
#szTechPrereqBorderID = "TechPrereqBorderID" + str((i * 1000) + j)
#screen.addDDSGFCAt( szTechPrereqBorderID, sPanel, ArtFileMgr.getInterfaceArtInfo("TECH_TREE_BUTTON_BORDER").getPath(), iX + fX + 4, iY + 22, 32, 32, WidgetTypes.WIDGET_HELP_TECH_PREPREQ, eTech, -1, False )
else:
if ( eTech > -1):
fX = fX - X_INCREMENT
iX = 30 + ( (gc.getTechInfo(i).getGridX() - 1) * ( ( self.BOX_INCREMENT_X_SPACING + self.BOX_INCREMENT_WIDTH ) * self.PIXEL_INCREMENT ) )
# Rise of Mankind 2.7 - more techs vertically
# iY = ( gc.getTechInfo(i).getGridY() - 1 ) * ( self.BOX_INCREMENT_Y_SPACING * self.PIXEL_INCREMENT ) + 5
iY = ( gc.getTechInfo(i).getGridY() - 1 ) * ( self.BOX_INCREMENT_Y_SPACING * self.PIXEL_INCREMENT )
# Rise of Mankind 2.7 - more techs vertically
szTechPrereqID = "TechPrereqID" + str((i * 1000) + j)
screen.addDDSGFCAt( szTechPrereqID, sPanel, gc.getTechInfo(eTech).getButton(), iX + fX, iY + 6, TEXTURE_SIZE, TEXTURE_SIZE, WidgetTypes.WIDGET_HELP_TECH_PREPREQ, eTech, -1, False )
#szTechPrereqBorderID = "TechPrereqBorderID" + str((i * 1000) + j)
#screen.addDDSGFCAt( szTechPrereqBorderID, sPanel, ArtFileMgr.getInterfaceArtInfo("TECH_TREE_BUTTON_BORDER").getPath(), iX + fX + 4, iY + 22, 32, 32, WidgetTypes.WIDGET_HELP_TECH_PREPREQ, eTech, -1, False )
j = 0
if bORPreReq:
numTechOverrides = gc.getTechInfo(i).getNumTechArrowOverrides()
BugUtil.info("CvTechChooser: Num Tech Overrides for " + gc.getTechInfo(i).getDescription() + " is " + str(numTechOverrides))
for j in range( max(gc.getNUM_OR_TECH_PREREQS(), numTechOverrides) ):
if (numTechOverrides > 0):
if (j >= numTechOverrides):
eTech = -1
else:
eTech = gc.getTechInfo(i).getTechArrowOverride(j)
BugUtil.info("CvTechChooser: Tech Overrides for " + gc.getTechInfo(i).getDescription() + " is " + gc.getTechInfo(eTech).getDescription())
else:
eTech = gc.getTechInfo(i).getPrereqOrTechs(j)
if ( eTech > -1 ):
iX = 24 + ( (gc.getTechInfo(eTech).getGridX() - 1) * ( ( self.BOX_INCREMENT_X_SPACING + self.BOX_INCREMENT_WIDTH ) * self.PIXEL_INCREMENT ) )
iY = ( gc.getTechInfo(eTech).getGridY() - 1 ) * ( self.BOX_INCREMENT_Y_SPACING * self.PIXEL_INCREMENT ) + 5
# j is the pre-req, i is the tech...
xDiff = gc.getTechInfo(i).getGridX() - gc.getTechInfo(eTech).getGridX()
yDiff = gc.getTechInfo(i).getGridY() - gc.getTechInfo(eTech).getGridY()
# Rise of Mankind - more techs vertically
if (yDiff == 0):
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + self.getXStart(), iY + self.getYStart(3) + 1, self.getWidth(xDiff), 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_HEAD, iX + self.getXStart() + self.getWidth(xDiff), iY + self.getYStart(3) + 1, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
elif (yDiff < 0):
if ( yDiff == -6 ):
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + self.getXStart(), iY + self.getYStart(1) + 10, self.getWidth(xDiff) / 2, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_XY, iX + self.getXStart() + ( self.getWidth(xDiff) / 2 ), iY + self.getYStart(1) + 10, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_Y, iX + self.getXStart() + ( self.getWidth(xDiff) / 2 ), iY + self.getYStart(1) + 8 - self.getHeight(yDiff, 0) + 125, 8, self.getHeight(yDiff, 0) - 8 - 115, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_XMY, iX + self.getXStart() + ( self.getWidth(xDiff) / 2 ), iY + self.getYStart(1) - self.getHeight(yDiff, 0) + 125, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + 8 + self.getXStart() + ( self.getWidth(xDiff) / 2 ), iY + self.getYStart(1) - self.getHeight(yDiff, 0) + 125, ( self.getWidth(xDiff) / 2 ) - 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_HEAD, iX + self.getXStart() + self.getWidth(xDiff), iY + self.getYStart(1) - self.getHeight(yDiff, 0) + 125, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
elif ( yDiff == -2 and xDiff == 2 ):
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + self.getXStart(), iY + self.getYStart(2) + 10, self.getWidth(xDiff) * 5 / 6, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_XY, iX + self.getXStart() + ( self.getWidth(xDiff) * 5 / 6 ), iY + self.getYStart(2) + 10, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_Y, iX + self.getXStart() + ( self.getWidth(xDiff) * 5 / 6 ), iY + self.getYStart(2) + 8 - ( self.getHeight(yDiff, 3) / 2 ) + 15, 8, ( self.getHeight(yDiff, 3) / 2 ) - 8 - 5, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_XMY, iX + self.getXStart() + ( self.getWidth(xDiff) * 5 / 6 ), iY + self.getYStart(2) - ( self.getHeight(yDiff, 3) / 2 ) + 15, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + 8 + self.getXStart() + ( self.getWidth(xDiff) * 5 / 6 ), iY + self.getYStart(2) - ( self.getHeight(yDiff, 3) / 2 ) + 15, ( self.getWidth(xDiff) / 6 ) - 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_HEAD, iX + self.getXStart() + self.getWidth(xDiff), iY + self.getYStart(2) - ( self.getHeight(yDiff, 3) / 2 ) + 15, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
else:
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + self.getXStart(), iY + self.getYStart(2) - 5, self.getWidth(xDiff) / 2, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_XY, iX + self.getXStart() + ( self.getWidth(xDiff) / 2 ), iY + self.getYStart(2) - 5, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_Y, iX + self.getXStart() + ( self.getWidth(xDiff) / 2 ), iY + ( self.getYStart(2) / 2 ) + 8 - ( self.getHeight(yDiff, 3) / 2 ) + 10, 8, ( self.getHeight(yDiff, 3) / 2 ) - 8 - 10, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_XMY, iX + self.getXStart() + ( self.getWidth(xDiff) / 2 ), iY + ( self.getYStart(2) / 2 ) - ( self.getHeight(yDiff, 3) / 2 ) + 10, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + 8 + self.getXStart() + ( self.getWidth(xDiff) / 2 ), iY + ( self.getYStart(2) / 2 ) - ( self.getHeight(yDiff, 3) / 2 ) + 10, ( self.getWidth(xDiff) / 2 ) - 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_HEAD, iX + self.getXStart() + self.getWidth(xDiff), iY + ( self.getYStart(2) / 2 ) - ( self.getHeight(yDiff, 3) / 2 ) + 10, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
elif (yDiff > 0):
if ( yDiff == 2 and xDiff == 2):
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + self.getXStart(), iY + self.getYStart(4) * 2 - 15, self.getWidth(xDiff) / 6, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_MXMY, iX + self.getXStart() + ( self.getWidth(xDiff) / 6 ), iY + self.getYStart(4) * 2 - 15, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_Y, iX + self.getXStart() + ( self.getWidth(xDiff) / 6 ), iY + self.getYStart(4) * 2 + 8 - 15, 8, ( self.getHeight(yDiff, 3) / 2 ) - 8 - 30, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_MXY, iX + self.getXStart() + ( self.getWidth(xDiff) / 6 ), iY + self.getYStart(4) / 2 + ( self.getHeight(yDiff, 3) / 2 ), 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + 8 + self.getXStart() + ( self.getWidth(xDiff) / 6 ), iY + self.getYStart(4) / 2 + ( self.getHeight(yDiff, 3) / 2 ), ( self.getWidth(xDiff) * 5 / 6 ) - 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_HEAD, iX + self.getXStart() + self.getWidth(xDiff), iY + self.getYStart(4) / 2 + ( self.getHeight(yDiff, 3) / 2 ), 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
elif ( yDiff == 4 and xDiff == 1):
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + self.getXStart(), iY + self.getYStart(5), self.getWidth(xDiff) / 3, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_MXMY, iX + self.getXStart() + ( self.getWidth(xDiff) / 3 ), iY + self.getYStart(5), 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_Y, iX + self.getXStart() + ( self.getWidth(xDiff) / 3 ), iY + self.getYStart(5) + 8, 8, self.getHeight(yDiff, 0) - 8 - 95, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_MXY, iX + self.getXStart() + ( self.getWidth(xDiff) / 3 ), iY + self.getYStart(5) + self.getHeight(yDiff, 0) - 100, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + 8 + self.getXStart() + ( self.getWidth(xDiff) / 3 ), iY + self.getYStart(5) + self.getHeight(yDiff, 0) - 100, ( self.getWidth(xDiff) * 2 / 3 ) - 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_HEAD, iX + self.getXStart() + self.getWidth(xDiff), iY + self.getYStart(5) + self.getHeight(yDiff, 0) - 100, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
else:
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + self.getXStart(), iY + self.getYStart(4) + 5, self.getWidth(xDiff) / 2, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_MXMY, iX + self.getXStart() + ( self.getWidth(xDiff) / 2 ), iY + self.getYStart(4) + 5, 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_Y, iX + self.getXStart() + ( self.getWidth(xDiff) / 2 ), iY + self.getYStart(4) + 8 + 5, 8, ( self.getHeight(yDiff, 3) / 2 ) - 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_MXY, iX + self.getXStart() + ( self.getWidth(xDiff) / 2 ), iY + self.getYStart(4) + (self.getHeight(yDiff, 3) / 2 ), 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_X, iX + 8 + self.getXStart() + ( self.getWidth(xDiff) / 2 ), iY + self.getYStart(4) + (self.getHeight(yDiff, 3) / 2 ), ( self.getWidth(xDiff) / 2 ) - 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
screen.addDDSGFCAt( self.getNextWidgetName("TechArrow"), sPanel, ARROW_HEAD, iX + self.getXStart() + self.getWidth(xDiff), iY + self.getYStart(4) + (self.getHeight(yDiff, 3) / 2 ), 8, 8, WidgetTypes.WIDGET_GENERAL, -1, -1, False )
# Rise of Mankind 2.7 - more techs vertically
return
# BUG - GP Tech Prefs - start
def resetTechPrefs (self):
self.pPrefs = TechPrefs.TechPrefs()
def updateTechPrefs (self):
# BugUtil.debug("cvTechChooser: updateTechPrefs")
# If we are the Pitboss, we don't want to put up an interface at all
if ( CyGame().isPitbossHost() ):
return
# These don't seem to be setup when screen is first opened
if (gc.getNumTechInfos() <= 0 or gc.getNumFlavorTypes() <= 0):
return
# Get the screen and player
screen = self.getScreen()
pPlayer = gc.getPlayer(self.iCivSelected)
# Don't show tech prefs during advanced start setup
if (pPlayer.getAdvancedStartPoints() >= 0):
return
# Check to see if option is disabled
if (not BugOpt.isShowGPTechPrefs()):
if (self.bPrefsShowing):
# ... and if so, remove icons if they are currently showing
screen.hide( "GreatPersonHeading")
for i, f in enumerate(FLAVORS):
screen.hide( "GreatPerson" + str(f) )
screen.hide( "GreatPersonTech" + str(f) )
screen.hide( "GreatPersonTechNext" + str(f) )
self.bPrefsShowing = False
return
# Always redraw the GP icons because otherwise they are prone to disappearing
# discover icon heading
iIconSize = 48
iX = PREF_ICON_LEFT + 5 * PREF_ICON_SIZE / 4 - iIconSize / 2
iY = PREF_ICON_TOP - iIconSize - 40
screen.addDDSGFC( "GreatPersonHeading", ArtFileMgr.getInterfaceArtInfo("DISCOVER_TECHNOLOGY_BUTTON").getPath(), iX, iY, iIconSize, iIconSize, WidgetTypes.WIDGET_GENERAL, -1, -1 )
for i, f in enumerate(FLAVORS):
# GP icon
iUnitClass = gc.getInfoTypeForString(UNIT_CLASSES[i])
iUnitType = gc.getUnitClassInfo(iUnitClass).getDefaultUnitIndex()
pUnitInfo = gc.getUnitInfo(iUnitType)
iX = PREF_ICON_LEFT
iY = PREF_ICON_TOP + 4 * i * PREF_ICON_SIZE
screen.addDDSGFC( "GreatPerson" + str(f), pUnitInfo.getButton(), iX, iY, PREF_ICON_SIZE, PREF_ICON_SIZE, WidgetTypes.WIDGET_TECH_PREFS_ALL, f, -1 )
self.bPrefsShowing = True
# Remove any techs researched since last call, creating tree if necessary
if (not self.pPrefs):
self.resetTechPrefs()
self.pPrefs.removeKnownTechs()
# Add all techs in research queue to set of soon-to-be-known techs
sTechs = set()
for i in range(gc.getNumTechInfos()):
if (pPlayer.isResearchingTech(i)):
sTechs.add(self.pPrefs.getTech(i))
# Update the buttons to reflect the new tech prefs
for i, f in enumerate(FLAVORS):
# GP button
screen.show( "GreatPerson" + str(f) )
# Current tech GP will pop
szButtonName = "GreatPersonTech" + str(f)
pTech = self.pPrefs.getNextResearchableFlavorTech(f)
iX = PREF_ICON_LEFT + 3 * PREF_ICON_SIZE / 2
iY = PREF_ICON_TOP + 4 * i * PREF_ICON_SIZE
if (pTech):
screen.addDDSGFC( szButtonName, pTech.getInfo().getButton(), iX, iY, PREF_ICON_SIZE, PREF_ICON_SIZE, WidgetTypes.WIDGET_TECH_PREFS_CURRENT, f, -1 )
else:
screen.addDDSGFC( szButtonName, self.NO_TECH_ART, iX, iY, PREF_ICON_SIZE, PREF_ICON_SIZE, WidgetTypes.WIDGET_TECH_PREFS_CURRENT, f, -1 )
screen.show( szButtonName )
# Tech GP will pop once selected techs are researched
szButtonName = "GreatPersonTechNext" + str(f)
pTech = self.pPrefs.getNextResearchableWithFlavorTech(f, sTechs)
iX = PREF_ICON_LEFT + 3 * PREF_ICON_SIZE / 2
iY = PREF_ICON_TOP + 4 * i * PREF_ICON_SIZE + 3 * PREF_ICON_SIZE / 2
if (pTech):
screen.addDDSGFC( szButtonName, pTech.getInfo().getButton(), iX, iY, PREF_ICON_SIZE, PREF_ICON_SIZE, WidgetTypes.WIDGET_TECH_PREFS_FUTURE, f, -1 )
else:
screen.addDDSGFC( szButtonName, self.NO_TECH_ART, iX, iY, PREF_ICON_SIZE, PREF_ICON_SIZE, WidgetTypes.WIDGET_TECH_PREFS_FUTURE, f, -1 )
screen.show( szButtonName )
# BUG - GP Tech Prefs - end
def TechRecord (self, inputClass):
return 0
# Clicked the parent?
def ParentClick (self, inputClass):
return 0
def CivDropDown( self, inputClass ):
if ( inputClass.getNotifyCode() == NotifyCode.NOTIFY_LISTBOX_ITEM_SELECTED ):
screen = self.getScreen()
iIndex = screen.getSelectedPullDownID("CivDropDown")
self.iCivSelected = screen.getPullDownData("CivDropDown", iIndex)
self.updateTechRecords(False)
# Will handle the input for this screen...
def handleInput (self, inputClass):
# BugUtil.debug("cvTechChooser: handleInput")
# BugUtil.debugInput(inputClass)
# Get the screen
screen = self.getScreen()
szWidgetName = inputClass.getFunctionName() + str(inputClass.getID())
# Advanced Start Stuff
pPlayer = gc.getPlayer(self.iCivSelected)
if (pPlayer.getAdvancedStartPoints() >= 0):
# BugUtil.debug("cvTechChooser: handleInput - advancedstart")
# Add tech button
if (inputClass.getFunctionName() == "AddTechButton"):
if (pPlayer.getAdvancedStartTechCost(self.m_iSelectedTech, True) != -1):
CyMessageControl().sendAdvancedStartAction(AdvancedStartActionTypes.ADVANCEDSTARTACTION_TECH, self.iCivSelected, -1, -1, self.m_iSelectedTech, True) #Action, Player, X, Y, Data, bAdd
self.m_bTechRecordsDirty = True
self.m_bSelectedTechDirty = True
# Tech clicked on
elif (inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED):
if (inputClass.getButtonType() == WidgetTypes.WIDGET_TECH_TREE):
self.m_iSelectedTech = inputClass.getData1()
self.updateSelectedTech()
' Calls function mapped in TechChooserInputMap'
# only get from the map if it has the key
if ( inputClass.getNotifyCode() == NotifyCode.NOTIFY_LISTBOX_ITEM_SELECTED ):
# BugUtil.debug("cvTechChooser: handleInput - dropdown")
self.CivDropDown( inputClass )
return 1
if (inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED):
if szWidgetName == self.sTechSelectTab:
self.sTechTabID = self.sTechSelectTab
self.ShowTab()
elif szWidgetName == self.sTechTradeTab:
self.sTechTabID = self.sTechTradeTab
self.ShowTab()
return 0
def getNextWidgetName(self, sName):
# BugUtil.debug("cvTechChooser: getNextWidgetName %i %i", self.nWidgetCount, len(self.sWidgets))
szName = sName + str(self.nWidgetCount)
self.nWidgetCount += 1
self.sWidgets.append(szName)
return szName
def deleteWidgets(self):
# BugUtil.debug("cvTechChooser: deleteWidgets %i %i", self.nWidgetCount, len(self.sWidgets))
screen = self.getScreen()
for w in self.sWidgets:
# BugUtil.debug("cvTechChooser: deleteWidgets '%s'", w)
screen.deleteWidget(w)
self.nWidgetCount = 0
self.sWidgets = []
return
def getXStart(self):
return ( self.BOX_INCREMENT_WIDTH * self.PIXEL_INCREMENT )
def getXSpacing(self):
return ( self.BOX_INCREMENT_X_SPACING * self.PIXEL_INCREMENT )
def getYStart(self, iY):
return int((((self.BOX_INCREMENT_HEIGHT * self.PIXEL_INCREMENT ) / 6.0) * iY) - self.PIXEL_INCREMENT )
def getWidth(self, xDiff):
return ( ( xDiff * self.getXSpacing() ) + ( ( xDiff - 1 ) * self.getXStart() ) )
def getHeight(self, yDiff, nFactor):
return ( ( nFactor + ( ( abs( yDiff ) - 1 ) * 6 ) ) * self.PIXEL_INCREMENT )
def update(self, fDelta):
if (CyInterface().isDirty(InterfaceDirtyBits.Advanced_Start_DIRTY_BIT)):
CyInterface().setDirty(InterfaceDirtyBits.Advanced_Start_DIRTY_BIT, False)
if (self.m_bSelectedTechDirty):
self.m_bSelectedTechDirty = False
self.updateSelectedTech()
if (self.m_bTechRecordsDirty):
self.m_bTechRecordsDirty = False
self.updateTechRecords(True)
if (gc.getPlayer(self.iCivSelected).getAdvancedStartPoints() < 0):
# hide the screen
screen = self.getScreen()
screen.hide("AddTechButton")
screen.hide("ASPointsLabel")
screen.hide("SelectedTechLabel")
return
def updateSelectedTech(self):
pPlayer = gc.getPlayer(CyGame().getActivePlayer())
# Get the screen
screen = self.getScreen()
szName = ""
iCost = 0
if (self.m_iSelectedTech != -1):
szName = gc.getTechInfo(self.m_iSelectedTech).getDescription()
iCost = gc.getPlayer(CyGame().getActivePlayer()).getAdvancedStartTechCost(self.m_iSelectedTech, True)
if iCost > 0:
szText = u"<font=4>" + localText.getText("TXT_KEY_WB_AS_SELECTED_TECH_COST", (iCost, pPlayer.getAdvancedStartPoints())) + u"</font>"
screen.setLabel( "ASPointsLabel", "Background", szText, CvUtil.FONT_LEFT_JUSTIFY, self.X_ADVANCED_START_TEXT, self.Y_ADD_TECH_BUTTON + 3, 0, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
else:
screen.hide("ASPointsLabel")
szText = u"<font=4>"
szText += localText.getText("TXT_KEY_WB_AS_SELECTED_TECH", (szName,))
szText += u"</font>"
screen.setLabel( "SelectedTechLabel", "Background", szText, CvUtil.FONT_LEFT_JUSTIFY, self.X_ADVANCED_START_TEXT + 250, self.Y_ADD_TECH_BUTTON + 3, 0, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
# Want to add
if (pPlayer.getAdvancedStartTechCost(self.m_iSelectedTech, True) != -1):
screen.show("AddTechButton")
else:
screen.hide("AddTechButton")
def onClose(self):
pPlayer = gc.getPlayer(self.iCivSelected)
if (pPlayer.getAdvancedStartPoints() >= 0):
CyInterface().setDirty(InterfaceDirtyBits.Advanced_Start_DIRTY_BIT, True)
return 0
class TechChooserMaps:
TechChooserInputMap = {
'TechRecord' : CvTechChooser().TechRecord,
'TechID' : CvTechChooser().ParentClick,
'TechPane' : CvTechChooser().ParentClick,
'TechButtonID' : CvTechChooser().ParentClick,
'TechButtonBorder' : CvTechChooser().ParentClick,
'Unit' : CvTechChooser().ParentClick,
'Building' : CvTechChooser().ParentClick,
'Obsolete' : CvTechChooser().ParentClick,
'ObsoleteX' : CvTechChooser().ParentClick,
'Move' : CvTechChooser().ParentClick,
'FreeUnit' : CvTechChooser().ParentClick,
'FeatureProduction' : CvTechChooser().ParentClick,
'Worker' : CvTechChooser().ParentClick,
'TradeRoutes' : CvTechChooser().ParentClick,
'HealthRate' : CvTechChooser().ParentClick,
'HappinessRate' : CvTechChooser().ParentClick,
'FreeTech' : CvTechChooser().ParentClick,
'LOS' : CvTechChooser().ParentClick,
'MapCenter' : CvTechChooser().ParentClick,
'MapReveal' : CvTechChooser().ParentClick,
'MapTrade' : CvTechChooser().ParentClick,
'TechTrade' : CvTechChooser().ParentClick,
'OpenBorders' : CvTechChooser().ParentClick,
'BuildBridge' : CvTechChooser().ParentClick,
'Irrigation' : CvTechChooser().ParentClick,
'Improvement' : CvTechChooser().ParentClick,
'DomainExtraMoves' : CvTechChooser().ParentClick,
'AdjustButton' : CvTechChooser().ParentClick,
'TerrainTradeButton' : CvTechChooser().ParentClick,
'SpecialBuildingButton' : CvTechChooser().ParentClick,
'YieldChangeButton' : CvTechChooser().ParentClick,
'BonusRevealButton' : CvTechChooser().ParentClick,
'CivicRevealButton' : CvTechChooser().ParentClick,
'ProjectInfoButton' : CvTechChooser().ParentClick,
'ProcessInfoButton' : CvTechChooser().ParentClick,
'FoundReligionButton' : CvTechChooser().ParentClick,
'CivDropDown' : CvTechChooser().CivDropDown,
}