Code:
## Sid Meier's Civilization 4
## Copyright Firaxis Games 2005
from CvPythonExtensions import *
import CvEventInterface
import CvScreenEnums
import CvUtil
import ScreenInput
import HR
import CivilWar
import Inquisition
import BugDll
import BugCore
import BugOptions
import BugOptionsScreen
import BugPath
import BugUnitPlot
import BugUtil
import AttitudeUtil
import CityUtil
import DiplomacyUtil
import GameUtil
import GGUtil
import PlayerUtil
import ProgressBarUtil
import ReligionUtil
import Scoreboard
import TradeUtil
import UnitUtil
import WidgetUtil
from AStarTools import *
import MonkeyTools as mt
import PLE
import PyHelpers
import ReminderEventManager
import string
import time
# Globals
gc = CyGlobalContext()
localText = CyTranslator()
PyPlayer = PyHelpers.PyPlayer
MainOpt = BugCore.game.MainInterface
CityScreenOpt = BugCore.game.CityScreen
ClockOpt = BugCore.game.NJAGC
ScoreOpt = BugCore.game.Scores
PleOpt = BugCore.game.PLE
GP_BAR_WIDTH = 320
g_NumEmphasizeInfos = 0
g_NumCityTabTypes = 0
g_NumHurryInfos = 0
g_NumUnitClassInfos = 0
g_NumBuildingClassInfos = 0
g_NumProjectInfos = 0
g_NumProcessInfos = 0
g_NumActionInfos = 0
g_eEndTurnButtonState = -1
MAX_SELECTED_TEXT = 5
MAX_DISPLAYABLE_BUILDINGS = 15
MAX_DISPLAYABLE_TRADE_ROUTES = 4
MAX_BONUS_ROWS = 10
MAX_CITIZEN_BUTTONS = 8
SELECTION_BUTTON_COLUMNS = 8
SELECTION_BUTTON_ROWS = 2
NUM_SELECTION_BUTTONS = SELECTION_BUTTON_ROWS * SELECTION_BUTTON_COLUMNS
g_iNumBuildingWidgets = MAX_DISPLAYABLE_BUILDINGS
g_iNumTradeRouteWidgets = MAX_DISPLAYABLE_TRADE_ROUTES
# END OF TURN BUTTON POSITIONS
######################
iEndOfTurnButtonSize = 32
iEndOfTurnPosX = 296 # distance from right
iEndOfTurnPosY = 147 # distance from bottom
# MINIMAP BUTTON POSITIONS
######################
iMinimapButtonsExtent = 228
iMinimapButtonsX = 227
iMinimapButtonsY_Regular = 160
iMinimapButtonsY_Minimal = 32
iMinimapButtonWidth = 24
iMinimapButtonHeight = 24
# Globe button
iGlobeButtonX = 48
iGlobeButtonY_Regular = 168
iGlobeButtonY_Minimal = 40
iGlobeToggleWidth = 48
iGlobeToggleHeight = 48
# GLOBE LAYER OPTION POSITIONING
######################
iGlobeLayerOptionsX = 235
iGlobeLayerOptionsY_Regular = 170 # distance from bottom edge
iGlobeLayerOptionsY_Minimal = 38 # distance from bottom edge
iGlobeLayerOptionsWidth = 400
iGlobeLayerOptionHeight = 24
# STACK BAR
#####################
iStackBarHeight = 27
# MULTI LIST
#####################
iMultiListXL = 318
iMultiListXR = 332
# TOP CENTER TITLE
#####################
iCityCenterRow1X = 398
iCityCenterRow1Y = 78
iCityCenterRow2X = 398
iCityCenterRow2Y = 104
iCityCenterRow1Xa = 347
iCityCenterRow2Xa = 482
g_iNumTradeRoutes = 0
g_iNumBuildings = 0
g_iNumLeftBonus = 0
g_iNumCenterBonus = 0
g_iNumRightBonus = 0
g_szTimeText = ""
# BUG - NJAGC - start
g_bShowTimeTextAlt = False
g_iTimeTextCounter = -1
# BUG - NJAGC - end
# BUG - Raw Yields - start
import RawYields
g_bRawShowing = False
g_bYieldView, g_iYieldType = RawYields.getViewAndType(0)
g_iYieldTiles = RawYields.WORKED_TILES
RAW_YIELD_HELP = ( "TXT_KEY_RAW_YIELD_VIEW_TRADE",
"TXT_KEY_RAW_YIELD_VIEW_FOOD",
"TXT_KEY_RAW_YIELD_VIEW_PRODUCTION",
"TXT_KEY_RAW_YIELD_VIEW_COMMERCE",
"TXT_KEY_RAW_YIELD_TILES_WORKED",
"TXT_KEY_RAW_YIELD_TILES_CITY",
"TXT_KEY_RAW_YIELD_TILES_OWNED",
"TXT_KEY_RAW_YIELD_TILES_ALL")
# BUG - Raw Yields - end
# BUG - field of view slider - start
DEFAULT_FIELD_OF_VIEW = 42
# BUG - field of view slider - end
HELP_TEXT_MINIMUM_WIDTH = 300
g_pSelectedUnit = 0
# BUG - start
g_mainInterface = None
def onSwitchHotSeatPlayer(argsList):
g_mainInterface.resetEndTurnObjects()
# BUG - end
class CvMainInterface:
"Main Interface Screen"
def __init__(self):
global g_mainInterface
g_mainInterface = self
self.DRAW_METHOD_PLE = "DRAW_METHOD_PLE"
self.DRAW_METHOD_VAN = "DRAW_METHOD_VAN"
self.DRAW_METHOD_BUG = "DRAW_METHOD_BUG"
self.DRAW_METHODS = (self.DRAW_METHOD_PLE,
self.DRAW_METHOD_VAN,
self.DRAW_METHOD_BUG)
self.PLE = PLE.PLE()
self.MainInterfaceInputMap = {
self.PLE.PLOT_LIST_BUTTON_NAME : self.PLE.getPlotListButtonName,
self.PLE.PLOT_LIST_MINUS_NAME : self.PLE.getPlotListMinusName,
self.PLE.PLOT_LIST_PLUS_NAME : self.PLE.getPlotListPlusName,
self.PLE.PLOT_LIST_UP_NAME : self.PLE.getPlotListUpName,
self.PLE.PLOT_LIST_DOWN_NAME : self.PLE.getPlotListDownName,
"PleViewModeStyle1" : self.PLE.onClickPLEViewMode,
self.PLE.PLE_VIEW_MODE : self.PLE.onClickPLEViewMode,
self.PLE.PLE_MODE_STANDARD : self.PLE.onClickPLEModeStandard,
self.PLE.PLE_MODE_MULTILINE : self.PLE.onClickPLEModeMultiline,
self.PLE.PLE_MODE_STACK_VERT : self.PLE.onClickPLEModeStackVert,
self.PLE.PLE_MODE_STACK_HORIZ : self.PLE.onClickPLEModeStackHoriz,
self.PLE.PLOT_LIST_PROMO_NAME : self.PLE.unitPromotion,
self.PLE.PLOT_LIST_UPGRADE_NAME : self.PLE.unitUpgrade,
self.PLE.PLE_RESET_FILTERS : self.PLE.onClickPLEResetFilters,
self.PLE.PLE_FILTER_CANMOVE : self.PLE.onClickPLEFilterCanMove,
self.PLE.PLE_FILTER_CANTMOVE : self.PLE.onClickPLEFilterCantMove,
self.PLE.PLE_FILTER_NOTWOUND : self.PLE.onClickPLEFilterNotWound,
self.PLE.PLE_FILTER_WOUND : self.PLE.onClickPLEFilterWound,
self.PLE.PLE_FILTER_LAND : self.PLE.onClickPLEFilterLand,
self.PLE.PLE_FILTER_SEA : self.PLE.onClickPLEFilterSea,
self.PLE.PLE_FILTER_AIR : self.PLE.onClickPLEFilterAir,
self.PLE.PLE_FILTER_MIL : self.PLE.onClickPLEFilterMil,
self.PLE.PLE_FILTER_DOM : self.PLE.onClickPLEFilterDom,
self.PLE.PLE_FILTER_OWN : self.PLE.onClickPLEFilterOwn,
self.PLE.PLE_FILTER_FOREIGN : self.PLE.onClickPLEFilterForeign,
self.PLE.PLE_GRP_UNITTYPE : self.PLE.onClickPLEGrpUnittype,
self.PLE.PLE_GRP_GROUPS : self.PLE.onClickPLEGrpGroups,
self.PLE.PLE_GRP_PROMO : self.PLE.onClickPLEGrpPromo,
self.PLE.PLE_GRP_UPGRADE : self.PLE.onClickPLEGrpUpgrade,
}
# self.iVisibleUnits = 0
self.iMaxPlotListIcons = 0
self.bPLECurrentlyShowing = False
self.bVanCurrentlyShowing = False
self.bBUGCurrentlyShowing = False
self.xResolution = 0
self.yResolution = 0
self.szSliderTextId = "FieldOfViewSliderText"
self.sFieldOfView_Text = ""
self.szSliderId = "FieldOfViewSlider"
self.iField_View_Prev = -1
### Resource Display
self.iBonusClass = -1
### Great People Bars
self.iSpecGPAnchorX = 246 # Offset from X resolution
self.iSpecGPAnchorY = 455 # Offset from Y resolution
### Widgets
WidgetUtil.createWidget("WIDGET_HELP_CIVILWAR")
WidgetUtil.createWidget("WIDGET_HELP_DISSENT_BAR")
WidgetUtil.createWidget("WIDGET_HELP_GREAT_PERSON_BAR")
WidgetUtil.createWidget("WIDGET_HELP_GREAT_PERSON_CITY_BAR")
WidgetUtil.createWidget("WIDGET_FOUND_RELIGION")
WidgetUtil.createWidget("WIDGET_INQUISITION")
WidgetUtil.createWidget("WIDGET_RESOURCE")
############## Basic operational functions ###################
#########################################################################################
#########################################################################################
#########################################################################################
#########################################################################################
def numPlotListButtonsPerRow(self):
return self.m_iNumPlotListButtonsPerRow
# I know that this is redundent, but CyInterface().getPlotListOffset() (and prob the column one too)
# uses this function
# it is also used in "...\EntryPoints\CvScreensInterface.py" too
def numPlotListButtons(self):
return self.numPlotListButtonsPerRow()
def numPlotListRows(self):
return gc.getMAX_PLOT_LIST_ROWS()
def numPlotListButtons_Total(self):
return self.numPlotListButtonsPerRow() * self.numPlotListRows()
def initState (self, screen=None):
"""
Initialize screen instance (self.foo) and global variables.
This function is called before drawing the screen (from interfaceScreen() below)
and anytime the Python modules are reloaded (from CvEventInterface).
THIS FUNCTION MUST NOT ALTER THE SCREEN -- screen.foo()
"""
if screen is None:
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
self.xResolution = screen.getXResolution()
self.yResolution = screen.getYResolution()
# BUG - Raw Yields - begin
global g_bYieldView
global g_iYieldType
g_bYieldView, g_iYieldType = RawYields.getViewAndType(CityScreenOpt.getRawYieldsDefaultView())
# BUG - Raw Yields - end
# BUG - PLE - begin
self.PLE.PLE_CalcConstants(screen)
# BUG - PLE - end
# Set up our global variables...
global g_NumEmphasizeInfos
global g_NumCityTabTypes
global g_NumHurryInfos
global g_NumUnitClassInfos
global g_NumBuildingClassInfos
global g_NumProjectInfos
global g_NumProcessInfos
global g_NumActionInfos
g_NumEmphasizeInfos = gc.getNumEmphasizeInfos()
g_NumCityTabTypes = CityTabTypes.NUM_CITYTAB_TYPES
g_NumHurryInfos = gc.getNumHurryInfos()
g_NumUnitClassInfos = gc.getNumUnitClassInfos()
g_NumBuildingClassInfos = gc.getNumBuildingClassInfos()
g_NumProjectInfos = gc.getNumProjectInfos()
g_NumProcessInfos = gc.getNumProcessInfos()
g_NumActionInfos = gc.getNumActionInfos()
# BUG - field of view slider - start
iBtnY = 27
self.iX_FoVSlider = self.xResolution - 120
self.iY_FoVSlider = iBtnY + 30
self.sFieldOfView_Text = localText.getText("TXT_KEY_BUG_OPT_MAININTERFACE__FIELDOFVIEW_TEXT", ())
if MainOpt.isRememberFieldOfView():
self.iField_View = int(MainOpt.getFieldOfView())
else:
self.iField_View = DEFAULT_FIELD_OF_VIEW
# BUG - field of view slider - end
# BUG - Progress Bar - Tick Marks - start
xCoord = 268 + (self.xResolution - 1024) / 2
self.pBarResearchBar_n = ProgressBarUtil.ProgressBar("ResearchBar-Canvas", xCoord, 2, 487, iStackBarHeight, gc.getInfoTypeForString("COLOR_RESEARCH_RATE"), ProgressBarUtil.TICK_MARKS, True)
self.pBarResearchBar_n.addBarItem("ResearchBar")
self.pBarResearchBar_n.addBarItem("ResearchText")
# BUG - Progress Bar - Tick Marks - end
# BUG - Progress Bar - Tick Marks - start
xCoord = 268 + (self.xResolution - 1440) / 2
xCoord += 6 + 84
self.pBarResearchBar_w = ProgressBarUtil.ProgressBar("ResearchBar-w-Canvas", xCoord, 2, 487, iStackBarHeight, gc.getInfoTypeForString("COLOR_RESEARCH_RATE"), ProgressBarUtil.TICK_MARKS, True)
self.pBarResearchBar_w.addBarItem("ResearchBar-w")
self.pBarResearchBar_w.addBarItem("ResearchText")
# BUG - Progress Bar - Tick Marks - end
# BUG - Progress Bar - Tick Marks - start
self.pBarPopulationBar = ProgressBarUtil.ProgressBar("PopulationBar-Canvas", iCityCenterRow1X, iCityCenterRow1Y-4, self.xResolution - (iCityCenterRow1X*2), iStackBarHeight, gc.getYieldInfo(YieldTypes.YIELD_FOOD).getColorType(), ProgressBarUtil.SOLID_MARKS, True)
self.pBarPopulationBar.addBarItem("PopulationBar")
self.pBarPopulationBar.addBarItem("PopulationText")
self.pBarProductionBar = ProgressBarUtil.ProgressBar("ProductionBar-Canvas", iCityCenterRow2X, iCityCenterRow2Y-4, self.xResolution - (iCityCenterRow2X*2), iStackBarHeight, gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getColorType(), ProgressBarUtil.TICK_MARKS, True)
self.pBarProductionBar.addBarItem("ProductionBar")
self.pBarProductionBar.addBarItem("ProductionText")
self.pBarProductionBar_Whip = ProgressBarUtil.ProgressBar("ProductionBar-Whip-Canvas", iCityCenterRow2X, iCityCenterRow2Y-4, self.xResolution - (iCityCenterRow2X*2), iStackBarHeight, gc.getInfoTypeForString("COLOR_YELLOW"), ProgressBarUtil.CENTER_MARKS, False)
self.pBarProductionBar_Whip.addBarItem("ProductionBar")
self.pBarProductionBar_Whip.addBarItem("ProductionText")
# BUG - Progress Bar - Tick Marks - end
self.m_iNumPlotListButtonsPerRow = (self.xResolution - (iMultiListXL+iMultiListXR) - 68) / 34
# BUG - BUG unit plot draw method - start
# bug unit panel
self.BupPanel = BugUnitPlot.BupPanel(screen, screen.getXResolution(), screen.getYResolution(), iMultiListXL+iMultiListXR, self.numPlotListButtonsPerRow(), self.numPlotListRows())
# BUG - BUG unit plot draw method - end
def interfaceScreen (self):
'Draw all of the screen elements, called once after starting or loading a game'
'THIS FUNCTION MUST NOT CREATE ANY INSTANCE OR GLOBAL VARIABLES'
'It may alter existing ones created in __init__() or initState(), however'
if CyGame().isPitbossHost():
return
# This is the main interface screen, create it as such
screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
self.initState(screen)
screen.setForcedRedraw(True)
screen.setDimensions(0, 0, self.xResolution, self.yResolution)
# to avoid changing all the code below
xResolution = self.xResolution
yResolution = self.yResolution
# Help Text Area
screen.setHelpTextArea( 350, FontTypes.SMALL_FONT, 7, yResolution - 172, -0.1, False, "", True, False, CvUtil.FONT_LEFT_JUSTIFY, HELP_TEXT_MINIMUM_WIDTH )
# Center Left
screen.addPanel( "InterfaceCenterLeftBackgroundWidget", u"", u"", True, False, 0, 0, 258, yResolution-149, PanelStyles.PANEL_STYLE_STANDARD )
screen.setStyle( "InterfaceCenterLeftBackgroundWidget", "Panel_City_Left_Style")
screen.hide("InterfaceCenterLeftBackgroundWidget")
# Top Left
screen.addPanel( "InterfaceTopLeftBackgroundWidget", u"", u"", True, False, 258, 0, xResolution - 516, yResolution-149, PanelStyles.PANEL_STYLE_STANDARD )
screen.setStyle( "InterfaceTopLeftBackgroundWidget", "Panel_City_Top_Style")
screen.hide("InterfaceTopLeftBackgroundWidget")
# Center Right
screen.addPanel( "InterfaceCenterRightBackgroundWidget", u"", u"", True, False, xResolution - 258, 0, 258, yResolution-149, PanelStyles.PANEL_STYLE_STANDARD )
screen.setStyle( "InterfaceCenterRightBackgroundWidget", "Panel_City_Right_Style")
screen.hide("InterfaceCenterRightBackgroundWidget")
screen.addPanel( "CityScreenAdjustPanel", u"", u"", True, False, 10, 44, 238, 105, PanelStyles.PANEL_STYLE_STANDARD )
screen.setStyle( "CityScreenAdjustPanel", "Panel_City_Info_Style")
screen.hide("CityScreenAdjustPanel")
screen.addPanel( "TopCityPanelLeft", u"", u"", True, False, 260, 70, xResolution/2-260, 60, PanelStyles.PANEL_STYLE_STANDARD )
screen.setStyle( "TopCityPanelLeft", "Panel_City_TanTL_Style")
screen.hide("TopCityPanelLeft")
screen.addPanel( "TopCityPanelRight", u"", u"", True, False, xResolution/2, 70, xResolution/2-260, 60, PanelStyles.PANEL_STYLE_STANDARD )
screen.setStyle( "TopCityPanelRight", "Panel_City_TanTR_Style")
screen.hide("TopCityPanelRight")
# Top Bar
# SF CHANGE
screen.addPanel( "CityScreenTopWidget", u"", u"", True, False, 0, -2, xResolution, 41, PanelStyles.PANEL_STYLE_STANDARD )
screen.setStyle( "CityScreenTopWidget", "Panel_TopBar_Style")
screen.hide("CityScreenTopWidget")
# Top Center Title
screen.addPanel( "CityNameBackground", u"", u"", True, False, 260, 31, xResolution - (260 * 2), 38, PanelStyles.PANEL_STYLE_STANDARD )
screen.setStyle( "CityNameBackground", "Panel_City_Title_Style")
screen.hide("CityNameBackground")
# Left Background Widget
screen.addDDSGFC( "InterfaceLeftBackgroundWidget", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BOTTOM_LEFT").getPath(), 0, yResolution - 164, 304, 164, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.hide("InterfaceLeftBackgroundWidget")
# Center Background Widget
screen.addPanel( "InterfaceCenterBackgroundWidget", u"", u"", True, False, 296, yResolution - 133, xResolution - (296*2), 133, PanelStyles.PANEL_STYLE_STANDARD)
screen.setStyle( "InterfaceCenterBackgroundWidget", "Panel_Game_HudBC_Style")
screen.hide("InterfaceCenterBackgroundWidget")
# Left Background Widget
screen.addPanel( "InterfaceLeftBackgroundWidget", u"", u"", True, False, 0, yResolution - 168, 304, 168, PanelStyles.PANEL_STYLE_STANDARD)
screen.setStyle( "InterfaceLeftBackgroundWidget", "Panel_Game_HudBL_Style")
screen.hide("InterfaceLeftBackgroundWidget")
# Right Background Widget
screen.addPanel( "InterfaceRightBackgroundWidget", u"", u"", True, False, xResolution - 304, yResolution - 168, 304, 168, PanelStyles.PANEL_STYLE_STANDARD)
screen.setStyle( "InterfaceRightBackgroundWidget", "Panel_Game_HudBR_Style")
screen.hide("InterfaceRightBackgroundWidget")
# Top Center Background
# SF CHANGE
screen.addPanel( "InterfaceTopCenter", u"", u"", True, False, 257, -2, xResolution-(257*2), 48, PanelStyles.PANEL_STYLE_STANDARD)
screen.setStyle( "InterfaceTopCenter", "Panel_Game_HudTC_Style")
screen.hide("InterfaceTopCenter")
# Top Left Background
screen.addPanel( "InterfaceTopLeft", u"", u"", True, False, 0, -2, 267, 60, PanelStyles.PANEL_STYLE_STANDARD)
screen.setStyle( "InterfaceTopLeft", "Panel_Game_HudTL_Style")
screen.hide("InterfaceTopLeft")
# Top Right Background
screen.addPanel( "InterfaceTopRight", u"", u"", True, False, xResolution - 267, -2, 267, 60, PanelStyles.PANEL_STYLE_STANDARD)
screen.setStyle( "InterfaceTopRight", "Panel_Game_HudTR_Style")
screen.hide("InterfaceTopRight")
iBtnWidth = 28
iBtnAdvance = 25
iBtnY = 27
iBtnX = 27
iBtnX = 10 # moving the log button left = BUG Option Button
# Event Log Button
screen.setImageButton("TurnLogButton", "", iBtnX, iBtnY - 2, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_TURN_LOG).getActionInfoIndex(), -1)
screen.setStyle( "TurnLogButton", "Button_HUDLog_Style")
screen.hide("TurnLogButton")
# BUG Option Button
iBtnX += iBtnAdvance
sBUGOptionsScreenButton = CyArtFileMgr().getInterfaceArtInfo("BUG_OPTIONS_SCREEN_BUTTON").getPath()
screen.setImageButton("BUGOptionsScreenWidget", sBUGOptionsScreenButton, iBtnX, iBtnY - 2, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_BUG_OPTION_SCREEN, -1, -1)
screen.hide("BUGOptionsScreenWidget")
# Civil War Tracker Button
iBtnX += iBtnAdvance
screen.setImageButton("CivilWarButton", "Art/BUG/National_Off.dds", iBtnX, iBtnY - 2, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_HELP_CIVILWAR, 7474, -1)
screen.hide("CivilWarButton")
# Advisor Buttons
iBtnX = xResolution - 277
screen.setImageButton( "DomesticAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_DOMESTIC_SCREEN).getActionInfoIndex(), -1 )
screen.setStyle( "DomesticAdvisorButton", "Button_HUDAdvisorDomestic_Style")
screen.hide("DomesticAdvisorButton")
iBtnX += iBtnAdvance
screen.setImageButton( "FinanceAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_FINANCIAL_SCREEN).getActionInfoIndex(), -1 )
screen.setStyle( "FinanceAdvisorButton", "Button_HUDAdvisorFinance_Style")
screen.hide("FinanceAdvisorButton")
iBtnX += iBtnAdvance
screen.setImageButton( "CivicsAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_CIVICS_SCREEN).getActionInfoIndex(), -1 )
screen.setStyle( "CivicsAdvisorButton", "Button_HUDAdvisorCivics_Style")
screen.hide("CivicsAdvisorButton")
iBtnX += iBtnAdvance
screen.setImageButton( "ForeignAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_FOREIGN_SCREEN).getActionInfoIndex(), -1 )
screen.setStyle( "ForeignAdvisorButton", "Button_HUDAdvisorForeign_Style")
screen.hide("ForeignAdvisorButton")
iBtnX += iBtnAdvance
screen.setImageButton( "MilitaryAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_MILITARY_SCREEN).getActionInfoIndex(), -1 )
screen.setStyle( "MilitaryAdvisorButton", "Button_HUDAdvisorMilitary_Style")
screen.hide("MilitaryAdvisorButton")
iBtnX += iBtnAdvance
screen.setImageButton( "TechAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_TECH_CHOOSER).getActionInfoIndex(), -1 )
screen.setStyle( "TechAdvisorButton", "Button_HUDAdvisorTechnology_Style")
screen.hide("TechAdvisorButton")
iBtnX += iBtnAdvance
screen.setImageButton( "ReligiousAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_RELIGION_SCREEN).getActionInfoIndex(), -1 )
screen.setStyle( "ReligiousAdvisorButton", "Button_HUDAdvisorReligious_Style")
screen.hide("ReligiousAdvisorButton")
iBtnX += iBtnAdvance
screen.setImageButton( "CorporationAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_CORPORATION_SCREEN).getActionInfoIndex(), -1 )
screen.setStyle( "CorporationAdvisorButton", "Button_HUDAdvisorCorporation_Style")
screen.hide("CorporationAdvisorButton")
iBtnX += iBtnAdvance
screen.setImageButton( "VictoryAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_VICTORY_SCREEN).getActionInfoIndex(), -1 )
screen.setStyle( "VictoryAdvisorButton", "Button_HUDAdvisorVictory_Style")
screen.hide("VictoryAdvisorButton")
iBtnX += iBtnAdvance
screen.setImageButton( "InfoAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_INFO).getActionInfoIndex(), -1 )
screen.setStyle( "InfoAdvisorButton", "Button_HUDAdvisorRecord_Style")
screen.hide("InfoAdvisorButton")
# BUG - 3.17 No Espionage - start
if GameUtil.isEspionage():
iBtnX += iBtnAdvance
screen.setImageButton( "EspionageAdvisorButton", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_ESPIONAGE_SCREEN).getActionInfoIndex(), -1 )
screen.setStyle( "EspionageAdvisorButton", "Button_HUDAdvisorEspionage_Style")
screen.hide("EspionageAdvisorButton")
# BUG - 3.17 No Espionage - end
# Field of View slider
self.setFieldofView_Text(screen)
iW = 100
iH = 15
screen.addSlider(self.szSliderId, self.iX_FoVSlider + 5, self.iY_FoVSlider, iW, iH, self.iField_View - 1, 0, 100 - 1, WidgetTypes.WIDGET_GENERAL, -1, -1, False);
screen.hide(self.szSliderTextId)
screen.hide(self.szSliderId)
# City Tabs
iBtnX = xResolution - 324
iBtnY = yResolution - 94
iBtnWidth = 24
iBtnAdvance = 24
screen.setButtonGFC( "CityTab0", "", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_CITY_TAB, 0, -1, ButtonStyles.BUTTON_STYLE_STANDARD )
screen.setStyle( "CityTab0", "Button_HUDJumpUnit_Style")
screen.hide("CityTab0")
iBtnY += iBtnAdvance
screen.setButtonGFC( "CityTab1", "", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_CITY_TAB, 1, -1, ButtonStyles.BUTTON_STYLE_STANDARD )
screen.setStyle( "CityTab1", "Button_HUDJumpBuilding_Style")
screen.hide("CityTab1")
iBtnY += iBtnAdvance
screen.setButtonGFC( "CityTab2", "", "", iBtnX, iBtnY, iBtnWidth, iBtnWidth, WidgetTypes.WIDGET_CITY_TAB, 2, -1, ButtonStyles.BUTTON_STYLE_STANDARD )
screen.setStyle( "CityTab2", "Button_HUDJumpWonder_Style")
screen.hide("CityTab2")
# Minimap initialization
screen.setMainInterface(True)
screen.addPanel( "MiniMapPanel", u"", u"", True, False, xResolution - 214, yResolution - 151, 208, 151, PanelStyles.PANEL_STYLE_STANDARD )
screen.setStyle( "MiniMapPanel", "Panel_Game_HudMap_Style")
screen.hide("MiniMapPanel")
screen.initMinimap( xResolution - 210, xResolution - 9, yResolution - 131, yResolution - 9, -0.1 )
gc.getMap().updateMinimapColor()
self.createMinimapButtons()
# Help button (always visible)
screen.setImageButton( "InterfaceHelpButton", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_GENERAL_CIVILOPEDIA_ICON").getPath(), xResolution - 28, 2, 24, 24, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_CIVILOPEDIA).getActionInfoIndex(), -1 )
screen.hide("InterfaceHelpButton")
screen.setImageButton( "MainMenuButton", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_GENERAL_MENU_ICON").getPath(), xResolution - 54, 2, 24, 24, WidgetTypes.WIDGET_MENU_ICON, -1, -1 )
screen.hide("MainMenuButton")
# Globeview buttons
self.createGlobeviewButtons( )
screen.addMultiListControlGFC( "BottomButtonContainer", u"", iMultiListXL, yResolution - 113, xResolution - (iMultiListXL+iMultiListXR), 100, 4, 48, 48, TableStyles.TABLE_STYLE_STANDARD )
screen.hide("BottomButtonContainer")
# *********************************************************************************
# PLOT LIST BUTTONS
# *********************************************************************************
# BUG - PLE - begin
for j in xrange(self.numPlotListRows()):
yRow = (j - self.numPlotListRows() + 1) * 34
yPixel = yResolution - 169 + yRow - 3
xPixel = 315 - 3
xWidth = self.numPlotListButtonsPerRow() * 34 + 3
yHeight = 32 + 3
szStringPanel = "PlotListPanel" + str(j)
screen.addPanel(szStringPanel, u"", u"", True, False, xPixel, yPixel, xWidth, yHeight, PanelStyles.PANEL_STYLE_EMPTY)
for i in xrange(self.numPlotListButtonsPerRow()):
k = j * self.numPlotListButtonsPerRow() + i
xOffset = i * 34
szString = "PlotListButton" + str(k)
# BUG - plot list - start
szFileNamePromo = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_PROMOTION_FRAME").getPath()
szStringPromoFrame = szString + "PromoFrame"
screen.addDDSGFCAt( szStringPromoFrame , szStringPanel, szFileNamePromo, xOffset + 2, 2, 32, 32, WidgetTypes.WIDGET_PLOT_LIST, k, -1, False )
screen.hide( szStringPromoFrame )
# BUG - plot list - end
screen.addCheckBoxGFCAt(szStringPanel, szString, CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTONS_GOVERNOR").getPath(), CyArtFileMgr().getInterfaceArtInfo("BUTTON_HILITE_SQUARE").getPath(), xOffset + 3, 3, 32, 32, WidgetTypes.WIDGET_PLOT_LIST, k, -1, ButtonStyles.BUTTON_STYLE_LABEL, True )
screen.hide( szString )
szStringHealth = szString + "Health"
screen.addStackedBarGFCAt( szStringHealth, szStringPanel, xOffset + 3, 26, 32, 11, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_GENERAL, k, -1 )
screen.hide( szStringHealth )
szStringIcon = szString + "Icon"
szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_MOVE").getPath()
screen.addDDSGFCAt( szStringIcon, szStringPanel, szFileName, xOffset, 0, 12, 12, WidgetTypes.WIDGET_PLOT_LIST, k, -1, False )
screen.hide( szStringIcon )
self.PLE.preparePlotListObjects(screen)
# BUG - PLE - end
# End Turn Text
screen.setLabel( "EndTurnText", "Background", u"", CvUtil.FONT_CENTER_JUSTIFY, 0, yResolution - 188, -0.1, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.setHitTest( "EndTurnText", HitTestTypes.HITTEST_NOHIT )
# Three states for end turn button...
screen.setImageButton( "EndTurnButton", "", xResolution - (iEndOfTurnButtonSize/2) - iEndOfTurnPosX, yResolution - (iEndOfTurnButtonSize/2) - iEndOfTurnPosY, iEndOfTurnButtonSize, iEndOfTurnButtonSize, WidgetTypes.WIDGET_END_TURN, -1, -1 )
screen.setStyle( "EndTurnButton", "Button_HUDEndTurn_Style")
screen.setEndTurnState( "EndTurnButton", "Red")
screen.hide("EndTurnButton")
# *********************************************************************************
# RESEARCH BUTTONS
# *********************************************************************************
i = 0
for i in xrange(gc.getNumTechInfos()):
szName = "ResearchButton" + str(i)
screen.setImageButton(szName, gc.getTechInfo(i).getButton(), 0, 0, 32, 32, WidgetTypes.WIDGET_RESEARCH, i, -1)
screen.hide(szName)
i = 0
for i in xrange(gc.getNumReligionInfos()):
szName = "ReligionButton" + str(i)
if gc.getGame().isOption(GameOptionTypes.GAMEOPTION_PICK_RELIGION):
szButton = gc.getReligionInfo(i).getGenericTechButton()
else:
szButton = gc.getReligionInfo(i).getTechButton()
screen.setImageButton( szName, szButton, 0, 0, 32, 32, WidgetTypes.WIDGET_RESEARCH, gc.getReligionInfo(i).getTechPrereq(), -1 )
screen.hide( szName )
# *********************************************************************************
# SPECIALIST BUTTONS
# *********************************************************************************
### Specialists Header
xHeader = xResolution - self.iSpecGPAnchorX
yHeader = yResolution - self.iSpecGPAnchorY
wHeader = xResolution - xHeader - 10
screen.addPanel("SpecialistBackground", u"", u"", True, False, xHeader, yHeader, wHeader, 30, PanelStyles.PANEL_STYLE_STANDARD)
screen.setStyle("SpecialistBackground", "Panel_City_Header_Style")
screen.hide("SpecialistBackground")
screen.setLabel("SpecialistLabel", "Background", localText.getText("TXT_KEY_CONCEPT_SPECIALISTS", ()), CvUtil.FONT_CENTER_JUSTIFY, xHeader + (wHeader / 2), yHeader + 8, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.hide("SpecialistLabel")
### Increase Specialist Buttons
i = 0
iCount = 0
for i in xrange(gc.getNumSpecialistInfos()):
if (gc.getSpecialistInfo(i).isVisible()):
szName = "IncreaseSpecialist" + str(i)
screen.setButtonGFC(szName, u"", "", xResolution - 46, (yResolution - 270 - (26 * iCount)), 20, 20, WidgetTypes.WIDGET_CHANGE_SPECIALIST, i, 1, ButtonStyles.BUTTON_STYLE_CITY_PLUS)
screen.hide(szName)
iCount += 1
### Decrease Specialist Buttons
i = 0
iCount = 0
for i in xrange(gc.getNumSpecialistInfos()):
if (gc.getSpecialistInfo(i).isVisible()):
szName = "DecreaseSpecialist" + str(i)
screen.setButtonGFC(szName, u"", "", xResolution - 24, (yResolution - 270 - (26 * iCount)), 20, 20, WidgetTypes.WIDGET_CHANGE_SPECIALIST, i, -1, ButtonStyles.BUTTON_STYLE_CITY_MINUS)
screen.hide(szName)
iCount += 1
### Specialist Buttons
i = 0
iCount = 0
for i in xrange(gc.getNumSpecialistInfos()):
if (gc.getSpecialistInfo(i).isVisible()):
szName = "CitizenDisabledButton" + str(i)
screen.setImageButton(szName, gc.getSpecialistInfo(i).getTexture(), xResolution - 74, (yResolution - 272 - (26 * i)), 24, 24, WidgetTypes.WIDGET_DISABLED_CITIZEN, i, -1)
screen.enable(szName, False)
screen.hide(szName)
for j in xrange(MAX_CITIZEN_BUTTONS):
szName = "SpecialistButton" + str((i * 100) + j)
screen.addCheckBoxGFC(szName, gc.getSpecialistInfo(i).getTexture(), "", xResolution - 74 - (26 * j), (yResolution - 272 - (26 * i)), 24, 24, WidgetTypes.WIDGET_CITIZEN, i, j, ButtonStyles.BUTTON_STYLE_LABEL)
screen.hide(szName)
# **********************************************************
# GAME DATA STRINGS
# **********************************************************
szGameDataList = []
xCoord = 268 + (xResolution - 1024) / 2
screen.addStackedBarGFC( "ResearchBar", xCoord, 2, 487, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_RESEARCH, -1, -1 )
screen.setStackedBarColors( "ResearchBar", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_RESEARCH_STORED") )
screen.setStackedBarColors( "ResearchBar", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_RESEARCH_RATE") )
screen.setStackedBarColors( "ResearchBar", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.setStackedBarColors( "ResearchBar", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.hide("ResearchBar")
# BUG - Great General Bar - start
screen.addStackedBarGFC( "GreatGeneralBar", xCoord, 27, 100, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_GREAT_GENERAL, -1, -1 )
screen.setStackedBarColors( "GreatGeneralBar", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_NEGATIVE_RATE") ) #gc.getInfoTypeForString("COLOR_GREAT_PEOPLE_STORED") )
screen.setStackedBarColors( "GreatGeneralBar", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.setStackedBarColors( "GreatGeneralBar", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.setStackedBarColors( "GreatGeneralBar", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.hide("GreatGeneralBar")
# BUG - Great General Bar - end
# BUG - Great Person Bar - start
xCoord += 7 + 100
screen.addStackedBarGFC( "GreatPersonBar", xCoord, 27, 380, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_GREAT_PERSON_BAR, -1, -1 )
screen.setStackedBarColors( "GreatPersonBar", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_GREAT_PEOPLE_STORED") )
screen.setStackedBarColors( "GreatPersonBar", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_GREAT_PEOPLE_RATE") )
screen.setStackedBarColors( "GreatPersonBar", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.setStackedBarColors( "GreatPersonBar", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.hide("GreatPersonBar")
# BUG - Great Person Bar - end
# BUG - Bars on single line for higher resolution screens - start
xCoord = 268 + (xResolution - 1440) / 2
screen.addStackedBarGFC( "GreatGeneralBar-w", xCoord, 2, 84, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_GREAT_GENERAL, -1, -1 )
screen.setStackedBarColors( "GreatGeneralBar-w", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_NEGATIVE_RATE") ) #gc.getInfoTypeForString("COLOR_GREAT_PEOPLE_STORED") )
screen.setStackedBarColors( "GreatGeneralBar-w", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.setStackedBarColors( "GreatGeneralBar-w", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.setStackedBarColors( "GreatGeneralBar-w", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.hide("GreatGeneralBar-w")
xCoord += 6 + 84
screen.addStackedBarGFC( "ResearchBar-w", xCoord, 2, 487, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_RESEARCH, -1, -1 )
screen.setStackedBarColors( "ResearchBar-w", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_RESEARCH_STORED") )
screen.setStackedBarColors( "ResearchBar-w", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_RESEARCH_RATE") )
screen.setStackedBarColors( "ResearchBar-w", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.setStackedBarColors( "ResearchBar-w", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.hide("ResearchBar-w")
xCoord += 6 + 487
screen.addStackedBarGFC( "GreatPersonBar-w", xCoord, 2, 320, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_GREAT_PERSON_BAR, -1, -1 )
screen.setStackedBarColors( "GreatPersonBar-w", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_GREAT_PEOPLE_STORED") )
screen.setStackedBarColors( "GreatPersonBar-w", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_GREAT_PEOPLE_RATE") )
screen.setStackedBarColors( "GreatPersonBar-w", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.setStackedBarColors( "GreatPersonBar-w", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.hide("GreatPersonBar-w")
# BUG - Bars on single line for higher resolution screens - end
# *********************************************************************************
# SELECTION DATA BUTTONS/STRINGS
# *********************************************************************************
szHideSelectionDataList = []
### City Screen - Population Bar
screen.addStackedBarGFC( "PopulationBar", iCityCenterRow1X, iCityCenterRow1Y-4, xResolution - (iCityCenterRow1X * 2), iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_POPULATION, -1, -1 )
screen.setStackedBarColors( "PopulationBar", InfoBarTypes.INFOBAR_STORED, gc.getYieldInfo(YieldTypes.YIELD_FOOD).getColorType() )
screen.setStackedBarColorsAlpha( "PopulationBar", InfoBarTypes.INFOBAR_RATE, gc.getYieldInfo(YieldTypes.YIELD_FOOD).getColorType(), 0.8 )
screen.setStackedBarColors( "PopulationBar", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_NEGATIVE_RATE") )
screen.setStackedBarColors( "PopulationBar", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.hide("PopulationBar")
### City Screen - Production Bar
screen.addStackedBarGFC("ProductionBar", iCityCenterRow2X, iCityCenterRow2Y-4, xResolution - (iCityCenterRow2X * 2), iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_PRODUCTION, -1, -1)
screen.setStackedBarColors("ProductionBar", InfoBarTypes.INFOBAR_STORED, gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getColorType())
screen.setStackedBarColorsAlpha("ProductionBar", InfoBarTypes.INFOBAR_RATE, gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getColorType(), 0.8)
screen.setStackedBarColors("ProductionBar", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getYieldInfo(YieldTypes.YIELD_FOOD).getColorType())
screen.setStackedBarColors("ProductionBar", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY") )
screen.hide("ProductionBar")
### City Screen - Culture Bar
screen.addStackedBarGFC("CultureBar", 6, yResolution - 240, 240, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_CULTURE, -1, -1)
screen.setStackedBarColors("CultureBar", InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_CULTURE_STORED"))
screen.setStackedBarColors("CultureBar", InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString("COLOR_CULTURE_RATE"))
screen.setStackedBarColors("CultureBar", InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString("COLOR_EMPTY"))
screen.setStackedBarColors("CultureBar", InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString("COLOR_EMPTY"))
screen.hide("CultureBar")
### City Screen - Nationality Bar
screen.addStackedBarGFC("NationalityBar", 6, yResolution - 214, 240, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_NATIONALITY, -1, -1)
screen.hide("NationalityBar")
### City Screen - Dissent Bar
screen.addStackedBarGFC("DissentBar", 6, yResolution - 188, 240, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_DISSENT_BAR, -1, -1)
screen.hide("DissentBar")
### City Arrows
screen.setButtonGFC("CityScrollMinus", u"", "", 274, 32, 32, 32, WidgetTypes.WIDGET_CITY_SCROLL, -1, -1, ButtonStyles.BUTTON_STYLE_ARROW_LEFT)
screen.hide("CityScrollMinus")
screen.setButtonGFC("CityScrollPlus", u"", "", 288, 32, 32, 32, WidgetTypes.WIDGET_CITY_SCROLL, 1, -1, ButtonStyles.BUTTON_STYLE_ARROW_RIGHT)
screen.hide("CityScrollPlus")
screen.setButtonGFC("MainCityScrollMinus", u"", "", xResolution - 275, yResolution - 165, 32, 32, WidgetTypes.WIDGET_CITY_SCROLL, -1, -1, ButtonStyles.BUTTON_STYLE_ARROW_LEFT)
screen.hide("MainCityScrollMinus")
screen.setButtonGFC("MainCityScrollPlus", u"", "", xResolution - 255, yResolution - 165, 32, 32, WidgetTypes.WIDGET_CITY_SCROLL, 1, -1, ButtonStyles.BUTTON_STYLE_ARROW_RIGHT)
screen.hide("MainCityScrollPlus")
# BUG - PLE - begin
screen.setButtonGFC( "PlotListMinus", u"", "", 315 + ( xResolution - (iMultiListXL+iMultiListXR) - 68 ), yResolution - 171, 32, 32, WidgetTypes.WIDGET_PLOT_LIST_SHIFT, -1, -1, ButtonStyles.BUTTON_STYLE_ARROW_LEFT )
screen.hide("PlotListMinus")
screen.setButtonGFC( "PlotListPlus", u"", "", 298 + ( xResolution - (iMultiListXL+iMultiListXR) - 34 ), yResolution - 171, 32, 32, WidgetTypes.WIDGET_PLOT_LIST_SHIFT, 1, -1, ButtonStyles.BUTTON_STYLE_ARROW_RIGHT )
screen.hide("PlotListPlus")
screen.setButtonGFC( self.PLE.PLOT_LIST_MINUS_NAME, u"", "", 315 + ( xResolution - (iMultiListXL+iMultiListXR) - 68 ), yResolution - 171, 32, 32, WidgetTypes.WIDGET_GENERAL, -1, -1, ButtonStyles.BUTTON_STYLE_ARROW_LEFT )
screen.hide( self.PLE.PLOT_LIST_MINUS_NAME )
screen.setButtonGFC( self.PLE.PLOT_LIST_PLUS_NAME, u"", "", 298 + ( xResolution - (iMultiListXL+iMultiListXR) - 34 ), yResolution - 171, 32, 32, WidgetTypes.WIDGET_GENERAL, 1, -1, ButtonStyles.BUTTON_STYLE_ARROW_RIGHT )
screen.hide( self.PLE.PLOT_LIST_PLUS_NAME )
screen.setImageButton( self.PLE.PLOT_LIST_UP_NAME, CyArtFileMgr().getInterfaceArtInfo("PLE_ARROW_UP").getPath(), 315 + ( xResolution - (iMultiListXL+iMultiListXR) - 68 ) + 5, yResolution - 171 + 5, 20, 20, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.hide( self.PLE.PLOT_LIST_UP_NAME )
screen.setImageButton( self.PLE.PLOT_LIST_DOWN_NAME, CyArtFileMgr().getInterfaceArtInfo("PLE_ARROW_DOWN").getPath(), 298 + ( xResolution - (iMultiListXL+iMultiListXR) - 34 ) + 5, yResolution - 171 + 5, 20, 20, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.hide( self.PLE.PLOT_LIST_DOWN_NAME )
# BUG - PLE - end
screen.addPanel("TradeRouteListBackground", u"", u"", True, False, 10, 157, 238, 30, PanelStyles.PANEL_STYLE_STANDARD)
screen.setStyle("TradeRouteListBackground", "Panel_City_Header_Style")
screen.hide("TradeRouteListBackground")
screen.setLabel("TradeRouteListLabel", "Background", localText.getText("TXT_KEY_HEADING_TRADEROUTE_LIST", ()), CvUtil.FONT_CENTER_JUSTIFY, 129, 165, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
screen.hide("TradeRouteListLabel")
# BUG - Raw Yields - start
nX = 10 + 24
nY = 157 + 5
nSize = 24
nDist = 24
nGap = 10
szHighlightButton = CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_HIGHLIGHT").getPath()
# Trade
screen.addCheckBoxGFC( "RawYieldsTrade0", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_TRADE").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 0, -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.hide("RawYieldsTrade0")
# Yields
nX += nDist + nGap
screen.addCheckBoxGFC( "RawYieldsFood1", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_FOOD").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 1, -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.hide("RawYieldsFood1")
nX += nDist
screen.addCheckBoxGFC( "RawYieldsProduction2", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_PRODUCTION").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 2, -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.hide("RawYieldsProduction2")
nX += nDist
screen.addCheckBoxGFC( "RawYieldsCommerce3", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_COMMERCE").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 3, -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.hide("RawYieldsCommerce3")
# Tile Selection
nX += nDist + nGap
screen.addCheckBoxGFC( "RawYieldsWorkedTiles4", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_WORKED_TILES").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 4, -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.hide("RawYieldsWorkedTiles4")
nX += nDist
screen.addCheckBoxGFC( "RawYieldsCityTiles5", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_CITY_TILES").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 5, -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.hide("RawYieldsCityTiles5")
nX += nDist
screen.addCheckBoxGFC( "RawYieldsOwnedTiles6", CyArtFileMgr().getInterfaceArtInfo("RAW_YIELDS_OWNED_TILES").getPath(), szHighlightButton, nX, nY, nSize, nSize, WidgetTypes.WIDGET_GENERAL, 6, -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.hide("RawYieldsOwnedTiles6")
# BUG - Raw Yields - end
screen.addPanel( "BuildingListBackground", u"", u"", True, False, 10, 287, 238, 30, PanelStyles.PANEL_STYLE_STANDARD )
screen.setStyle( "BuildingListBackground", "Panel_City_Header_Style")
screen.hide("BuildingListBackground")
screen.setLabel( "BuildingListLabel", "Background", localText.getText("TXT_KEY_CONCEPT_BUILDINGS", ()), CvUtil.FONT_CENTER_JUSTIFY, 129, 295, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.hide("BuildingListLabel")
# *********************************************************************************
# UNIT INFO ELEMENTS
# *********************************************************************************
i = 0
for i in xrange(gc.getNumPromotionInfos()):
szName = "PromotionButton" + str(i)
screen.addDDSGFC( szName, gc.getPromotionInfo(i).getButton(), 180, yResolution - 18, 24, 24, WidgetTypes.WIDGET_ACTION, gc.getPromotionInfo(i).getActionInfoIndex(), -1 )
screen.hide( szName )
# BUG - PLE - begin
szName = self.PLE.PLE_PROMO_BUTTONS_UNITINFO + str(i)
screen.addDDSGFC( szName, gc.getPromotionInfo(i).getButton(), \
180, yResolution - 18, \
self.PLE.CFG_INFOPANE_BUTTON_SIZE, self.PLE.CFG_INFOPANE_BUTTON_SIZE, \
WidgetTypes.WIDGET_ACTION, gc.getPromotionInfo(i).getActionInfoIndex(), -1 )
screen.hide( szName )
# BUG - PLE - end
# *********************************************************************************
# SCORES
# *********************************************************************************
screen.addPanel( "ScoreBackground", u"", u"", True, False, 0, 0, 0, 0, PanelStyles.PANEL_STYLE_HUD_HELP )
screen.hide("ScoreBackground")
for i in xrange( gc.getMAX_PLAYERS() ):
szName = "ScoreText" + str(i)
screen.setText( szName, "Background", u"", CvUtil.FONT_RIGHT_JUSTIFY, 996, 622, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_CONTACT_CIV, i, -1 )
screen.hide( szName )
# This should be a forced redraw screen
screen.setForcedRedraw( True )
# This should show the screen immidiately and pass input to the game
screen.showScreen(PopupStates.POPUPSTATE_IMMEDIATE, True)
szHideList = []
szHideList.append( "CreateGroup")
szHideList.append( "DeleteGroup")
# City Tabs
for i in xrange( g_NumCityTabTypes ):
szButtonID = "CityTab" + str(i)
szHideList.append( szButtonID )
for i in xrange( g_NumHurryInfos ):
szButtonID = "Hurry" + str(i)
szHideList.append( szButtonID )
szHideList.append( "Hurry0")
szHideList.append( "Hurry1")
screen.registerHideList( szHideList, len(szHideList), 0 )
return 0
# Will update the screen (every 250 MS)
def updateScreen(self):
global g_szTimeText
global g_iTimeTextCounter
# BugUtil.debug("update - Turn %d, Player %d, Interface %d, End Turn Button %d ===",
# gc.getGame().getGameTurn(), gc.getGame().getActivePlayer(), CyInterface().getShowInterface(), CyInterface().getEndTurnState())
# BUG - Options - start
BugOptions.write()
# BUG - Options - end
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
# Find out our resolution
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
# self.m_iNumPlotListButtons = (xResolution - (iMultiListXL+iMultiListXR) - 68) / 34
# This should recreate the minimap on load games and returns if already exists -JW
screen.initMinimap( xResolution - 210, xResolution - 9, yResolution - 131, yResolution - 9, -0.1 )
messageControl = CyMessageControl()
bShow = False
# Hide all interface widgets
#screen.hide("EndTurnText")
if ( CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY ):
if (gc.getGame().isPaused()):
# Pause overrides other messages
acOutput = localText.getText("SYSTEM_GAME_PAUSED", (gc.getPlayer(gc.getGame().getPausePlayer()).getNameKey(), ))
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
elif (messageControl.GetFirstBadConnection() != -1):
# Waiting on a bad connection to resolve
if (messageControl.GetConnState(messageControl.GetFirstBadConnection()) == 1):
if (gc.getGame().isMPOption(MultiplayerOptionTypes.MPOPTION_ANONYMOUS)):
acOutput = localText.getText("SYSTEM_WAITING_FOR_PLAYER", (gc.getPlayer(messageControl.GetFirstBadConnection()).getNameKey(), 0))
else:
acOutput = localText.getText("SYSTEM_WAITING_FOR_PLAYER", (gc.getPlayer(messageControl.GetFirstBadConnection()).getNameKey(), (messageControl.GetFirstBadConnection() + 1)))
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
elif (messageControl.GetConnState(messageControl.GetFirstBadConnection()) == 2):
if (gc.getGame().isMPOption(MultiplayerOptionTypes.MPOPTION_ANONYMOUS)):
acOutput = localText.getText("SYSTEM_PLAYER_JOINING", (gc.getPlayer(messageControl.GetFirstBadConnection()).getNameKey(), 0))
else:
acOutput = localText.getText("SYSTEM_PLAYER_JOINING", (gc.getPlayer(messageControl.GetFirstBadConnection()).getNameKey(), (messageControl.GetFirstBadConnection() + 1)))
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
else:
# Flash select messages if no popups are present
if ( CyInterface().shouldDisplayReturn() ):
acOutput = localText.getText("SYSTEM_RETURN", ())
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
elif ( CyInterface().shouldDisplayWaitingOthers() ):
acOutput = localText.getText("SYSTEM_WAITING", ())
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
elif ( CyInterface().shouldDisplayEndTurn() ):
# BUG - Reminders - start
if ( ReminderEventManager.g_turnReminderTexts ):
acOutput = u"%s" % ReminderEventManager.g_turnReminderTexts
else:
acOutput = localText.getText("SYSTEM_END_TURN", ())
# BUG - Reminders - end
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
elif ( CyInterface().shouldDisplayWaitingYou() ):
acOutput = localText.getText("SYSTEM_WAITING_FOR_YOU", ())
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
# BUG - Options - start
elif ( MainOpt.isShowOptionsKeyReminder() ):
if BugPath.isMac():
acOutput = localText.getText("TXT_KEY_BUG_OPTIONS_KEY_REMINDER_MAC", (BugPath.getModName(),))
else:
acOutput = localText.getText("TXT_KEY_BUG_OPTIONS_KEY_REMINDER", (BugPath.getModName(),))
#screen.modifyLabel( "EndTurnText", acOutput, CvUtil.FONT_CENTER_JUSTIFY )
screen.setEndTurnState( "EndTurnText", acOutput )
bShow = True
# BUG - Options - end
if ( bShow ):
screen.showEndTurn( "EndTurnText")
if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW or CyInterface().isCityScreenUp() ):
screen.moveItem( "EndTurnText", 0, yResolution - 194, -0.1 )
else:
screen.moveItem( "EndTurnText", 0, yResolution - 86, -0.1 )
else:
screen.hideEndTurn( "EndTurnText")
self.updateEndTurnButton()
# BUG - NJAGC - start
global g_bShowTimeTextAlt
if (CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_ADVANCED_START):
if (ClockOpt.isEnabled()):
screen.show("EraText")
if (ClockOpt.isAlternateTimeText()):
#global g_iTimeTextCounter (already done above)
if (CyUserProfile().wasClockJustTurnedOn() or g_iTimeTextCounter <= 0):
# reset timer, display primary
g_bShowTimeTextAlt = False
g_iTimeTextCounter = ClockOpt.getAlternatePeriod() * 1000
CyUserProfile().setClockJustTurnedOn(False)
else:
# countdown timer
g_iTimeTextCounter -= 250
if (g_iTimeTextCounter <= 0):
# timer elapsed, toggle between primary and alternate
g_iTimeTextCounter = ClockOpt.getAlternatePeriod() * 1000
g_bShowTimeTextAlt = not g_bShowTimeTextAlt
else:
g_bShowTimeTextAlt = False
self.updateTimeText()
screen.setLabel( "TimeText", "Background", g_szTimeText, CvUtil.FONT_RIGHT_JUSTIFY, xResolution - 56, 6, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.show("TimeText")
else:
self.updateTimeText()
screen.setLabel( "TimeText", "Background", g_szTimeText, CvUtil.FONT_RIGHT_JUSTIFY, xResolution - 56, 6, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.show("TimeText")
else:
screen.hide("TimeText")
screen.hide("EraText")
# BUG - NJAGC - end
# BUG - PLE - start
# this ensures that the info pane is closed after a greater mouse pos change
self.PLE.checkInfoPane(CyInterface().getMousePos())
# BUG - PLE - end
return 0
# Will redraw the interface
def redraw( self ):
# BugUtil.debug("redraw - Turn %d, Player %d, Interface %d, End Turn Button %d",
# gc.getGame().getGameTurn(), gc.getGame().getActivePlayer(), CyInterface().getShowInterface(), CyInterface().getEndTurnState())
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
# BUG - Field of View - start
self.setFieldofView(screen, CyInterface().isCityScreenUp())
# BUG - Field of View - end
# Check Dirty Bits, see what we need to redraw...
if (CyInterface().isDirty(InterfaceDirtyBits.PercentButtons_DIRTY_BIT) == True):
# Percent Buttons
self.updatePercentButtons()
CyInterface().setDirty(InterfaceDirtyBits.PercentButtons_DIRTY_BIT, False)
if (CyInterface().isDirty(InterfaceDirtyBits.Flag_DIRTY_BIT) == True):
# Percent Buttons
self.updateFlag()
CyInterface().setDirty(InterfaceDirtyBits.Flag_DIRTY_BIT, False)
if (CyInterface().isDirty(InterfaceDirtyBits.MiscButtons_DIRTY_BIT) == True):
# Miscellaneous buttons (civics screen, etc)
self.updateMiscButtons()
CyInterface().setDirty(InterfaceDirtyBits.MiscButtons_DIRTY_BIT, False)
if (CyInterface().isDirty(InterfaceDirtyBits.InfoPane_DIRTY_BIT) == True):
# Info Pane Dirty Bit
# This must come before updatePlotListButtons so that the entity widget appears in front of the stats
self.updateInfoPaneStrings()
CyInterface().setDirty(InterfaceDirtyBits.InfoPane_DIRTY_BIT, False)
if (CyInterface().isDirty(InterfaceDirtyBits.PlotListButtons_DIRTY_BIT) == True):
# BugUtil.debug("dirty PlotListButtons end - %s %s %s", self.bVanCurrentlyShowing, self.bPLECurrentlyShowing, self.bBUGCurrentlyShowing)
# Plot List Buttons Dirty
self.updatePlotListButtons()
CyInterface().setDirty(InterfaceDirtyBits.PlotListButtons_DIRTY_BIT, False)
# BugUtil.debug("dirty PlotListButtons start - %s %s %s", self.bVanCurrentlyShowing, self.bPLECurrentlyShowing, self.bBUGCurrentlyShowing)
if (CyInterface().isDirty(InterfaceDirtyBits.SelectionButtons_DIRTY_BIT) == True):
# Selection Buttons Dirty
self.updateSelectionButtons()
CyInterface().setDirty(InterfaceDirtyBits.SelectionButtons_DIRTY_BIT, False)
if (CyInterface().isDirty(InterfaceDirtyBits.ResearchButtons_DIRTY_BIT) == True):
# Research Buttons Dirty
self.updateResearchButtons()
CyInterface().setDirty(InterfaceDirtyBits.ResearchButtons_DIRTY_BIT, False)
if (CyInterface().isDirty(InterfaceDirtyBits.CitizenButtons_DIRTY_BIT) == True):
# Citizen Buttons Dirty
self.updateCitizenButtons()
CyInterface().setDirty(InterfaceDirtyBits.CitizenButtons_DIRTY_BIT, False)
if (CyInterface().isDirty(InterfaceDirtyBits.GameData_DIRTY_BIT) == True):
# Game Data Strings Dirty
self.updateGameDataStrings()
CyInterface().setDirty(InterfaceDirtyBits.GameData_DIRTY_BIT, False)
if (CyInterface().isDirty(InterfaceDirtyBits.Help_DIRTY_BIT) == True):
# Help Dirty bit
self.updateHelpStrings()
CyInterface().setDirty(InterfaceDirtyBits.Help_DIRTY_BIT, False)
if (CyInterface().isDirty(InterfaceDirtyBits.CityScreen_DIRTY_BIT) == True):
# Selection Data Dirty Bit
self.updateCityScreen()
CyInterface().setDirty(InterfaceDirtyBits.Domestic_Advisor_DIRTY_BIT, True)
CyInterface().setDirty(InterfaceDirtyBits.CityScreen_DIRTY_BIT, False)
if (CyInterface().isDirty(InterfaceDirtyBits.Score_DIRTY_BIT) == True or CyInterface().checkFlashUpdate() ):
# Scores!
self.updateScoreStrings()
CyInterface().setDirty(InterfaceDirtyBits.Score_DIRTY_BIT, False)
if (CyInterface().isDirty(InterfaceDirtyBits.GlobeInfo_DIRTY_BIT) == True):
# Globeview and Globelayer buttons
CyInterface().setDirty(InterfaceDirtyBits.GlobeInfo_DIRTY_BIT, False)
self.updateGlobeviewButtons()
return 0
# Will update the percent buttons
def updatePercentButtons( self ):
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
for iI in xrange( CommerceTypes.NUM_COMMERCE_TYPES ):
szString = "IncreasePercent" + str(iI)
screen.hide( szString )
szString = "DecreasePercent" + str(iI)
screen.hide( szString )
# BUG - Min/Max Sliders - start
szString = "MaxPercent" + str(iI)
screen.hide( szString )
szString = "MinPercent" + str(iI)
screen.hide( szString )
# BUG - Min/Max Sliders - start
pHeadSelectedCity = CyInterface().getHeadSelectedCity()
if ( not CyInterface().isCityScreenUp() or ( pHeadSelectedCity.getOwner() == gc.getGame().getActivePlayer() ) or gc.getGame().isDebugMode() ):
iCount = 0
if ( CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_ADVANCED_START):
for iI in xrange( CommerceTypes.NUM_COMMERCE_TYPES ):
# Intentional offset...
eCommerce = (iI + 1) % CommerceTypes.NUM_COMMERCE_TYPES
if (gc.getActivePlayer().isCommerceFlexible(eCommerce) or (CyInterface().isCityScreenUp() and (eCommerce == CommerceTypes.COMMERCE_GOLD))):
# BUG - Min/Max Sliders - start
bEnable = gc.getActivePlayer().isCommerceFlexible(eCommerce)
if MainOpt.isShowMinMaxCommerceButtons() and not CyInterface().isCityScreenUp():
iMinMaxAdjustX = 20
szString = "MaxPercent" + str(eCommerce)
screen.setButtonGFC( szString, u"", "", 70, 50 + (19 * iCount), 20, 20,
*BugDll.widget("WIDGET_SET_PERCENT", eCommerce, 100,
WidgetTypes.WIDGET_CHANGE_PERCENT, eCommerce, 100,
ButtonStyles.BUTTON_STYLE_CITY_PLUS) )
screen.show( szString )
screen.enable( szString, bEnable )
szString = "MinPercent" + str(eCommerce)
screen.setButtonGFC( szString, u"", "", 130, 50 + (19 * iCount), 20, 20,
*BugDll.widget("WIDGET_SET_PERCENT", eCommerce, 0,
WidgetTypes.WIDGET_CHANGE_PERCENT, eCommerce, -100,
ButtonStyles.BUTTON_STYLE_CITY_MINUS) )
screen.show( szString )
screen.enable( szString, bEnable )
else:
iMinMaxAdjustX = 0
szString = "IncreasePercent" + str(eCommerce)
screen.setButtonGFC( szString, u"", "", 70 + iMinMaxAdjustX, 50 + (19 * iCount), 20, 20, WidgetTypes.WIDGET_CHANGE_PERCENT, eCommerce, gc.getDefineINT("COMMERCE_PERCENT_CHANGE_INCREMENTS"), ButtonStyles.BUTTON_STYLE_CITY_PLUS )
screen.show( szString )
screen.enable( szString, bEnable )
szString = "DecreasePercent" + str(eCommerce)
screen.setButtonGFC( szString, u"", "", 90 + iMinMaxAdjustX, 50 + (19 * iCount), 20, 20, WidgetTypes.WIDGET_CHANGE_PERCENT, eCommerce, -gc.getDefineINT("COMMERCE_PERCENT_CHANGE_INCREMENTS"), ButtonStyles.BUTTON_STYLE_CITY_MINUS )
screen.show( szString )
screen.enable( szString, bEnable )
iCount = iCount + 1
# moved enabling above
# BUG - Min/Max Sliders - end
return 0
# BUG - start
def resetEndTurnObjects(self):
"""
Clears the end turn text and hides it and the button.
"""
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
screen.setEndTurnState( "EndTurnText", u"")
screen.hideEndTurn( "EndTurnText")
screen.hideEndTurn( "EndTurnButton")
# BUG - end
# Will update the end Turn Button
def updateEndTurnButton(self):
global g_eEndTurnButtonState
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
if CyInterface().shouldDisplayEndTurnButton() and CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
eState = CyInterface().getEndTurnState()
bShow = False
if eState == EndTurnButtonStates.END_TURN_OVER_HIGHLIGHT:
screen.setEndTurnState( "EndTurnButton", u"Red")
bShow = True
elif eState == EndTurnButtonStates.END_TURN_OVER_DARK:
screen.setEndTurnState( "EndTurnButton", u"Red")
bShow = True
elif eState == EndTurnButtonStates.END_TURN_GO:
screen.setEndTurnState( "EndTurnButton", u"Green")
bShow = True
if bShow:
screen.showEndTurn("EndTurnButton")
else:
screen.hideEndTurn("EndTurnButton")
if g_eEndTurnButtonState == eState:
return
g_eEndTurnButtonState = eState
else:
screen.hideEndTurn( "EndTurnButton")
return 0
def updateMiscButtons( self ):
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
xResolution = screen.getXResolution()
### Great Person Bar
if CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_ADVANCED_START:
self.updateGreatPersonBar(screen)
###
if CyInterface().shouldDisplayFlag() and CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
screen.show("CivilizationFlag")
screen.show("InterfaceHelpButton")
screen.show("MainMenuButton")
else:
screen.hide("CivilizationFlag")
screen.hide("InterfaceHelpButton")
screen.hide("MainMenuButton")
if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE_ALL or CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_MINIMAP_ONLY:
screen.hide("InterfaceTopLeft")
screen.hide("InterfaceTopCenter")
screen.hide("InterfaceTopRight")
screen.hide("InterfaceLeftBackgroundWidget")
screen.hide("InterfaceTopBackgroundWidget")
screen.hide("InterfaceCenterBackgroundWidget")
screen.hide("InterfaceRightBackgroundWidget")
screen.hide("MiniMapPanel")
screen.hide("TurnLogButton")
screen.hide("BUGOptionsScreenWidget")
screen.hide("CivilWarButton")
screen.hide("DomesticAdvisorButton")
screen.hide("FinanceAdvisorButton")
screen.hide("CivicsAdvisorButton")
screen.hide("ForeignAdvisorButton")
screen.hide("MilitaryAdvisorButton")
screen.hide("TechAdvisorButton")
screen.hide("ReligiousAdvisorButton")
screen.hide("CorporationAdvisorButton")
screen.hide("VictoryAdvisorButton")
screen.hide("InfoAdvisorButton")
screen.hide("EspionageAdvisorButton")
screen.hide("MainCityScrollMinus")
screen.hide("MainCityScrollPlus")
# Field of View slider
screen.hide(self.szSliderTextId)
screen.hide(self.szSliderId)
elif CyInterface().isCityScreenUp():
screen.hide("InterfaceTopLeft")
screen.hide("InterfaceTopCenter")
screen.hide("InterfaceTopRight")
screen.show("InterfaceLeftBackgroundWidget")
screen.show("InterfaceTopBackgroundWidget")
screen.show("InterfaceCenterBackgroundWidget")
screen.show("InterfaceRightBackgroundWidget")
screen.show("MiniMapPanel")
screen.hide("TurnLogButton")
screen.hide("BUGOptionsScreenWidget")
screen.hide("CivilWarButton")
screen.hide("DomesticAdvisorButton")
screen.hide("FinanceAdvisorButton")
screen.hide("CivicsAdvisorButton")
screen.hide("MilitaryAdvisorButton")
screen.hide("ForeignAdvisorButton")
screen.hide("TechAdvisorButton")
screen.hide("ReligiousAdvisorButton")
screen.hide("CorporationAdvisorButton")
screen.hide("VictoryAdvisorButton")
screen.hide("InfoAdvisorButton")
screen.hide("EspionageAdvisorButton")
screen.hide("MainCityScrollMinus")
screen.hide("MainCityScrollPlus")
# Field of View slider
screen.hide(self.szSliderTextId)
screen.hide(self.szSliderId)
elif CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE:
screen.show("InterfaceTopLeft")
screen.show("InterfaceTopCenter")
screen.show("InterfaceTopRight")
screen.hide("InterfaceLeftBackgroundWidget")
screen.show("InterfaceTopBackgroundWidget")
screen.hide("InterfaceCenterBackgroundWidget")
screen.hide("InterfaceRightBackgroundWidget")
screen.hide("MiniMapPanel")
screen.show("TurnLogButton")
screen.show("BUGOptionsScreenWidget")
screen.show("CivilWarButton")
screen.show("DomesticAdvisorButton")
screen.show("FinanceAdvisorButton")
screen.show("CivicsAdvisorButton")
screen.show("MilitaryAdvisorButton")
screen.show("ForeignAdvisorButton")
screen.show("TechAdvisorButton")
screen.show("ReligiousAdvisorButton")
screen.show("CorporationAdvisorButton")
screen.show("VictoryAdvisorButton")
screen.show("InfoAdvisorButton")
screen.show("EspionageAdvisorButton")
screen.hide("MainCityScrollMinus")
screen.hide("MainCityScrollPlus")
# Field of View
screen.hide(self.szSliderTextId)
screen.hide(self.szSliderId)
screen.moveToFront("TurnLogButton")
screen.moveToFront("BUGOptionsScreenWidget")
screen.moveToFront("CivilWarButton")
screen.moveToFront("DomesticAdvisorButton")
screen.moveToFront("FinanceAdvisorButton")
screen.moveToFront("CivicsAdvisorButton")
screen.moveToFront("MilitaryAdvisorButton")
screen.moveToFront("ForeignAdvisorButton")
screen.moveToFront("TechAdvisorButton")
screen.moveToFront("ReligiousAdvisorButton")
screen.moveToFront("CorporationAdvisorButton")
screen.moveToFront("VictoryAdvisorButton")
screen.moveToFront("InfoAdvisorButton")
screen.moveToFront("EspionageAdvisorButton")
elif CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_ADVANCED_START:
screen.hide("InterfaceTopLeft")
screen.hide("InterfaceTopCenter")
screen.hide("InterfaceTopRight")
screen.hide("InterfaceLeftBackgroundWidget")
screen.hide("InterfaceTopBackgroundWidget")
screen.hide("InterfaceCenterBackgroundWidget")
screen.hide("InterfaceRightBackgroundWidget")
screen.show("MiniMapPanel")
screen.hide("TurnLogButton")
screen.hide("BUGOptionsScreenWidget")
screen.hide("CivilWarButton")
screen.hide("DomesticAdvisorButton")
screen.hide("FinanceAdvisorButton")
screen.hide("CivicsAdvisorButton")
screen.hide("MilitaryAdvisorButton")
screen.hide("ForeignAdvisorButton")
screen.hide("TechAdvisorButton")
screen.hide("ReligiousAdvisorButton")
screen.hide("CorporationAdvisorButton")
screen.hide("VictoryAdvisorButton")
screen.hide("InfoAdvisorButton")
screen.hide("EspionageAdvisorButton")
screen.hide("MainCityScrollMinus")
screen.hide("MainCityScrollPlus")
elif CyEngine().isGlobeviewUp():
screen.show("InterfaceTopLeft")
screen.show("InterfaceTopCenter")
screen.show("InterfaceTopRight")
screen.hide("InterfaceLeftBackgroundWidget")
screen.hide("InterfaceTopBackgroundWidget")
screen.hide("InterfaceCenterBackgroundWidget")
screen.show("InterfaceRightBackgroundWidget")
screen.show("MiniMapPanel")
screen.show("TurnLogButton")
screen.show("BUGOptionsScreenWidget")
screen.show("CivilWarButton")
screen.show("DomesticAdvisorButton")
screen.show("FinanceAdvisorButton")
screen.show("CivicsAdvisorButton")
screen.show("MilitaryAdvisorButton")
screen.show("ForeignAdvisorButton")
screen.show("TechAdvisorButton")
screen.show("ReligiousAdvisorButton")
screen.show("CorporationAdvisorButton")
screen.show("VictoryAdvisorButton")
screen.show("InfoAdvisorButton")
screen.show("EspionageAdvisorButton")
screen.hide("MainCityScrollMinus")
screen.hide("MainCityScrollPlus")
# Field of View slider
screen.hide(self.szSliderTextId)
screen.hide(self.szSliderId)
screen.moveToFront("TurnLogButton")
screen.moveToFront("BUGOptionsScreenWidget")
screen.moveToFront("CivilWarButton")
screen.moveToFront("DomesticAdvisorButton")
screen.moveToFront("FinanceAdvisorButton")
screen.moveToFront("CivicsAdvisorButton")
screen.moveToFront("MilitaryAdvisorButton")
screen.moveToFront("ForeignAdvisorButton")
screen.moveToFront("TechAdvisorButton")
screen.moveToFront("ReligiousAdvisorButton")
screen.moveToFront("CorporationAdvisorButton")
screen.moveToFront("VictoryAdvisorButton")
screen.moveToFront("InfoAdvisorButton")
screen.moveToFront("EspionageAdvisorButton")
else:
screen.show("InterfaceTopLeft")
screen.show("InterfaceTopCenter")
screen.show("InterfaceTopRight")
screen.show("InterfaceLeftBackgroundWidget")
screen.show("InterfaceTopBackgroundWidget")
screen.show("InterfaceCenterBackgroundWidget")
screen.show("InterfaceRightBackgroundWidget")
screen.show("MiniMapPanel")
screen.show("TurnLogButton")
screen.show("BUGOptionsScreenWidget")
screen.show("CivilWarButton")
screen.show("DomesticAdvisorButton")
screen.show("FinanceAdvisorButton")
screen.show("CivicsAdvisorButton")
screen.show("MilitaryAdvisorButton")
screen.show("ForeignAdvisorButton")
screen.show("TechAdvisorButton")
screen.show("ReligiousAdvisorButton")
screen.show("CorporationAdvisorButton")
screen.show("VictoryAdvisorButton")
screen.show("InfoAdvisorButton")
screen.show("EspionageAdvisorButton")
screen.show("MainCityScrollMinus")
screen.show("MainCityScrollPlus")
# Field of View slider
if MainOpt.isShowFieldOfView():
screen.show(self.szSliderTextId)
screen.show(self.szSliderId)
else:
screen.hide(self.szSliderTextId)
screen.hide(self.szSliderId)
screen.moveToFront("TurnLogButton")
screen.moveToFront("BUGOptionsScreenWidget")
screen.moveToFront("CivilWarButton")
screen.moveToFront("DomesticAdvisorButton")
screen.moveToFront("FinanceAdvisorButton")
screen.moveToFront("CivicsAdvisorButton")
screen.moveToFront("MilitaryAdvisorButton")
screen.moveToFront("ForeignAdvisorButton")
screen.moveToFront("TechAdvisorButton")
screen.moveToFront("ReligiousAdvisorButton")
screen.moveToFront("CorporationAdvisorButton")
screen.moveToFront("VictoryAdvisorButton")
screen.moveToFront("InfoAdvisorButton")
screen.moveToFront("EspionageAdvisorButton")
screen.updateMinimapVisibility()
return 0
def updatePlotListButtons( self ):
# BugUtil.debug("updatePlotListButtons start - %s %s %s", self.bVanCurrentlyShowing, self.bPLECurrentlyShowing, self.bBUGCurrentlyShowing)
screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
self.updatePlotListButtons_Hide(screen)
self.updatePlotListButtons_Common(screen)
# BUG - draw methods
sDrawMethod = self.DRAW_METHODS[PleOpt.getDrawMethod()]
if sDrawMethod == self.DRAW_METHOD_PLE:
self.PLE.updatePlotListButtons_PLE(screen, self.xResolution, self.yResolution)
self.bPLECurrentlyShowing = True
elif sDrawMethod == self.DRAW_METHOD_VAN:
self.updatePlotListButtons_Orig(screen)
self.bVanCurrentlyShowing = True
else: # self.DRAW_METHOD_BUG
self.updatePlotListButtons_BUG(screen)
self.bBUGCurrentlyShowing = True
# BUG - draw methods
# BugUtil.debug("updatePlotListButtons end - %s %s %s", self.bVanCurrentlyShowing, self.bPLECurrentlyShowing, self.bBUGCurrentlyShowing)
return 0
# if PleOpt.isPLE_Style():
# self.updatePlotListButtons_PLE(screen)
# self.bPLECurrentlyShowing = True
# else:
# self.updatePlotListButtons_Orig(screen)
# self.bVanCurrentlyShowing = True
# return 0
def updatePlotListButtons_Hide( self, screen ):
# BugUtil.debug("updatePlotListButtons_Hide - %s %s %s", self.bVanCurrentlyShowing, self.bPLECurrentlyShowing, self.bBUGCurrentlyShowing)
# hide all buttons
if self.bPLECurrentlyShowing:
# BugUtil.debug("updatePlotListButtons_Hide - hiding PLE")
self.PLE.hidePlotListButtonPLEObjects(screen)
self.PLE.hideUnitInfoPane()
self.bPLECurrentlyShowing = False
if self.bVanCurrentlyShowing:
# BugUtil.debug("updatePlotListButtons_Hide - hiding Vanilla")
self.hidePlotListButton_Orig(screen)
self.bVanCurrentlyShowing = False
# BUG - BUG unit plot draw method - start
if self.bBUGCurrentlyShowing:
# BugUtil.debug("updatePlotListButtons_Hide - hiding BUG")
self.hidePlotListButton_BUG(screen)
self.bBUGCurrentlyShowing = False
# BUG - BUG unit plot draw method - end
def updatePlotListButtons_Common( self, screen ):
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
# Capture these for looping over the plot's units
self.PLE.UnitPlotList_BUGOptions()
bHandled = False
if ( CyInterface().shouldDisplayUnitModel() and not CyEngine().isGlobeviewUp() and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL ):
if ( CyInterface().isCitySelection() ):
iOrders = CyInterface().getNumOrdersQueued()
for i in xrange( iOrders ):
if ( bHandled == False ):
eOrderNodeType = CyInterface().getOrderNodeType(i)
if (eOrderNodeType == OrderTypes.ORDER_TRAIN ):
screen.addUnitGraphicGFC( "InterfaceUnitModel", CyInterface().getOrderNodeData1(i), 170, yResolution - 138, 128, 128, WidgetTypes.WIDGET_HELP_SELECTED, 0, -1, -20, 30, 1, False )
bHandled = True
elif ( eOrderNodeType == OrderTypes.ORDER_CONSTRUCT ):
screen.addBuildingGraphicGFC( "InterfaceUnitModel", CyInterface().getOrderNodeData1(i), 170, yResolution - 138, 128, 128, WidgetTypes.WIDGET_HELP_SELECTED, 0, -1, -20, 30, 0.8, False )
bHandled = True
elif ( eOrderNodeType == OrderTypes.ORDER_CREATE ):
if(gc.getProjectInfo(CyInterface().getOrderNodeData1(i)).isSpaceship()):
modelType = 0
screen.addSpaceShipWidgetGFC("InterfaceUnitModel", 170, yResolution - 138, 128, 128, CyInterface().getOrderNodeData1(i), modelType, WidgetTypes.WIDGET_HELP_SELECTED, 0, -1)
else:
screen.hide("InterfaceUnitModel")
bHandled = True
elif eOrderNodeType == OrderTypes.ORDER_MAINTAIN:
screen.hide("InterfaceUnitModel")
bHandled = True
if not bHandled:
screen.hide("InterfaceUnitModel")
bHandled = True
screen.moveToFront("SelectedCityText")
elif CyInterface().getHeadSelectedUnit():
screen.addUnitGraphicGFC("InterfaceUnitModel", CyInterface().getHeadSelectedUnit().getUnitType(), 170, yResolution - 138, 128, 128, WidgetTypes.WIDGET_UNIT_MODEL, CyInterface().getHeadSelectedUnit().getUnitType(), -1, -20, 30, 1, False)
screen.moveToFront("SelectedUnitText")
else:
screen.hide("InterfaceUnitModel")
else:
screen.hide("InterfaceUnitModel")
def hidePlotListButton_Orig(self, screen):
# BugUtil.debug("hidePlotListButton_Orig - %i", self.numPlotListButtons_Total())
# hides all unit button objects
for i in xrange( self.numPlotListButtons_Total() ):
szString = "PlotListButton" + str(i)
screen.hide( szString )
screen.hide( szString + "Icon")
screen.hide( szString + "Health")
screen.hide( szString + "MoveBar")
screen.hide( szString + "PromoFrame")
screen.hide( szString + "ActionIcon")
screen.hide( szString + "Upgrade")
# BUG - draw method
def hidePlotListButton_BUG(self, screen):
if self.DRAW_METHODS[PleOpt.getDrawMethod()] != self.DRAW_METHOD_BUG:
self.BupPanel.clearUnits()
self.BupPanel.Hide()
return
# hides all unit button objects
# for i in xrange( self.iMaxPlotListIcons ):
# szString = "PlotListButton" + str(i)
# screen.hide( szString )
# screen.hide( szString + "Icon")
# screen.hide( szString + "Health")
# screen.hide( szString + "MoveBar")
# screen.hide( szString + "PromoFrame")
# screen.hide( szString + "ActionIcon")
# screen.hide( szString + "Upgrade")
# BUG - draw method
def updatePlotListButtons_Orig( self, screen ):
# need to put in something similar to def displayUnitPlotListObjects( self, screen, pLoopUnit, nRow, nCol ):
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
pPlot = CyInterface().getSelectionPlot()
for i in xrange(gc.getNumPromotionInfos()):
szName = "PromotionButton" + str(i)
screen.moveToFront( szName )
screen.hide("PlotListMinus")
screen.hide("PlotListPlus")
BugUtil.debug("updatePlotListButtons_Orig - column %i, offset %i", CyInterface().getPlotListColumn(), CyInterface().getPlotListOffset())
if ( pPlot and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyEngine().isGlobeviewUp() == False):
iVisibleUnits = CyInterface().getNumVisibleUnits()
iCount = -(CyInterface().getPlotListColumn())
bLeftArrow = False
bRightArrow = False
if (CyInterface().isCityScreenUp()):
iMaxRows = 1
iSkipped = (self.numPlotListRows() - 1) * self.numPlotListButtonsPerRow()
iCount += iSkipped
else:
iMaxRows = self.numPlotListRows()
iCount += CyInterface().getPlotListOffset()
iSkipped = 0
BugUtil.debug("updatePlotListButtons_Orig - iCount(%i), iSkipped(%i)", iCount, iSkipped)
CyInterface().cacheInterfacePlotUnits(pPlot)
for i in xrange(CyInterface().getNumCachedInterfacePlotUnits()):
pLoopUnit = CyInterface().getCachedInterfacePlotUnit(i)
if (pLoopUnit):
if ((iCount == 0) and (CyInterface().getPlotListColumn() > 0)):
bLeftArrow = True
elif ((iCount == (self.numPlotListRows() * self.numPlotListButtonsPerRow() - 1)) and ((iVisibleUnits - iCount - CyInterface().getPlotListColumn() + iSkipped) > 1)):
bRightArrow = True
if ((iCount >= 0) and (iCount < self.numPlotListButtonsPerRow() * self.numPlotListRows())):
if ((pLoopUnit.getTeam() != gc.getGame().getActiveTeam()) or pLoopUnit.isWaiting()):
szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_FORTIFY").getPath()
elif (pLoopUnit.canMove()):
if (pLoopUnit.hasMoved()):
szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_HASMOVED").getPath()
else:
szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_MOVE").getPath()
else:
szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_NOMOVE").getPath()
szString = "PlotListButton" + str(iCount)
screen.changeImageButton( szString, gc.getUnitInfo(pLoopUnit.getUnitType()).getButton() )
if ( pLoopUnit.getOwner() == gc.getGame().getActivePlayer() ):
bEnable = True
else:
bEnable = False
screen.enable(szString, bEnable)
if (pLoopUnit.IsSelected()):
screen.setState(szString, True)
else:
screen.setState(szString, False)
screen.show( szString )
# place the health bar
if (pLoopUnit.isFighting()):
bShowHealth = False
elif (pLoopUnit.getDomainType() == DomainTypes.DOMAIN_AIR):
bShowHealth = pLoopUnit.canAirAttack()
else:
bShowHealth = pLoopUnit.canFight()
if bShowHealth:
szStringHealth = szString + "Health"
screen.setBarPercentage( szStringHealth, InfoBarTypes.INFOBAR_STORED, float( pLoopUnit.currHitPoints() ) / float( pLoopUnit.maxHitPoints() ) )
if (pLoopUnit.getDamage() >= ((pLoopUnit.maxHitPoints() * 2) / 3)):
screen.setStackedBarColors(szStringHealth, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_RED"))
elif (pLoopUnit.getDamage() >= (pLoopUnit.maxHitPoints() / 3)):
screen.setStackedBarColors(szStringHealth, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_YELLOW"))
else:
screen.setStackedBarColors(szStringHealth, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_GREEN"))
screen.show( szStringHealth )
# Adds the overlay first
szStringIcon = szString + "Icon"
screen.changeDDSGFC( szStringIcon, szFileName )
screen.show( szStringIcon )
if bEnable:
x = 315 + ((iCount % self.numPlotListButtonsPerRow()) * 34)
y = yResolution - 169 + (iCount / self.numPlotListButtonsPerRow() - self.numPlotListRows() + 1) * 34
self.PLE._displayUnitPlotList_Dot( screen, pLoopUnit, szString, iCount, x, y + 4 )
self.PLE._displayUnitPlotList_Promo( screen, pLoopUnit, szString )
self.PLE._displayUnitPlotList_Upgrade( screen, pLoopUnit, szString, iCount, x, y )
self.PLE._displayUnitPlotList_Mission( screen, pLoopUnit, szString, iCount, x, y - 22, 12)
iCount = iCount + 1
# BugUtil.debug("updatePlotListButtons_Orig - vis units(%i), buttons per row(%i), max rows(%i)", iVisibleUnits, self.numPlotListButtonsPerRow(), iMaxRows)
if (iVisibleUnits > self.numPlotListButtonsPerRow() * iMaxRows):
# BugUtil.debug("updatePlotListButtons_Orig - show arrows %s %s", bLeftArrow, bRightArrow)
screen.enable("PlotListMinus", bLeftArrow)
screen.show("PlotListMinus")
screen.enable("PlotListPlus", bRightArrow)
screen.show("PlotListPlus")
return 0
# BUG - BUG unit plot draw method - start
def updatePlotListButtons_BUG( self, screen ):
# need to put in something similar to def displayUnitPlotListObjects( self, screen, pLoopUnit, nRow, nCol ):
# xResolution = screen.getXResolution()
# yResolution = screen.getYResolution()
pPlot = CyInterface().getSelectionPlot()
# this moves the promotions for the unit shown in the
# bottom left so that they sit on top of the unit picture
for i in xrange(gc.getNumPromotionInfos()):
szName = "PromotionButton" + str(i)
screen.moveToFront( szName )
# screen.hide("PlotListMinus")
# screen.hide("PlotListPlus")
# BugUtil.debug("updatePlotListButtons_BUG - A")
# if ( pPlot and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyEngine().isGlobeviewUp() == False):
# skip this if we don't need to display any units
# if not (pPlot
# and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL
# and CyEngine().isGlobeviewUp() == False):
if (not pPlot
or CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE_ALL
or CyEngine().isGlobeviewUp() == True):
self.BupPanel.clearUnits()
self.BupPanel.Hide()
return 0
# BugUtil.debug("updatePlotListButtons_BUG - B")
# self.BupPanel.clearUnits()
self.BupPanel.addPlot(pPlot.getX(), pPlot.getY())
CyInterface().cacheInterfacePlotUnits(pPlot)
for i in xrange(CyInterface().getNumCachedInterfacePlotUnits()):
pLoopUnit = CyInterface().getCachedInterfacePlotUnit(i)
if (pLoopUnit):
self.BupPanel.addUnit(pLoopUnit)
# BugUtil.debug("updatePlotListButtons_BUG - C")
# self.BupPanel.UpdateBUGOptions()
timer = BugUtil.Timer("draw plot list")
self.BupPanel.Draw()
timer.log()
#
# iVisibleUnits = CyInterface().getNumVisibleUnits()
# iCount = -(CyInterface().getPlotListColumn())
# bLeftArrow = False
# bRightArrow = False
# if (CyInterface().isCityScreenUp()):
# iMaxRows = 1
# iSkipped = (gc.getMAX_PLOT_LIST_ROWS() - 1) * self.numPlotListButtons()
# iCount += iSkipped
# else:
# iMaxRows = gc.getMAX_PLOT_LIST_ROWS()
# iCount += CyInterface().getPlotListOffset()
# iSkipped = 0
# CyInterface().cacheInterfacePlotUnits(pPlot)
# for i in xrange(CyInterface().getNumCachedInterfacePlotUnits()):
# pLoopUnit = CyInterface().getCachedInterfacePlotUnit(i)
# if (pLoopUnit):
# if ((iCount == 0) and (CyInterface().getPlotListColumn() > 0)):
# bLeftArrow = True
# elif ((iCount == (gc.getMAX_PLOT_LIST_ROWS() * self.numPlotListButtons() - 1)) and ((iVisibleUnits - iCount - CyInterface().getPlotListColumn() + iSkipped) > 1)):
# bRightArrow = True
# if ((iCount >= 0) and (iCount < self.numPlotListButtons() * gc.getMAX_PLOT_LIST_ROWS())):
# if ((pLoopUnit.getTeam() != gc.getGame().getActiveTeam()) or pLoopUnit.isWaiting()):
# szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_FORTIFY").getPath()
# elif (pLoopUnit.canMove()):
# if (pLoopUnit.hasMoved()):
# szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_HASMOVED").getPath()
# else:
# szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_MOVE").getPath()
# else:
# szFileName = CyArtFileMgr().getInterfaceArtInfo("OVERLAY_NOMOVE").getPath()
# szString = "PlotListButton" + str(iCount)
# screen.changeImageButton( szString, gc.getUnitInfo(pLoopUnit.getUnitType()).getButton() )
# if ( pLoopUnit.getOwner() == gc.getGame().getActivePlayer() ):
# bEnable = True
# else:
# bEnable = False
# screen.enable(szString, bEnable)
# if (pLoopUnit.IsSelected()):
# screen.setState(szString, True)
# else:
# screen.setState(szString, False)
# screen.show( szString )
# # place the health bar
# if (pLoopUnit.isFighting()):
# bShowHealth = False
# elif (pLoopUnit.getDomainType() == DomainTypes.DOMAIN_AIR):
# bShowHealth = pLoopUnit.canAirAttack()
# else:
# bShowHealth = pLoopUnit.canFight()
# if bShowHealth:
# szStringHealth = szString + "Health"
# screen.setBarPercentage( szStringHealth, InfoBarTypes.INFOBAR_STORED, float( pLoopUnit.currHitPoints() ) / float( pLoopUnit.maxHitPoints() ) )
# if (pLoopUnit.getDamage() >= ((pLoopUnit.maxHitPoints() * 2) / 3)):
# screen.setStackedBarColors(szStringHealth, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_RED"))
# elif (pLoopUnit.getDamage() >= (pLoopUnit.maxHitPoints() / 3)):
# screen.setStackedBarColors(szStringHealth, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_YELLOW"))
# else:
# screen.setStackedBarColors(szStringHealth, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString("COLOR_GREEN"))
# screen.show( szStringHealth )
# # Adds the overlay first
# szStringIcon = szString + "Icon"
# screen.changeDDSGFC( szStringIcon, szFileName )
# screen.show( szStringIcon )
# if bEnable:#
# x = 315 + ((iCount % self.numPlotListButtons()) * 34)
# y = yResolution - 169 + (iCount / self.numPlotListButtons() - gc.getMAX_PLOT_LIST_ROWS() + 1) * 34
# self.displayUnitPlotList_Dot( screen, pLoopUnit, szString, iCount, x, y + 4 )
# self.displayUnitPlotList_Promo( screen, pLoopUnit, szString )
# self.displayUnitPlotList_Upgrade( screen, pLoopUnit, szString, iCount, x, y )
# self.displayUnitPlotList_Mission( screen, pLoopUnit, szString, iCount, x, y - 22, 12)
# iCount = iCount + 1
# if (iVisibleUnits > self.numPlotListButtons() * iMaxRows):
# screen.enable("PlotListMinus", bLeftArrow)
# screen.show("PlotListMinus")
# screen.enable("PlotListPlus", bRightArrow)
# screen.show("PlotListPlus")
# else:
# screen.hide("PlotListMinus")
# screen.hide("PlotListPlus")
return 0
# BUG - BUG unit plot draw method - end
# This will update the flag widget for SP hotseat and dbeugging
def updateFlag(self):
if ( CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_ADVANCED_START ):
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
screen.addFlagWidgetGFC( "CivilizationFlag", xResolution - 288, yResolution - 138, 68, 250, gc.getGame().getActivePlayer(), WidgetTypes.WIDGET_FLAG, gc.getGame().getActivePlayer(), -1)
# Will hide and show the selection buttons and their associated buttons
def updateSelectionButtons( self ):
global SELECTION_BUTTON_COLUMNS
global MAX_SELECTION_BUTTONS
global g_pSelectedUnit
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
pHeadSelectedCity = CyInterface().getHeadSelectedCity()
pHeadSelectedUnit = CyInterface().getHeadSelectedUnit()
global g_NumEmphasizeInfos
global g_NumCityTabTypes
global g_NumHurryInfos
global g_NumUnitClassInfos
global g_NumBuildingClassInfos
global g_NumProjectInfos
global g_NumProcessInfos
global g_NumActionInfos
# Find out our resolution
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
# BUG - Build/Action Icon Size - start
if MainOpt.isBuildIconSizeLarge():
screen.addMultiListControlGFC( "BottomButtonContainer", u"", iMultiListXL, yResolution - 113 + 18, xResolution - (iMultiListXL+iMultiListXR), 64, 4, 64, 64, TableStyles.TABLE_STYLE_STANDARD )
elif MainOpt.isBuildIconSizeMedium():
screen.addMultiListControlGFC( "BottomButtonContainer", u"", iMultiListXL, yResolution - 113, xResolution - (iMultiListXL+iMultiListXR), 100, 4, 48, 48, TableStyles.TABLE_STYLE_STANDARD )
else:
screen.addMultiListControlGFC( "BottomButtonContainer", u"", iMultiListXL, yResolution - 113, xResolution - (iMultiListXL+iMultiListXR), 114, 4, 36, 36, TableStyles.TABLE_STYLE_STANDARD )
# EF: minimum icon size for disabled buttons to work is 33 so these sizes won't fly
# screen.addMultiListControlGFC( "BottomButtonContainer", u"", iMultiListXL, yResolution - 113, xResolution - (iMultiListXL+iMultiListXR), 102, 4, 32, 32, TableStyles.TABLE_STYLE_STANDARD )
# screen.addMultiListControlGFC( "BottomButtonContainer", u"", iMultiListXL, yResolution - 113, xResolution - (iMultiListXL+iMultiListXR), 104, 4, 24, 24, TableStyles.TABLE_STYLE_STANDARD )
# BUG - Build/Action Icon Size - end
screen.clearMultiList( "BottomButtonContainer")
screen.hide("BottomButtonContainer")
# All of the hides...
self.setMinimapButtonVisibility(False)
screen.hideList( 0 )
for i in range (g_NumEmphasizeInfos):
szButtonID = "Emphasize" + str(i)
screen.hide( szButtonID )
# Hurry button show...
for i in xrange( g_NumHurryInfos ):
szButtonID = "Hurry" + str(i)
screen.hide( szButtonID )
# Conscript Button Show
screen.hide("Conscript")
#screen.hide("Liberate")
screen.hide("AutomateProduction")
screen.hide("AutomateCitizens")
if not CyEngine().isGlobeviewUp() and pHeadSelectedCity:
self.setMinimapButtonVisibility(True)
if pHeadSelectedCity.getOwner() == gc.getGame().getActivePlayer() or gc.getGame().isDebugMode():
iBtnX = xResolution - 284
iBtnY = yResolution - 177
iBtnW = 64
iBtnH = 30
# Liberate button
#szText = "<font=1>" + localText.getText("TXT_KEY_LIBERATE_CITY", ()) + "</font>"
#screen.setButtonGFC( "Liberate", szText, "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_LIBERATE_CITY, -1, -1, ButtonStyles.BUTTON_STYLE_STANDARD )
#screen.setStyle( "Liberate", "Button_CityT1_Style")
#screen.hide("Liberate")
iBtnSX = xResolution - 284
iBtnX = iBtnSX
iBtnY = yResolution - 140
iBtnW = 64
iBtnH = 30
# Conscript button
szText = "<font=1>" + localText.getText("TXT_KEY_DRAFT", ()) + "</font>"
screen.setButtonGFC("Conscript", szText, "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_CONSCRIPT, -1, -1, ButtonStyles.BUTTON_STYLE_STANDARD)
screen.setStyle("Conscript", "Button_CityT1_Style")
screen.hide("Conscript")
iBtnY += iBtnH
iBtnW = 32
iBtnH = 28
# Hurry Buttons
screen.setButtonGFC("Hurry0", "", "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_HURRY, 0, -1, ButtonStyles.BUTTON_STYLE_STANDARD)
screen.setStyle("Hurry0", "Button_CityC1_Style")
screen.hide("Hurry0")
iBtnX += iBtnW
screen.setButtonGFC("Hurry1", "", "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_HURRY, 1, -1, ButtonStyles.BUTTON_STYLE_STANDARD)
screen.setStyle("Hurry1", "Button_CityC2_Style")
screen.hide("Hurry1")
iBtnX = iBtnSX
iBtnY += iBtnH
# Automate Production Button
screen.addCheckBoxGFC("AutomateProduction", "", "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_AUTOMATE_PRODUCTION, -1, -1, ButtonStyles.BUTTON_STYLE_STANDARD)
screen.setStyle("AutomateProduction", "Button_CityC3_Style")
iBtnX += iBtnW
# Automate Citizens Button
screen.addCheckBoxGFC("AutomateCitizens", "", "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_AUTOMATE_CITIZENS, -1, -1, ButtonStyles.BUTTON_STYLE_STANDARD)
screen.setStyle("AutomateCitizens", "Button_CityC4_Style")
iBtnY += iBtnH
iBtnX = iBtnSX
iBtnW = 22
iBtnWa = 20
iBtnH = 24
iBtnHa = 27
# Set Emphasize buttons
i = 0
szButtonID = "Emphasize" + str(i)
screen.addCheckBoxGFC(szButtonID, "", "", iBtnX, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_EMPHASIZE, i, -1, ButtonStyles.BUTTON_STYLE_LABEL)
szStyle = "Button_CityB" + str(i+1) + "_Style"
screen.setStyle(szButtonID, szStyle)
screen.hide(szButtonID)
i+=1
szButtonID = "Emphasize" + str(i)
screen.addCheckBoxGFC( szButtonID, "", "", iBtnX+iBtnW, iBtnY, iBtnWa, iBtnH, WidgetTypes.WIDGET_EMPHASIZE, i, -1, ButtonStyles.BUTTON_STYLE_LABEL )
szStyle = "Button_CityB" + str(i+1) + "_Style"
screen.setStyle( szButtonID, szStyle )
screen.hide( szButtonID )
i+=1
szButtonID = "Emphasize" + str(i)
screen.addCheckBoxGFC( szButtonID, "", "", iBtnX+iBtnW+iBtnWa, iBtnY, iBtnW, iBtnH, WidgetTypes.WIDGET_EMPHASIZE, i, -1, ButtonStyles.BUTTON_STYLE_LABEL )
szStyle = "Button_CityB" + str(i+1) + "_Style"
screen.setStyle( szButtonID, szStyle )
screen.hide( szButtonID )
iBtnY += iBtnH
i+=1
szButtonID = "Emphasize" + str(i)
screen.addCheckBoxGFC( szButtonID, "", "", iBtnX, iBtnY, iBtnW, iBtnHa, WidgetTypes.WIDGET_EMPHASIZE, i, -1, ButtonStyles.BUTTON_STYLE_LABEL )
szStyle = "Button_CityB" + str(i+1) + "_Style"
screen.setStyle( szButtonID, szStyle )
screen.hide( szButtonID )
i+=1
szButtonID = "Emphasize" + str(i)
screen.addCheckBoxGFC( szButtonID, "", "", iBtnX+iBtnW, iBtnY, iBtnWa, iBtnHa, WidgetTypes.WIDGET_EMPHASIZE, i, -1, ButtonStyles.BUTTON_STYLE_LABEL )
szStyle = "Button_CityB" + str(i+1) + "_Style"
screen.setStyle( szButtonID, szStyle )
screen.hide( szButtonID )
i+=1
szButtonID = "Emphasize" + str(i)
screen.addCheckBoxGFC(szButtonID, "", "", iBtnX+iBtnW+iBtnWa, iBtnY, iBtnW, iBtnHa, WidgetTypes.WIDGET_EMPHASIZE, i, -1, ButtonStyles.BUTTON_STYLE_LABEL)
szStyle = "Button_CityB" + str(i+1) + "_Style"
screen.setStyle(szButtonID, szStyle)
screen.hide(szButtonID)
g_pSelectedUnit = 0
screen.setState("AutomateCitizens", pHeadSelectedCity.isCitizensAutomated())
screen.setState("AutomateProduction", pHeadSelectedCity.isProductionAutomated())
for i in range (g_NumEmphasizeInfos):
szButtonID = "Emphasize" + str(i)
screen.show(szButtonID)
if pHeadSelectedCity.AI_isEmphasize(i):
screen.setState(szButtonID, True)
else:
screen.setState(szButtonID, False)
# City Tabs
for i in xrange( g_NumCityTabTypes ):
szButtonID = "CityTab" + str(i)
screen.show( szButtonID )
# Show Hurry buttons
for i in xrange(g_NumHurryInfos):
szButtonID = "Hurry" + str(i)
screen.show(szButtonID)
screen.enable(szButtonID, pHeadSelectedCity.canHurry(i, False))
# Show Conscript button
screen.show("Conscript")
if (pHeadSelectedCity.canConscript()):
screen.enable( "Conscript", True )
else:
screen.enable( "Conscript", False )
# Liberate Button Show
#screen.show("Liberate")
#if (-1 != pHeadSelectedCity.getLiberationPlayer()):
# screen.enable( "Liberate", True )
#else:
# screen.enable( "Liberate", False )
iCount = 0
iRow = 0
bFound = False
# Units to construct
for i in xrange(g_NumUnitClassInfos):
eLoopUnit = gc.getCivilizationInfo(pHeadSelectedCity.getCivilizationType()).getCivilizationUnits(i)
if pHeadSelectedCity.canTrain(eLoopUnit, False, True):
szButton = gc.getPlayer(pHeadSelectedCity.getOwner()).getUnitButton(eLoopUnit)
screen.appendMultiListButton("BottomButtonContainer", szButton, iRow, WidgetTypes.WIDGET_TRAIN, i, -1, False)
screen.show("BottomButtonContainer")
if not pHeadSelectedCity.canTrain(eLoopUnit, False, False):
screen.disableMultiListButton("BottomButtonContainer", iRow, iCount, szButton)
iCount += 1
bFound = True
iCount = 0
if bFound:
iRow += 1
bFound = False
# Buildings to construct
for i in xrange(g_NumBuildingClassInfos):
if not isLimitedWonderClass(i):
eLoopBuilding = gc.getCivilizationInfo(pHeadSelectedCity.getCivilizationType()).getCivilizationBuildings(i)
if pHeadSelectedCity.canConstruct(eLoopBuilding, False, True, False):
screen.appendMultiListButton("BottomButtonContainer", gc.getBuildingInfo(eLoopBuilding).getButton(), iRow, WidgetTypes.WIDGET_CONSTRUCT, i, -1, False)
screen.show("BottomButtonContainer")
if not pHeadSelectedCity.canConstruct(eLoopBuilding, False, False, False):
screen.disableMultiListButton("BottomButtonContainer", iRow, iCount, gc.getBuildingInfo(eLoopBuilding).getButton())
iCount += 1
bFound = True
iCount = 0
if bFound:
iRow += 1
bFound = False
# Wonders to construct
i = 0
for i in xrange(g_NumBuildingClassInfos):
if isLimitedWonderClass(i):
eLoopBuilding = gc.getCivilizationInfo(pHeadSelectedCity.getCivilizationType()).getCivilizationBuildings(i)
if pHeadSelectedCity.canConstruct(eLoopBuilding, False, True, False):
screen.appendMultiListButton("BottomButtonContainer", gc.getBuildingInfo(eLoopBuilding).getButton(), iRow, WidgetTypes.WIDGET_CONSTRUCT, i, -1, False)
screen.show("BottomButtonContainer")
if not pHeadSelectedCity.canConstruct(eLoopBuilding, False, False, False):
screen.disableMultiListButton("BottomButtonContainer", iRow, iCount, gc.getBuildingInfo(eLoopBuilding).getButton())
iCount += 1
bFound = True
iCount = 0
if bFound:
iRow += 1
bFound = False
# Projects to construct
i = 0
for i in xrange(g_NumProjectInfos):
if pHeadSelectedCity.canCreate(i, False, True):
screen.appendMultiListButton("BottomButtonContainer", gc.getProjectInfo(i).getButton(), iRow, WidgetTypes.WIDGET_CREATE, i, -1, False)
screen.show("BottomButtonContainer")
if not pHeadSelectedCity.canCreate(i, False, False):
screen.disableMultiListButton("BottomButtonContainer", iRow, iCount, gc.getProjectInfo(i).getButton())
iCount += 1
bFound = True
# Processes
i = 0
for i in xrange(g_NumProcessInfos):
if pHeadSelectedCity.canMaintain(i, False):
screen.appendMultiListButton("BottomButtonContainer", gc.getProcessInfo(i).getButton(), iRow, WidgetTypes.WIDGET_MAINTAIN, i, -1, False)
screen.show("BottomButtonContainer")
iCount += 1
bFound = True
screen.selectMultiList("BottomButtonContainer", CyInterface().getCityTabSelectionRow())
elif not CyEngine().isGlobeviewUp() and pHeadSelectedUnit and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY:
self.setMinimapButtonVisibility(True)
if CyInterface().getInterfaceMode() == InterfaceModeTypes.INTERFACEMODE_SELECTION:
if pHeadSelectedUnit.getOwner() == gc.getGame().getActivePlayer() and g_pSelectedUnit != pHeadSelectedUnit:
actions = CyInterface().getActionsToShow()
g_pSelectedUnit = pHeadSelectedUnit
iCount = 0
for i in actions:
screen.appendMultiListButton("BottomButtonContainer", gc.getActionInfo(i).getButton(), 0, WidgetTypes.WIDGET_ACTION, i, -1, False)
screen.show("BottomButtonContainer")
if not CyInterface().canHandleAction(i, False):
screen.disableMultiListButton("BottomButtonContainer", 0, iCount, gc.getActionInfo(i).getButton())
if pHeadSelectedUnit.isActionRecommended(i):
screen.enableMultiListPulse("BottomButtonContainer", True, 0, iCount)
else:
screen.enableMultiListPulse("BottomButtonContainer", False, 0, iCount)
iCount += 1
if CyInterface().canCreateGroup():
screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTONS_CREATEGROUP").getPath(), 0, WidgetTypes.WIDGET_CREATE_GROUP, -1, -1, False)
screen.show("BottomButtonContainer")
iCount += 1
if CyInterface().canDeleteGroup():
screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTONS_SPLITGROUP").getPath(), 0, WidgetTypes.WIDGET_DELETE_GROUP, -1, -1, False)
screen.show("BottomButtonContainer")
iCount += 1
### Great People Missions
iUnitType = g_pSelectedUnit.getUnitType()
iPlayer = g_pSelectedUnit.getOwner()
pPlayer = gc.getPlayer(iPlayer)
pPlot = g_pSelectedUnit.plot()
if pPlayer.isTurnActive():
#if iUnitType == gc.getInfoTypeForString('UNIT_ARTIST'):
# screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_PROPAGANDA").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 901, -1, False)
# iCount += 1
#elif iUnitType == gc.getInfoTypeForString('UNIT_DOCTOR'):
# screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_INOCULATION").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 911, -1, False)
# iCount += 1
# screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_HUMANITARIAN").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 912, -1, False)
# iCount += 1
#elif iUnitType == gc.getInfoTypeForString('UNIT_ENGINEER'):
# screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_RESUPPLY").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 921, -1, False)
# iCount += 1
#elif iUnitType == gc.getInfoTypeForString('UNIT_MERCHANT'):
# screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_EXPEDITION").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 931, -1, False)
# iCount += 1
if iUnitType == gc.getInfoTypeForString('UNIT_PROPHET'):
# screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_PILGRIMAGE").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 941, -1, False)
# iCount += 1
# screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_MEDIATION").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 942, -1, False)
# iCount += 1
### Founding Religions
if pPlot.isCity():
pCity = pPlot.getPlotCity()
if not pCity.isHolyCity():
if pCity.getOwner() == iPlayer:
iReligionCount = 0
lReligion = []
for iReligion in xrange(gc.getNumReligionInfos()):
if CyGame().isReligionFounded(iReligion):
iReligionCount += 1
else:
lReligion.append(iReligion)
if iReligionCount < HR.getReligionLimit():
for iReligion in lReligion:
screen.appendMultiListButton("BottomButtonContainer", gc.getReligionInfo(iReligion).getButton(), 0, WidgetTypes.WIDGET_FOUND_RELIGION, 1748, iReligion, False)
iCount += 1
screen.show("BottomButtonContainer")
#elif iUnitType == gc.getInfoTypeForString('UNIT_SCIENTIST'):
# screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_ENCYCLOPEDIA").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 751, -1, False)
# iCount += 1
# screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_MYSTERY").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 952, -1, False)
# iCount += 1
#elif iUnitType == gc.getInfoTypeForString('UNIT_SPY_GREAT'):
# screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_COUP").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 961, -1, False)
# iCount += 1
#elif iUnitType == gc.getInfoTypeForString('UNIT_GREAT_GENERAL'):
# screen.appendMultiListButton("BottomButtonContainer", CyArtFileMgr().getInterfaceArtInfo("INTERFACE_BUTTON_RALLY").getPath(), 0, WidgetTypes.WIDGET_PYTHON, 971, -1, False)
# iCount += 1
### Inquisition
elif iUnitType == gc.getInfoTypeForString('UNIT_INQUISITOR'):
if pPlot.isCity():
pCity = pPlot.getPlotCity()
iTeam = pPlayer.getTeam()
pTeam = gc.getTeam(iTeam)
iPlotTeam = pPlot.getTeam()
if iPlotTeam == iTeam:
for iReligion in xrange(gc.getNumReligionInfos()):
if pCity.isHasReligion(iReligion) and not pCity.isHolyCityByType(iReligion):
screen.appendMultiListButton("BottomButtonContainer", gc.getReligionInfo(iReligion).getButton(), 0, WidgetTypes.WIDGET_INQUISITION, 8586, iReligion, False)
iCount += 1
screen.show("BottomButtonContainer")
###
elif CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY:
self.setMinimapButtonVisibility(True)
return 0
# Will update the research buttons
def updateResearchButtons( self ):
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
for i in xrange( gc.getNumTechInfos() ):
szName = "ResearchButton" + str(i)
screen.hide( szName )
# Find out our resolution
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
#screen.hide("InterfaceOrnamentLeftLow")
#screen.hide("InterfaceOrnamentRightLow")
for i in xrange(gc.getNumReligionInfos()):
szName = "ReligionButton" + str(i)
screen.hide( szName )
i = 0
if ( CyInterface().shouldShowResearchButtons() and CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW ):
iCount = 0
for i in xrange( gc.getNumTechInfos() ):
if (gc.getActivePlayer().canResearch(i, False)):
if (iCount < 20):
szName = "ResearchButton" + str(i)
bDone = False
for j in xrange( gc.getNumReligionInfos() ):
if ( not bDone ):
if (gc.getReligionInfo(j).getTechPrereq() == i):
if not (gc.getGame().isReligionSlotTaken(j)):
szName = "ReligionButton" + str(j)
bDone = True
screen.show( szName )
self.setResearchButtonPosition(szName, iCount)
iCount = iCount + 1
return 0
def updateCitizenButtons(self):
''
pHeadSelectedCity = CyInterface().getHeadSelectedCity()
screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
for i in xrange(gc.getNumSpecialistInfos()):
screen.hide("IncreaseSpecialist" + str(i))
screen.hide("DecreaseSpecialist" + str(i))
screen.hide("SpecialistButton" + str(i))
screen.hide("SpecialistCount" + str(i))
screen.hide("GreatSpecialistButton" + str(i))
screen.hide("GreatSpecialistCount" + str(i))
if CyInterface().isCityScreenUp():
if pHeadSelectedCity and CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
lSpecialist = []
lGreatSpecialist = []
for i in xrange(gc.getNumSpecialistInfos()):
if gc.getSpecialistInfo(i).isVisible():
lSpecialist.append(i)
else:
lGreatSpecialist.append(i)
iX = xResolution - self.iSpecGPAnchorX
iY = yResolution - self.iSpecGPAnchorY + 10
for i in xrange(len(lSpecialist)):
iSpecialist = lSpecialist[i]
iSpecialistCount = pHeadSelectedCity.getSpecialistCount(iSpecialist)
iFreeSpecialistCount = pHeadSelectedCity.getFreeSpecialistCount(iSpecialist)
szBuffer = u"<font=2>" + str(iSpecialistCount + iFreeSpecialistCount) + u"</font>"
iY += iStackBarHeight
screen.setImageButton("SpecialistButton" + str(i), gc.getSpecialistInfo(iSpecialist).getTexture(), iX + 50, iY, 24, 24, WidgetTypes.WIDGET_CITIZEN, iSpecialist, 1)
screen.setText("SpecialistCount" + str(i), "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, iX + 50, iY, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_CITIZEN, iSpecialist, 1)
screen.setHitTest("SpecialistCount" + str(i), HitTestTypes.HITTEST_NOHIT)
if pHeadSelectedCity.getOwner() == CyGame().getActivePlayer() or CyGame().isDebugMode():
szName = "IncreaseSpecialist" + str(i)
screen.setButtonGFC(szName, u"", "", iX, iY + 2, 20, 20, WidgetTypes.WIDGET_CHANGE_SPECIALIST, iSpecialist, 1, ButtonStyles.BUTTON_STYLE_CITY_PLUS)
if not (pHeadSelectedCity.isSpecialistValid(iSpecialist, 1) and (pHeadSelectedCity.isCitizensAutomated() or iSpecialistCount < (pHeadSelectedCity.getPopulation() + pHeadSelectedCity.totalFreeSpecialists()))):
screen.enable(szName, False)
szName = "DecreaseSpecialist" + str(i)
screen.setButtonGFC(szName, u"", "", iX + 20, iY + 2, 20, 20, WidgetTypes.WIDGET_CHANGE_SPECIALIST, iSpecialist, -1, ButtonStyles.BUTTON_STYLE_CITY_MINUS)
if iSpecialistCount <= 0:
screen.enable(szName, False)
iY += 40
iXSpacing = ((xResolution - iX) / len(lGreatSpecialist)) + 1
for i in xrange(len(lGreatSpecialist)):
iSpecialist = lGreatSpecialist[i]
iSpecialistCount = pHeadSelectedCity.getSpecialistCount(iSpecialist)
iFreeSpecialistCount = pHeadSelectedCity.getFreeSpecialistCount(iSpecialist)
szBuffer = u"<font=2>" + str(iSpecialistCount + iFreeSpecialistCount) + u"</font>"
screen.setImageButton("GreatSpecialistButton" + str(i), gc.getSpecialistInfo(iSpecialist).getTexture(), iX, iY, 24, 24, WidgetTypes.WIDGET_CITIZEN, iSpecialist, 1)
screen.setText("GreatSpecialistCount" + str(i), "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, iX , iY, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_CITIZEN, iSpecialist, 1)
screen.setHitTest("GreatSpecialistCount" + str(i), HitTestTypes.HITTEST_NOHIT)
iX += iXSpacing
return 0
# Will update the game data strings
def updateGameDataStrings( self ):
''
screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
screen.hide("ResearchText")
screen.hide("GoldText")
screen.hide("TimeText")
screen.hide("ResearchBar")
screen.hide("EraText")
### Great Person Bar
screen.hide("GreatPersonBar")
screen.hide("GreatPersonBar-w")
screen.hide("GreatPersonBarText")
# BUG - Great General Bar - start
screen.hide("GreatGeneralBar")
screen.hide("GreatGeneralBarText")
# BUG - Great General Bar - end
# BUG - Bars on single line for higher resolution screens - start
screen.hide("GreatGeneralBar-w")
screen.hide("ResearchBar-w")
# BUG - Bars on single line for higher resolution screens - end
# BUG - Progress Bar - Tick Marks - start
self.pBarResearchBar_n.hide(screen)
self.pBarResearchBar_w.hide(screen)
# BUG - Progress Bar - Tick Marks - end
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
pHeadSelectedCity = CyInterface().getHeadSelectedCity()
if (pHeadSelectedCity):
ePlayer = pHeadSelectedCity.getOwner()
else:
ePlayer = gc.getGame().getActivePlayer()
if ( ePlayer < 0 or ePlayer >= gc.getMAX_PLAYERS() ):
return 0
for iI in xrange(CommerceTypes.NUM_COMMERCE_TYPES):
szString = "PercentText" + str(iI)
screen.hide(szString)
szString = "RateText" + str(iI)
screen.hide(szString)
if ( CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_ADVANCED_START):
# Percent of commerce
if (gc.getPlayer(ePlayer).isAlive()):
iCount = 0
for iI in xrange( CommerceTypes.NUM_COMMERCE_TYPES ):
eCommerce = (iI + 1) % CommerceTypes.NUM_COMMERCE_TYPES
if (gc.getPlayer(ePlayer).isCommerceFlexible(eCommerce) or (CyInterface().isCityScreenUp() and (eCommerce == CommerceTypes.COMMERCE_GOLD))):
szOutText = u"<font=2>%c:%d%%</font>" %(gc.getCommerceInfo(eCommerce).getChar(), gc.getPlayer(ePlayer).getCommercePercent(eCommerce))
szString = "PercentText" + str(iI)
screen.setLabel( szString, "Background", szOutText, CvUtil.FONT_LEFT_JUSTIFY, 14, 50 + (iCount * 19), -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.show( szString )
if not CyInterface().isCityScreenUp():
szOutText = u"<font=2>" + localText.getText("TXT_KEY_MISC_POS_GOLD_PER_TURN", (gc.getPlayer(ePlayer).getCommerceRate(CommerceTypes(eCommerce)), )) + u"</font>"
szString = "RateText" + str(iI)
# BUG - Min/Max Sliders - start
if MainOpt.isShowMinMaxCommerceButtons():
iMinMaxAdjustX = 40
else:
iMinMaxAdjustX = 0
screen.setLabel( szString, "Background", szOutText, CvUtil.FONT_LEFT_JUSTIFY, 112 + iMinMaxAdjustX, 50 + (iCount * 19), -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
# BUG - Min/Max Sliders - end
screen.show( szString )
iCount = iCount + 1;
self.updateTimeText()
screen.setLabel( "TimeText", "Background", g_szTimeText, CvUtil.FONT_RIGHT_JUSTIFY, xResolution - 56, 6, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.show("TimeText")
if (gc.getPlayer(ePlayer).isAlive()):
# BUG - Gold Rate Warning - start
if MainOpt.isGoldRateWarning():
pPlayer = gc.getPlayer(ePlayer)
iGold = pPlayer.getGold()
iGoldRate = pPlayer.calculateGoldRate()
if iGold < 0:
szText = BugUtil.getText("TXT_KEY_MISC_NEG_GOLD", iGold)
if iGoldRate != 0:
if iGold + iGoldRate >= 0:
szText += BugUtil.getText("TXT_KEY_MISC_POS_GOLD_PER_TURN", iGoldRate)
elif iGoldRate >= 0:
szText += BugUtil.getText("TXT_KEY_MISC_POS_WARNING_GOLD_PER_TURN", iGoldRate)
else:
szText += BugUtil.getText("TXT_KEY_MISC_NEG_GOLD_PER_TURN", iGoldRate)
else:
szText = BugUtil.getText("TXT_KEY_MISC_POS_GOLD", iGold)
if iGoldRate != 0:
if iGoldRate >= 0:
szText += BugUtil.getText("TXT_KEY_MISC_POS_GOLD_PER_TURN", iGoldRate)
elif iGold + iGoldRate >= 0:
szText += BugUtil.getText("TXT_KEY_MISC_NEG_WARNING_GOLD_PER_TURN", iGoldRate)
else:
szText += BugUtil.getText("TXT_KEY_MISC_NEG_GOLD_PER_TURN", iGoldRate)
if pPlayer.isStrike():
szText += BugUtil.getPlainText("TXT_KEY_MISC_STRIKE")
else:
szText = CyGameTextMgr().getGoldStr(ePlayer)
# BUG - Gold Rate Warning - end
screen.setLabel( "GoldText", "Background", szText, CvUtil.FONT_LEFT_JUSTIFY, 12, 6, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.show("GoldText")
if (((gc.getPlayer(ePlayer).calculateGoldRate() != 0) and not (gc.getPlayer(ePlayer).isAnarchy())) or (gc.getPlayer(ePlayer).getGold() != 0)):
screen.show("GoldText")
### Era Text
szText = localText.getText("TXT_KEY_BUG_ERA", (gc.getEraInfo(gc.getPlayer(ePlayer).getCurrentEra()).getDescription(), ))
screen.setLabel("EraText", "Background", szText, CvUtil.FONT_RIGHT_JUSTIFY, 250, 6, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
screen.show("EraText")
### Research Bar
if gc.getPlayer(ePlayer).isAnarchy():
if self.xResolution >= 1440:
xCoord = 268 + (xResolution - 1440) / 2 + 84 + 6 + 487 / 2
else:
xCoord = screen.centerX(512)
yCoord = 5 # Ruff: this use to be 3 but I changed it so it lines up with the Great Person Bar
szText = localText.getText("INTERFACE_ANARCHY", (gc.getPlayer(ePlayer).getAnarchyTurns(), ))
screen.setText("ResearchText", "Background", szText, CvUtil.FONT_CENTER_JUSTIFY, xCoord, yCoord, -0.4, FontTypes.GAME_FONT, WidgetTypes.WIDGET_RESEARCH, -1, -1)
if gc.getPlayer(ePlayer).getCurrentResearch() != -1:
screen.show("ResearchText")
else:
screen.hide("ResearchText")
elif gc.getPlayer(ePlayer).getCurrentResearch() != -1:
szText = CyGameTextMgr().getResearchStr(ePlayer)
if self.xResolution >= 1440:
szResearchBar = "ResearchBar-w"
xCoord = 268 + (xResolution - 1440) / 2 + 84 + 6 + 487 / 2
else:
szResearchBar = "ResearchBar"
xCoord = screen.centerX(512)
yCoord = 5 # Ruff: this use to be 3 but I changed it so it lines up with the Great Person Bar
screen.setText("ResearchText", "Background", szText, CvUtil.FONT_CENTER_JUSTIFY, xCoord, yCoord, -0.4, FontTypes.GAME_FONT, WidgetTypes.WIDGET_RESEARCH, -1, -1)
screen.show("ResearchText")
researchProgress = gc.getTeam(gc.getPlayer(ePlayer).getTeam()).getResearchProgress(gc.getPlayer(ePlayer).getCurrentResearch())
overflowResearch = (gc.getPlayer(ePlayer).getOverflowResearch() * gc.getPlayer(ePlayer).calculateResearchModifier(gc.getPlayer(ePlayer).getCurrentResearch())) / 100
researchCost = gc.getTeam(gc.getPlayer(ePlayer).getTeam()).getResearchCost(gc.getPlayer(ePlayer).getCurrentResearch())
researchRate = gc.getPlayer(ePlayer).calculateResearchRate(-1)
screen.setBarPercentage( szResearchBar, InfoBarTypes.INFOBAR_STORED, float(researchProgress + overflowResearch) / researchCost )
if researchCost > researchProgress + overflowResearch:
screen.setBarPercentage(szResearchBar, InfoBarTypes.INFOBAR_RATE, float(researchRate) / (researchCost - researchProgress - overflowResearch))
else:
screen.setBarPercentage(szResearchBar, InfoBarTypes.INFOBAR_RATE, 0.0)
screen.show(szResearchBar)
# BUG - Progress Bar - Tick Marks - start
if MainOpt.isShowpBarTickMarks():
if szResearchBar == "ResearchBar":
self.pBarResearchBar_n.drawTickMarks(screen, researchProgress + overflowResearch, researchCost, researchRate, researchRate, False)
else:
self.pBarResearchBar_w.drawTickMarks(screen, researchProgress + overflowResearch, researchCost, researchRate, researchRate, False)
# BUG - Progress Bar - Tick Marks - end
self.updateGreatPersonBar(screen)
self.updateGreatGeneralBar(screen)
return 0
def updateGreatPersonBar(self, screen):
''
if self.xResolution >= 1440 or not CyInterface().isCityScreenUp():
pPlayer = gc.getPlayer(CyGame().getActivePlayer())
GPCityList = HR.getGreatPersonTopCities(pPlayer, 1)
if GPCityList:
iTurns = GPCityList[0][0]
iGP = GPCityList[0][1]
displayCity = GPCityList[0][2]
else:
iTurns = -1
iGP = -1
displayCity = None
if self.xResolution >= 1440:
szGreatPersonBar = "GreatPersonBar-w"
xCoord = 268 + (self.xResolution - 1440) / 2 + 84 + 6 + 487 + 6 + 320 / 2
yCoord = 5
else:
szGreatPersonBar = "GreatPersonBar"
xCoord = 268 + (self.xResolution - 1024) / 2 + 100 + 7 + 380 / 2
yCoord = 30
if displayCity and iTurns > -1:
szText = CyTranslator().getText('TXT_KEY_INTERFACE_GREAT_PEOPLE_BAR', (gc.getUnitInfo(iGP).getDescription(), displayCity.getName(), iTurns))
else:
szText = CyTranslator().getText('TXT_KEY_INTERFACE_GREAT_PEOPLE_BAR_EMPTY', ())
szText = u"<font=2>%s</font>" % (szText)
screen.setText("GreatPersonBarText", "Background", szText, CvUtil.FONT_CENTER_JUSTIFY, xCoord, yCoord, -0.4, FontTypes.GAME_FONT, WidgetTypes.WIDGET_HELP_GREAT_PERSON_BAR, -1, -1)
if not displayCity:
screen.setHitTest("GreatPersonBarText", HitTestTypes.HITTEST_NOHIT)
screen.show("GreatPersonBarText")
if displayCity:
fThreshold = float(pPlayer.greatPeopleThreshold(False))
fRate = float(HR.getGreatPersonRate(displayCity, iGP))
fFirst = float(HR.getGreatPersonProgress(displayCity, iGP)) / fThreshold
screen.setBarPercentage(szGreatPersonBar, InfoBarTypes.INFOBAR_STORED, fFirst)
if fFirst == 1:
screen.setBarPercentage(szGreatPersonBar, InfoBarTypes.INFOBAR_RATE, fRate / fThreshold)
else:
screen.setBarPercentage(szGreatPersonBar, InfoBarTypes.INFOBAR_RATE, fRate / fThreshold / (1 - fFirst))
else:
screen.setBarPercentage(szGreatPersonBar, InfoBarTypes.INFOBAR_STORED, 0)
screen.setBarPercentage(szGreatPersonBar, InfoBarTypes.INFOBAR_RATE, 0)
screen.show(szGreatPersonBar)
def updateGreatGeneralBar(self, screen):
''
if self.xResolution >= 1440 or not CyInterface().isCityScreenUp():
pPlayer = gc.getActivePlayer()
iCombatExp = pPlayer.getCombatExperience()
iThresholdExp = pPlayer.greatPeopleThreshold(True)
iNeededExp = iThresholdExp - iCombatExp
szText = u"<font=2>%s</font>" %(GGUtil.getGreatGeneralText(iNeededExp))
if self.xResolution >= 1440:
szGreatGeneralBar = "GreatGeneralBar-w"
xCoord = 268 + (self.xResolution - 1440) / 2 + 84 / 2
yCoord = 5
else:
szGreatGeneralBar = "GreatGeneralBar"
xCoord = 268 + (self.xResolution - 1024) / 2 + 100 / 2
yCoord = 32
screen.setLabel("GreatGeneralBarText", "Background", szText, CvUtil.FONT_CENTER_JUSTIFY, xCoord, yCoord, -0.4, FontTypes.GAME_FONT, WidgetTypes.WIDGET_HELP_GREAT_GENERAL, -1, -1)
screen.show("GreatGeneralBarText")
fProgress = float(iCombatExp) / float(iThresholdExp)
screen.setBarPercentage(szGreatGeneralBar, InfoBarTypes.INFOBAR_STORED, fProgress)
screen.show(szGreatGeneralBar)
def updateTimeText( self ):
global g_szTimeText
ePlayer = gc.getGame().getActivePlayer()
# BUG - NJAGC - start
if (ClockOpt.isEnabled()):
"""
Format: Time - GameTurn/Total Percent - GA (TurnsLeft) Date
Ex: 10:37 - 220/660 33% - GA (3) 1925
"""
if (g_bShowTimeTextAlt):
bShowTime = ClockOpt.isShowAltTime()
bShowGameTurn = ClockOpt.isShowAltGameTurn()
bShowTotalTurns = ClockOpt.isShowAltTotalTurns()
bShowPercentComplete = ClockOpt.isShowAltPercentComplete()
bShowDateGA = ClockOpt.isShowAltDateGA()
else:
bShowTime = ClockOpt.isShowTime()
bShowGameTurn = ClockOpt.isShowGameTurn()
bShowTotalTurns = ClockOpt.isShowTotalTurns()
bShowPercentComplete = ClockOpt.isShowPercentComplete()
bShowDateGA = ClockOpt.isShowDateGA()
if (not gc.getGame().getMaxTurns() > 0):
bShowTotalTurns = False
bShowPercentComplete = False
bFirst = True
g_szTimeText = ""
if (bShowTime):
bFirst = False
g_szTimeText += getClockText()
if (bShowGameTurn):
if (bFirst):
bFirst = False
else:
g_szTimeText += u" - "
g_szTimeText += u"%d" %( gc.getGame().getElapsedGameTurns() )
if (bShowTotalTurns):
g_szTimeText += u"/%d" %( gc.getGame().getMaxTurns() )
if (bShowPercentComplete):
if (bFirst):
bFirst = False
else:
if (not bShowGameTurn):
g_szTimeText += u" - "
else:
g_szTimeText += u" "
g_szTimeText += u"%2.2f%%" %( 100 *(float(gc.getGame().getElapsedGameTurns()) / float(gc.getGame().getMaxTurns())) )
if (bShowDateGA):
if (bFirst):
bFirst = False
else:
g_szTimeText += u" - "
szDateGA = unicode(CyGameTextMgr().getInterfaceTimeStr(ePlayer))
if(ClockOpt.isUseEraColor()):
iEraColor = ClockOpt.getEraColor(gc.getEraInfo(gc.getPlayer(ePlayer).getCurrentEra()).getType())
if (iEraColor >= 0):
szDateGA = localText.changeTextColor(szDateGA, iEraColor)
g_szTimeText += szDateGA
else:
"""
Original Clock
Format: Time - 'Turn' GameTurn - GA (TurnsLeft) Date
Ex: 10:37 - Turn 220 - GA (3) 1925
"""
g_szTimeText = localText.getText("TXT_KEY_TIME_TURN", (CyGame().getGameTurn(), )) + u" - " + unicode(CyGameTextMgr().getInterfaceTimeStr(ePlayer))
if (CyUserProfile().isClockOn()):
g_szTimeText = getClockText() + u" - " + g_szTimeText
# BUG - NJAGC - end
def updateCityScreen( self ):
''
global MAX_DISPLAYABLE_BUILDINGS
global MAX_DISPLAYABLE_TRADE_ROUTES
global MAX_BONUS_ROWS
global g_iNumTradeRoutes
global g_iNumBuildings
global g_iNumLeftBonus
global g_iNumCenterBonus
global g_iNumRightBonus
screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
pHeadSelectedCity = CyInterface().getHeadSelectedCity()
# Top Panel
screen.hide("CityNameText")
screen.hide("PopulationBar")
screen.hide("PopulationText")
screen.hide("PopulationInputText")
screen.hide("HappinessText")
screen.hide("HealthText")
screen.hide("CityScrollPlus")
screen.hide("CityScrollMinus")
screen.hide("DefenseText")
screen.hide("ProductionBar")
screen.hide("ProductionText")
screen.hide("ProductionInputText")
# Left Panel
for i in xrange(CommerceTypes.NUM_COMMERCE_TYPES):
szName = "CityPercentText" + str(i)
screen.hide(szName)
screen.hide("MaintenanceText")
screen.hide("MaintenanceAmountText")
screen.hide("TradeRouteListLabel")
screen.hide("TradeRouteListBackground")
screen.hide("TradeRouteTable")
screen.hide("RawYieldsTrade0")
screen.hide("RawYieldsFood1")
screen.hide("RawYieldsProduction2")
screen.hide("RawYieldsCommerce3")
screen.hide("RawYieldsWorkedTiles4")
screen.hide("RawYieldsCityTiles5")
screen.hide("RawYieldsOwnedTiles6")
screen.hide("BuildingListLabel")
screen.hide("BuildingListBackground")
screen.hide("BuildingListTable")
screen.hide("CultureBar")
screen.hide("CultureText")
screen.hide("NationalityBar")
screen.hide("NationalityText")
screen.hide("DissentBar")
screen.hide("DissentText")
# Centre
screen.hide("CityReligions")
screen.hide("CityCorporations")
# Right Panel
screen.hide("ResourceTable")
screen.hide("ResourceFilter")
screen.hide("ResourceFilter2")
screen.hide("SpecialistBackground")
screen.hide("SpecialistLabel")
screen.hide("GreatPeopleThreshold")
for i in xrange(len(HR.GreatPeople)):
szName = "CityGPBar" + str(i)
screen.hide(szName)
szName = "CityGPText" + str(i)
screen.hide(szName)
# BUG - Progress Bar Tick Marks
self.pBarPopulationBar.hide(screen)
self.pBarProductionBar.hide(screen)
self.pBarProductionBar_Whip.hide(screen)
# Update City Screen
if CyInterface().isCityScreenUp():
if pHeadSelectedCity:
screen.show("InterfaceTopLeftBackgroundWidget")
screen.show("InterfaceTopRightBackgroundWidget")
screen.show("InterfaceCenterLeftBackgroundWidget")
screen.show("CityScreenTopWidget")
screen.show("CityNameBackground")
screen.show("TopCityPanelLeft")
screen.show("TopCityPanelRight")
screen.show("CityScreenAdjustPanel")
screen.show("InterfaceCenterRightBackgroundWidget")
if pHeadSelectedCity.getTeam() == gc.getGame().getActiveTeam():
if gc.getActivePlayer().getNumCities() > 1:
screen.show("CityScrollPlus")
screen.show("CityScrollMinus")
### Help Text Area
screen.setHelpTextArea(390, FontTypes.SMALL_FONT, 0, 0, -2.2, True, CyArtFileMgr().getInterfaceArtInfo("POPUPS_BACKGROUND_TRANSPARENT").getPath(), True, True, CvUtil.FONT_LEFT_JUSTIFY, 0)
### Name Display
szBuffer = u"<font=4>"
if pHeadSelectedCity.isCapital():
szBuffer += u"%c" %(CyGame().getSymbolID(FontSymbols.STAR_CHAR))
elif pHeadSelectedCity.isGovernmentCenter():
szBuffer += u"%c" %(CyGame().getSymbolID(FontSymbols.SILVER_STAR_CHAR))
#if pHeadSelectedCity.isPower():
# szBuffer += u"%c" %(CyGame().getSymbolID(FontSymbols.POWER_CHAR))
szBuffer += u"%s: %d" %(pHeadSelectedCity.getName(), pHeadSelectedCity.getPopulation())
if pHeadSelectedCity.isOccupation():
szBuffer += u" (%c:%d)" %(CyGame().getSymbolID(FontSymbols.OCCUPATION_CHAR), pHeadSelectedCity.getOccupationTimer())
szBuffer += u"</font>"
screen.setText("CityNameText", "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, screen.centerX(512), 35, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_CITY_NAME, -1, -1)
screen.setStyle("CityNameText", "Button_Stone_Style")
screen.show("CityNameText")
### Defense Display
iDefenseModifier = pHeadSelectedCity.getDefenseModifier(False)
if iDefenseModifier != 0:
szBuffer = localText.getText("TXT_KEY_MAIN_CITY_DEFENSE", (CyGame().getSymbolID(FontSymbols.DEFENSE_CHAR), iDefenseModifier))
if pHeadSelectedCity.getDefenseDamage() > 0:
szTempBuffer = u" (%d%%)" % (((gc.getMAX_CITY_DEFENSE_DAMAGE() - pHeadSelectedCity.getDefenseDamage()) * 100 ) / gc.getMAX_CITY_DEFENSE_DAMAGE())
szBuffer = szBuffer + szTempBuffer
szNewBuffer = "<font=4>"
szNewBuffer = szNewBuffer + szBuffer
szNewBuffer = szNewBuffer + "</font>"
screen.setLabel("DefenseText", "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, self.xResolution - 270, 40, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_HELP_DEFENSE, -1, -1)
screen.show("DefenseText")
iFoodDifference = pHeadSelectedCity.foodDifference(True)
### HR - Pyramids
bWorker = pHeadSelectedCity.getProductionUnit() == gc.getInfoTypeForString('UNIT_WORKER') or pHeadSelectedCity.getProductionUnit() == gc.getInfoTypeForString('UNIT_LABOURER')
if not pHeadSelectedCity.isDisorder():
iPlayer = pHeadSelectedCity.getOwner()
if gc.getPlayer(iPlayer).getBuildingClassCount(gc.getInfoTypeForString('BUILDINGCLASS_PYRAMID')) == 1:
if bWorker:
iFoodDifference += pHeadSelectedCity.getYieldRate(0) - pHeadSelectedCity.foodConsumption(False, 0)
###
iProductionDiffNoFood = pHeadSelectedCity.getCurrentProductionDifference(True, True)
iProductionDiffJustFood = (pHeadSelectedCity.getCurrentProductionDifference(False, True) - iProductionDiffNoFood)
### BUG - Food Assist
if (CityUtil.willGrowThisTurn(pHeadSelectedCity) or (iFoodDifference != 0) or not (pHeadSelectedCity.isFoodProduction())):
if (CityUtil.willGrowThisTurn(pHeadSelectedCity)):
szBuffer = localText.getText("INTERFACE_CITY_GROWTH", ())
elif (iFoodDifference > 0):
### HR - Pyramids
iFoodTurnsLeft = (pHeadSelectedCity.growthThreshold() - pHeadSelectedCity.getFood()) / iFoodDifference
if (pHeadSelectedCity.growthThreshold() - pHeadSelectedCity.getFood()) % iFoodDifference > 0:
iFoodTurnsLeft += 1
szBuffer = localText.getText("INTERFACE_CITY_GROWING", (iFoodTurnsLeft, ))
###
elif iFoodDifference < 0:
if CityScreenOpt.isShowFoodAssist():
iTurnsToStarve = pHeadSelectedCity.getFood() / -iFoodDifference + 1
if iTurnsToStarve > 1:
szBuffer = localText.getText("INTERFACE_CITY_SHRINKING", (iTurnsToStarve, ))
else:
szBuffer = localText.getText("INTERFACE_CITY_STARVING", ())
else:
szBuffer = localText.getText("INTERFACE_CITY_STARVING", ())
###
else:
szBuffer = localText.getText("INTERFACE_CITY_STAGNANT", ())
screen.setLabel( "PopulationText", "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, screen.centerX(512), iCityCenterRow1Y, -1.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.setHitTest( "PopulationText", HitTestTypes.HITTEST_NOHIT )
screen.show("PopulationText")
### HR - Pyramids
if not pHeadSelectedCity.isDisorder():
if not pHeadSelectedCity.isFoodProduction() or (gc.getPlayer(iPlayer).getBuildingClassCount(gc.getInfoTypeForString("BUILDINGCLASS_PYRAMID")) == 1 and bWorker):
### BUG - Food Assist
if (CityScreenOpt.isShowFoodAssist()):
iFoodYield = pHeadSelectedCity.getYieldRate(YieldTypes.YIELD_FOOD)
iFoodEaten = pHeadSelectedCity.foodConsumption(False, 0)
if iFoodYield == iFoodEaten:
szBuffer = localText.getText("INTERFACE_CITY_FOOD_STAGNATE", (iFoodYield, iFoodEaten))
elif iFoodYield > iFoodEaten:
szBuffer = localText.getText("INTERFACE_CITY_FOOD_GROW", (iFoodYield, iFoodEaten, iFoodYield - iFoodEaten))
else:
szBuffer = localText.getText("INTERFACE_CITY_FOOD_SHRINK", (iFoodYield, iFoodEaten, iFoodYield - iFoodEaten))
else:
szBuffer = u"%d%c - %d%c" %(pHeadSelectedCity.getYieldRate(YieldTypes.YIELD_FOOD), gc.getYieldInfo(YieldTypes.YIELD_FOOD).getChar(), pHeadSelectedCity.foodConsumption(False, 0), CyGame().getSymbolID(FontSymbols.EATEN_FOOD_CHAR))
###
screen.setLabel("PopulationInputText", "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, iCityCenterRow1X - 6, iCityCenterRow1Y, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
screen.show("PopulationInputText")
else:
if not pHeadSelectedCity.isFoodProduction():
szBuffer = u"%d%c" %(iFoodDifference, gc.getYieldInfo(YieldTypes.YIELD_FOOD).getChar())
screen.setLabel( "PopulationInputText", "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, iCityCenterRow1X - 6, iCityCenterRow1Y, -0.3, FontTypes.GAME_FONT,
*BugDll.widget("WIDGET_FOOD_MOD_HELP", -1, -1) )
screen.show("PopulationInputText")
###
if ((pHeadSelectedCity.badHealth(False) > 0) or (pHeadSelectedCity.goodHealth() >= 0)):
if (pHeadSelectedCity.healthRate(False, 0) < 0):
szBuffer = localText.getText("INTERFACE_CITY_HEALTH_BAD", (pHeadSelectedCity.goodHealth(), pHeadSelectedCity.badHealth(False), pHeadSelectedCity.healthRate(False, 0)))
elif (pHeadSelectedCity.badHealth(False) > 0):
szBuffer = localText.getText("INTERFACE_CITY_HEALTH_GOOD", (pHeadSelectedCity.goodHealth(), pHeadSelectedCity.badHealth(False)))
else:
szBuffer = localText.getText("INTERFACE_CITY_HEALTH_GOOD_NO_BAD", (pHeadSelectedCity.goodHealth(), ))
screen.setLabel( "HealthText", "Background", szBuffer, CvUtil.FONT_LEFT_JUSTIFY, self.xResolution - iCityCenterRow1X + 6, iCityCenterRow1Y, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_HELP_HEALTH, -1, -1 )
screen.show("HealthText")
if iFoodDifference < 0:
if pHeadSelectedCity.getFood() + iFoodDifference > 0:
iDeltaFood = pHeadSelectedCity.getFood() + iFoodDifference
else:
iDeltaFood = 0
if ( -iFoodDifference < pHeadSelectedCity.getFood() ):
iExtraFood = -iFoodDifference
else:
iExtraFood = pHeadSelectedCity.getFood()
screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_STORED, float(iDeltaFood) / pHeadSelectedCity.growthThreshold() )
screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_RATE, 0.0 )
if ( pHeadSelectedCity.growthThreshold() > iDeltaFood):
screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_RATE_EXTRA, float(iExtraFood) / (pHeadSelectedCity.growthThreshold() - iDeltaFood) )
else:
screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_RATE_EXTRA, 0.0)
else:
screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_STORED, float(pHeadSelectedCity.getFood()) / pHeadSelectedCity.growthThreshold() )
if ( pHeadSelectedCity.growthThreshold() > pHeadSelectedCity.getFood()):
screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_RATE, float(iFoodDifference) / (pHeadSelectedCity.growthThreshold() - pHeadSelectedCity.getFood()) )
else:
screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_RATE, 0.0 )
screen.setBarPercentage( "PopulationBar", InfoBarTypes.INFOBAR_RATE_EXTRA, 0.0 )
screen.show("PopulationBar")
### BUG - Progress Bar Tick Marks
if MainOpt.isShowpBarTickMarks():
self.pBarPopulationBar.drawTickMarks(screen, pHeadSelectedCity.getFood(), pHeadSelectedCity.growthThreshold(), iFoodDifference, iFoodDifference, False)
###
if (pHeadSelectedCity.getOrderQueueLength() > 0):
if (pHeadSelectedCity.isProductionProcess()):
szBuffer = pHeadSelectedCity.getProductionName()
# BUG - Whip Assist - start
else:
HURRY_WHIP = gc.getInfoTypeForString("HURRY_POPULATION")
HURRY_BUY = gc.getInfoTypeForString("HURRY_GOLD")
if (CityScreenOpt.isShowWhipAssist() and pHeadSelectedCity.canHurry(HURRY_WHIP, False)):
iHurryPop = pHeadSelectedCity.hurryPopulation(HURRY_WHIP)
iOverflow = pHeadSelectedCity.hurryProduction(HURRY_WHIP) - pHeadSelectedCity.productionLeft()
if CityScreenOpt.isWhipAssistOverflowCountCurrentProduction():
iOverflow += pHeadSelectedCity.getCurrentProductionDifference(False, True)
iMaxOverflow = max(pHeadSelectedCity.getProductionNeeded(), pHeadSelectedCity.getCurrentProductionDifference(False, False))
iLost = max(0, iOverflow - iMaxOverflow)
iOverflow = min(iOverflow, iMaxOverflow)
iItemModifier = pHeadSelectedCity.getProductionModifier()
iBaseModifier = pHeadSelectedCity.getBaseYieldRateModifier(YieldTypes.YIELD_PRODUCTION, 0)
iTotalModifier = pHeadSelectedCity.getBaseYieldRateModifier(YieldTypes.YIELD_PRODUCTION, iItemModifier)
iLost *= iBaseModifier
iLost /= max(1, iTotalModifier)
iOverflow = (iBaseModifier * iOverflow) / max(1, iTotalModifier)
if iLost > 0:
if pHeadSelectedCity.isProductionUnit():
iGoldPercent = gc.getDefineINT("MAXED_UNIT_GOLD_PERCENT")
elif pHeadSelectedCity.isProductionBuilding():
iGoldPercent = gc.getDefineINT("MAXED_BUILDING_GOLD_PERCENT")
elif pHeadSelectedCity.isProductionProject():
iGoldPercent = gc.getDefineINT("MAXED_PROJECT_GOLD_PERCENT")
else:
iGoldPercent = 0
iOverflowGold = iLost * iGoldPercent / 100
szBuffer = localText.getText("INTERFACE_CITY_PRODUCTION_WHIP_PLUS_GOLD", (pHeadSelectedCity.getProductionNameKey(), pHeadSelectedCity.getProductionTurnsLeft(), iHurryPop, iOverflow, iOverflowGold))
else:
szBuffer = localText.getText("INTERFACE_CITY_PRODUCTION_WHIP", (pHeadSelectedCity.getProductionNameKey(), pHeadSelectedCity.getProductionTurnsLeft(), iHurryPop, iOverflow))
elif (CityScreenOpt.isShowWhipAssist() and pHeadSelectedCity.canHurry(HURRY_BUY, False)):
iHurryCost = pHeadSelectedCity.hurryGold(HURRY_BUY)
szBuffer = localText.getText("INTERFACE_CITY_PRODUCTION_BUY", (pHeadSelectedCity.getProductionNameKey(), pHeadSelectedCity.getProductionTurnsLeft(), iHurryCost))
else:
szBuffer = localText.getText("INTERFACE_CITY_PRODUCTION", (pHeadSelectedCity.getProductionNameKey(), pHeadSelectedCity.getProductionTurnsLeft()))
# BUG - Whip Assist - end
screen.setLabel( "ProductionText", "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, screen.centerX(512), iCityCenterRow2Y, -1.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.setHitTest( "ProductionText", HitTestTypes.HITTEST_NOHIT )
screen.show("ProductionText")
if (pHeadSelectedCity.isProductionProcess()):
szBuffer = u"%d%c" %(pHeadSelectedCity.getYieldRate(YieldTypes.YIELD_PRODUCTION), gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getChar())
elif (pHeadSelectedCity.isFoodProduction() and (iProductionDiffJustFood > 0)):
szBuffer = u"%d%c + %d%c" %(iProductionDiffJustFood, gc.getYieldInfo(YieldTypes.YIELD_FOOD).getChar(), iProductionDiffNoFood, gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getChar())
else:
szBuffer = u"%d%c" %(iProductionDiffNoFood, gc.getYieldInfo(YieldTypes.YIELD_PRODUCTION).getChar())
screen.setLabel( "ProductionInputText", "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, iCityCenterRow1X - 6, iCityCenterRow2Y, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_PRODUCTION_MOD_HELP, -1, -1 )
screen.show("ProductionInputText")
if ((pHeadSelectedCity.happyLevel() >= 0) or (pHeadSelectedCity.unhappyLevel(0) > 0)):
if (pHeadSelectedCity.isDisorder()):
szBuffer = u"%d%c" %(pHeadSelectedCity.angryPopulation(0), CyGame().getSymbolID(FontSymbols.ANGRY_POP_CHAR))
elif (pHeadSelectedCity.angryPopulation(0) > 0):
szBuffer = localText.getText("INTERFACE_CITY_UNHAPPY", (pHeadSelectedCity.happyLevel(), pHeadSelectedCity.unhappyLevel(0), pHeadSelectedCity.angryPopulation(0)))
elif (pHeadSelectedCity.unhappyLevel(0) > 0):
szBuffer = localText.getText("INTERFACE_CITY_HAPPY", (pHeadSelectedCity.happyLevel(), pHeadSelectedCity.unhappyLevel(0)))
else:
szBuffer = localText.getText("INTERFACE_CITY_HAPPY_NO_UNHAPPY", (pHeadSelectedCity.happyLevel(), ))
### BUG - Anger Display
if (CityScreenOpt.isShowAngerCounter()
and pHeadSelectedCity.getTeam() == gc.getGame().getActiveTeam()):
iAngerTimer = max(pHeadSelectedCity.getHurryAngerTimer(), pHeadSelectedCity.getConscriptAngerTimer())
if iAngerTimer > 0:
szBuffer += u" (%i)" % iAngerTimer
###
screen.setLabel( "HappinessText", "Background", szBuffer, CvUtil.FONT_LEFT_JUSTIFY, self.xResolution - iCityCenterRow1X + 6, iCityCenterRow2Y, -0.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_HELP_HAPPINESS, -1, -1 )
screen.show("HappinessText")
if (not(pHeadSelectedCity.isProductionProcess())):
iNeeded = pHeadSelectedCity.getProductionNeeded()
iStored = pHeadSelectedCity.getProduction()
screen.setBarPercentage( "ProductionBar", InfoBarTypes.INFOBAR_STORED, float(iStored) / iNeeded )
if iNeeded > iStored:
screen.setBarPercentage( "ProductionBar", InfoBarTypes.INFOBAR_RATE, float(iProductionDiffNoFood) / (iNeeded - iStored) )
else:
screen.setBarPercentage( "ProductionBar", InfoBarTypes.INFOBAR_RATE, 0.0 )
if iNeeded > iStored + iProductionDiffNoFood:
screen.setBarPercentage( "ProductionBar", InfoBarTypes.INFOBAR_RATE_EXTRA, float(iProductionDiffJustFood) / (iNeeded - iStored - iProductionDiffNoFood) )
else:
screen.setBarPercentage( "ProductionBar", InfoBarTypes.INFOBAR_RATE_EXTRA, 0.0)
screen.show("ProductionBar")
### BUG - Progress Bar Tick Marks
if MainOpt.isShowpBarTickMarks():
if (pHeadSelectedCity.isProductionProcess()):
iFirst = 0
iRate = 0
elif (pHeadSelectedCity.isFoodProduction() and (iProductionDiffJustFood > 0)):
iFirst = pHeadSelectedCity.getCurrentProductionDifference(False, True)
iRate = pHeadSelectedCity.getCurrentProductionDifference(False, False)
else:
iFirst = pHeadSelectedCity.getCurrentProductionDifference(True, True)
iRate = pHeadSelectedCity.getCurrentProductionDifference(True, False)
self.pBarProductionBar.drawTickMarks(screen, pHeadSelectedCity.getProduction(), pHeadSelectedCity.getProductionNeeded(), iFirst, iRate, False)
HURRY_WHIP = gc.getInfoTypeForString("HURRY_POPULATION")
if pHeadSelectedCity.canHurry(HURRY_WHIP, False):
iRate = pHeadSelectedCity.hurryProduction(HURRY_WHIP) / pHeadSelectedCity.hurryPopulation(HURRY_WHIP)
self.pBarProductionBar_Whip.drawTickMarks(screen, pHeadSelectedCity.getProduction(), pHeadSelectedCity.getProductionNeeded(), iFirst, iRate, True)
###
iCount = 0
for i in xrange(CommerceTypes.NUM_COMMERCE_TYPES):
eCommerce = (i + 1) % CommerceTypes.NUM_COMMERCE_TYPES
if ((gc.getPlayer(pHeadSelectedCity.getOwner()).isCommerceFlexible(eCommerce)) or (eCommerce == CommerceTypes.COMMERCE_GOLD)):
szBuffer = u"%d.%02d %c" %(pHeadSelectedCity.getCommerceRate(eCommerce), pHeadSelectedCity.getCommerceRateTimes100(eCommerce)%100, gc.getCommerceInfo(eCommerce).getChar())
iHappiness = pHeadSelectedCity.getCommerceHappinessByType(eCommerce)
if (iHappiness != 0):
if ( iHappiness > 0 ):
szTempBuffer = u", %d%c" %(iHappiness, CyGame().getSymbolID(FontSymbols.HAPPY_CHAR))
else:
szTempBuffer = u", %d%c" %(-iHappiness, CyGame().getSymbolID(FontSymbols.UNHAPPY_CHAR))
szBuffer = szBuffer + szTempBuffer
szName = "CityPercentText" + str(iCount)
screen.setLabel( szName, "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, 220, 45 + (19 * iCount) + 4, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_COMMERCE_MOD_HELP, eCommerce, -1 )
screen.show( szName )
iCount = iCount + 1
iCount = 0
### BUG - Raw Yields
bShowRawYields = g_bYieldView and CityScreenOpt.isShowRawYields()
if bShowRawYields:
screen.addTableControlGFC( "TradeRouteTable", 4, 10, 187, 238, 98, False, False, 20, 20, TableStyles.TABLE_STYLE_STANDARD )
screen.setStyle( "TradeRouteTable", "Table_City_Style")
screen.setTableColumnHeader( "TradeRouteTable", 0, u"", 111 )
screen.setTableColumnHeader( "TradeRouteTable", 1, u"", 60 )
screen.setTableColumnHeader( "TradeRouteTable", 2, u"", 55 )
screen.setTableColumnHeader( "TradeRouteTable", 3, u"", 10 )
screen.setTableColumnRightJustify( "TradeRouteTable", 1 )
screen.setTableColumnRightJustify( "TradeRouteTable", 2 )
else:
screen.addTableControlGFC( "TradeRouteTable", 3, 10, 187, 238, 98, False, False, 20, 20, TableStyles.TABLE_STYLE_STANDARD )
screen.setStyle( "TradeRouteTable", "Table_City_Style")
screen.setTableColumnHeader( "TradeRouteTable", 0, u"", 158 )
screen.setTableColumnHeader( "TradeRouteTable", 1, u"", 68 )
screen.setTableColumnHeader( "TradeRouteTable", 2, u"", 10 )
screen.setTableColumnRightJustify( "TradeRouteTable", 1 )
###
screen.show("TradeRouteListBackground")
### BUG - Raw Yields
if (CityScreenOpt.isShowRawYields()):
screen.setState("RawYieldsTrade0", not g_bYieldView)
screen.show("RawYieldsTrade0")
screen.setState("RawYieldsFood1", g_bYieldView and g_iYieldType == YieldTypes.YIELD_FOOD)
screen.show("RawYieldsFood1")
screen.setState("RawYieldsProduction2", g_bYieldView and g_iYieldType == YieldTypes.YIELD_PRODUCTION)
screen.show("RawYieldsProduction2")
screen.setState("RawYieldsCommerce3", g_bYieldView and g_iYieldType == YieldTypes.YIELD_COMMERCE)
screen.show("RawYieldsCommerce3")
screen.setState("RawYieldsWorkedTiles4", g_iYieldTiles == RawYields.WORKED_TILES)
screen.show("RawYieldsWorkedTiles4")
screen.setState("RawYieldsCityTiles5", g_iYieldTiles == RawYields.CITY_TILES)
screen.show("RawYieldsCityTiles5")
screen.setState("RawYieldsOwnedTiles6", g_iYieldTiles == RawYields.OWNED_TILES)
screen.show("RawYieldsOwnedTiles6")
else:
screen.show("TradeRouteListLabel")
###
i = 0
iNumBuildings = 0
### BUG - Raw Yields
self.yields = RawYields.Tracker()
###
### Building Display
screen.addTableControlGFC("BuildingListTable", 3, 10, 317, 238, self.yResolution - 562, False, False, 20, 20, TableStyles.TABLE_STYLE_STANDARD)
screen.setStyle("BuildingListTable", "Table_City_Style")
screen.setTableColumnHeader("BuildingListTable", 0, u"", 142)
screen.setTableColumnHeader("BuildingListTable", 1, u"", 84)
screen.setTableColumnHeader("BuildingListTable", 2, u"", 10)
screen.setTableColumnRightJustify("BuildingListTable", 1)
screen.show("BuildingListBackground")
screen.show("BuildingListLabel")
for i in xrange(gc.getNumBuildingInfos()):
if pHeadSelectedCity.getNumBuilding(i) > 0:
if not gc.getBuildingInfo(i).getArtDefineTag() == "ART_DEF_BUILDING_FAKE":
for k in xrange(pHeadSelectedCity.getNumBuilding(i)):
szLeftBuffer = gc.getBuildingInfo(i).getDescription()
szRightBuffer = u""
szIcon = gc.getBuildingInfo(i).getButton()
bFirst = True
if pHeadSelectedCity.getNumActiveBuilding(i) > 0:
iHealth = pHeadSelectedCity.getBuildingHealth(i)
if iHealth != 0:
if not bFirst:
szRightBuffer = szRightBuffer + ", "
else:
bFirst = False
if iHealth > 0:
szTempBuffer = u"+%d%c" % (iHealth, CyGame().getSymbolID(FontSymbols.HEALTHY_CHAR))
szRightBuffer = szRightBuffer + szTempBuffer
else:
szTempBuffer = u"+%d%c" % (-(iHealth), CyGame().getSymbolID(FontSymbols.UNHEALTHY_CHAR))
szRightBuffer = szRightBuffer + szTempBuffer
iHappiness = pHeadSelectedCity.getBuildingHappiness(i)
if iHappiness != 0:
if not bFirst:
szRightBuffer = szRightBuffer + ", "
else:
bFirst = False
if iHappiness > 0:
szTempBuffer = u"+%d%c" % (iHappiness, CyGame().getSymbolID(FontSymbols.HAPPY_CHAR))
szRightBuffer = szRightBuffer + szTempBuffer
else:
szTempBuffer = u"+%d%c" % (-(iHappiness), CyGame().getSymbolID(FontSymbols.UNHAPPY_CHAR))
szRightBuffer = szRightBuffer + szTempBuffer
for j in xrange(YieldTypes.NUM_YIELD_TYPES):
iYield = gc.getBuildingInfo(i).getYieldChange(j) + pHeadSelectedCity.getNumBuilding(i) * pHeadSelectedCity.getBuildingYieldChange(gc.getBuildingInfo(i).getBuildingClassType(), j)
if iYield != 0:
if not bFirst:
szRightBuffer = szRightBuffer + ", "
else:
bFirst = False
if iYield > 0:
szTempBuffer = u"%s%d%c" % ("+", iYield, gc.getYieldInfo(j).getChar())
szRightBuffer = szRightBuffer + szTempBuffer
else:
szTempBuffer = u"%s%d%c" % ("", iYield, gc.getYieldInfo(j).getChar())
szRightBuffer = szRightBuffer + szTempBuffer
### BUG - Raw Yields
self.yields.addBuilding(j, iYield)
###
for j in xrange(CommerceTypes.NUM_COMMERCE_TYPES):
iCommerce = pHeadSelectedCity.getBuildingCommerceByBuilding(j, i) / pHeadSelectedCity.getNumBuilding(i)
if iCommerce != 0:
if not bFirst:
szRightBuffer = szRightBuffer + ", "
else:
bFirst = False
if iCommerce > 0:
szTempBuffer = u"%s%d%c" % ("+", iCommerce, gc.getCommerceInfo(j).getChar())
szRightBuffer = szRightBuffer + szTempBuffer
else:
szTempBuffer = u"%s%d%c" % ("", iCommerce, gc.getCommerceInfo(j).getChar())
szRightBuffer = szRightBuffer + szTempBuffer
screen.appendTableRow("BuildingListTable")
screen.setTableText("BuildingListTable", 0, iNumBuildings, "<font=1>" + szLeftBuffer + "</font>", szIcon, WidgetTypes.WIDGET_PEDIA_JUMP_TO_BUILDING, i, 1, CvUtil.FONT_LEFT_JUSTIFY)
screen.setTableText("BuildingListTable", 1, iNumBuildings, "<font=1>" + szRightBuffer + "</font>", "", WidgetTypes.WIDGET_PEDIA_JUMP_TO_BUILDING, i, 1, CvUtil.FONT_RIGHT_JUSTIFY)
iNumBuildings += 1
if iNumBuildings > g_iNumBuildings:
g_iNumBuildings = iNumBuildings
### Trade Route Display
iNumTradeRoutes = 0
for i in xrange(gc.getDefineINT("MAX_TRADE_ROUTES")):
pLoopCity = pHeadSelectedCity.getTradeCity(i)
if (pLoopCity and pLoopCity.getOwner() >= 0):
player = gc.getPlayer(pLoopCity.getOwner())
szLeftBuffer = u"<color=%d,%d,%d,%d>%s</color>" %(player.getPlayerTextColorR(), player.getPlayerTextColorG(), player.getPlayerTextColorB(), player.getPlayerTextColorA(), pLoopCity.getName() )
szRightBuffer = u""
for j in xrange( YieldTypes.NUM_YIELD_TYPES ):
### BUG - Fractional Trade
iTradeProfit = TradeUtil.calculateTradeRouteYield(pHeadSelectedCity, i, j)
if (iTradeProfit != 0):
if ( iTradeProfit > 0 ):
if TradeUtil.isFractionalTrade():
szTempBuffer = u"%s%d.%02d%c" %( "+", iTradeProfit // 100, iTradeProfit % 100, gc.getYieldInfo(j).getChar() )
else:
szTempBuffer = u"%s%d%c" %( "+", iTradeProfit, gc.getYieldInfo(j).getChar() )
szRightBuffer = szRightBuffer + szTempBuffer
else:
if TradeUtil.isFractionalTrade():
szTempBuffer = u"%s%d.%02d%c" %( "", iTradeProfit // 100, iTradeProfit % 100, gc.getYieldInfo(j).getChar() )
else:
szTempBuffer = u"%s%d%c" %( "", iTradeProfit, gc.getYieldInfo(j).getChar() )
szRightBuffer = szRightBuffer + szTempBuffer
### BUG - Raw Yields
if j == YieldTypes.YIELD_COMMERCE:
if pHeadSelectedCity.getTeam() == pLoopCity.getTeam():
self.yields.addDomesticTrade(iTradeProfit)
else:
self.yields.addForeignTrade(iTradeProfit)
if not bShowRawYields:
screen.appendTableRow( "TradeRouteTable")
iCiv = player.getCivilizationType()
screen.setTableText( "TradeRouteTable", 0, iNumTradeRoutes, "<font=1>" + szLeftBuffer + "</font>", gc.getCivilizationInfo(iCiv).getButton(), WidgetTypes.WIDGET_HELP_TRADE_ROUTE_CITY, i, -1, CvUtil.FONT_LEFT_JUSTIFY )
screen.setTableText( "TradeRouteTable", 1, iNumTradeRoutes, "<font=1>" + szRightBuffer + "</font>", "", WidgetTypes.WIDGET_HELP_TRADE_ROUTE_CITY, i, -1, CvUtil.FONT_RIGHT_JUSTIFY )
###
iNumTradeRoutes = iNumTradeRoutes + 1
if iNumTradeRoutes > g_iNumTradeRoutes:
g_iNumTradeRoutes = iNumTradeRoutes
### Resource Display
screen.addDropDownBoxGFC("ResourceFilter", self.xResolution - 247, 38, 115, WidgetTypes.WIDGET_GENERAL, -1, -1, FontTypes.GAME_FONT)
screen.addPullDownString("ResourceFilter", "All", -1, -1, True)
screen.addPullDownString("ResourceFilter", "Crops", 0, 0, 0 == self.iBonusClass)
iBonusClass = 1
while not gc.getBonusClassInfo(iBonusClass) is None:
sText = gc.getBonusClassInfo(iBonusClass).getType()
sText = sText[sText.find("_") + 1:]
sText = sText.lower()
sText = sText.capitalize()
screen.addPullDownString("ResourceFilter", sText, iBonusClass, iBonusClass, iBonusClass == self.iBonusClass)
iBonusClass += 1
screen.addDropDownBoxGFC("ResourceFilter2", self.xResolution - 123, 38, 115, WidgetTypes.WIDGET_GENERAL, -1, -1, FontTypes.GAME_FONT)
screen.addPullDownString("ResourceFilter2", " ", -1, -1, True)
sTableHeight = self.yResolution - 70 - self.iSpecGPAnchorY - 5
sTableHeight = (sTableHeight - 2) / 24 * 24 - 1
screen.addTableControlGFC("ResourceTable", 4, self.xResolution - 245, 72, 235, sTableHeight, True, True, 24, 24, TableStyles.TABLE_STYLE_CITY)
screen.setTableColumnHeader("ResourceTable", 0, "<font=2>" + CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_BONUS", ()) + "</font>", 135)
screen.setTableColumnHeader("ResourceTable", 1, "", 30)
screen.setTableColumnHeader("ResourceTable", 2, "<font=2>" + CyTranslator().getText("[ICON_HAPPY]" + "</font>", ()), 30)
screen.setTableColumnHeader("ResourceTable", 3, "<font=2>" + CyTranslator().getText("[ICON_HEALTHY]" + "</font>", ()), 30)
screen.enableSort("ResourceTable")
lBonus = []
for iBonus in xrange(gc.getNumBonusInfos()):
ItemInfo = gc.getBonusInfo(iBonus)
iClass = ItemInfo.getBonusClassType()
if self.iBonusClass != iClass and self.iBonusClass > -1:
continue
lBonus.append([iClass, ItemInfo.getDescription(), iBonus])
lBonus.sort()
for i in lBonus:
iBonus = i[2]
ItemInfo = gc.getBonusInfo(iBonus)
if pHeadSelectedCity.hasBonus(iBonus):
iHealth = pHeadSelectedCity.getBonusHealth(iBonus)
iHappiness = pHeadSelectedCity.getBonusHappiness(iBonus)
iNumBonus = pHeadSelectedCity.getNumBonuses(iBonus)
iRow = screen.appendTableRow("ResourceTable")
screen.setTableText("ResourceTable", 0, iRow, "<font=1>" + i[1] + "</font>", ItemInfo.getButton(), WidgetTypes.WIDGET_RESOURCE, iBonus, -1, CvUtil.FONT_LEFT_JUSTIFY)
screen.setTableInt("ResourceTable", 1, iRow, str(iNumBonus), "", WidgetTypes.WIDGET_GENERAL, -1, -1, CvUtil.FONT_CENTER_JUSTIFY)
screen.setTableInt("ResourceTable", 2, iRow, str(iHappiness), "", WidgetTypes.WIDGET_GENERAL, -1, -1, CvUtil.FONT_CENTER_JUSTIFY)
screen.setTableInt("ResourceTable", 3, iRow, str(iHealth), "", WidgetTypes.WIDGET_GENERAL, -1, -1, CvUtil.FONT_CENTER_JUSTIFY)
###
iMaintenance = pHeadSelectedCity.getMaintenanceTimes100()
szBuffer = localText.getText("INTERFACE_CITY_MAINTENANCE", ())
screen.setLabel( "MaintenanceText", "Background", szBuffer, CvUtil.FONT_LEFT_JUSTIFY, 15, 126, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_HELP_MAINTENANCE, -1, -1 )
screen.show("MaintenanceText")
szBuffer = u"-%d.%02d %c" %(iMaintenance/100, iMaintenance%100, gc.getCommerceInfo(CommerceTypes.COMMERCE_GOLD).getChar())
screen.setLabel( "MaintenanceAmountText", "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, 220, 125, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_HELP_MAINTENANCE, -1, -1 )
screen.show("MaintenanceAmountText")
### BUG - Raw Yields
if bShowRawYields:
self.yields.processCity(pHeadSelectedCity)
self.yields.fillTable(screen, "TradeRouteTable", g_iYieldType, g_iYieldTiles)
### Religion Display
nColumns = 9
screen.addTableControlGFC("CityReligions", nColumns, 265, iCityCenterRow1Y + 65, 275, 75, False, False, 0, 0, TableStyles.TABLE_STYLE_EMPTY)
for i in xrange(nColumns):
screen.setTableColumnHeader("CityReligions", i, "", 30)
iCount = 0
for i in xrange(gc.getNumReligionInfos()):
if pHeadSelectedCity.isHasReligion(i):
iColumn = iCount % nColumns
if iColumn == 0:
iRow = screen.appendTableRow("CityReligions")
sText = u"%c" %(gc.getReligionInfo(i).getChar())
if pHeadSelectedCity.isHolyCityByType(i):
sText = u"%c" %(gc.getReligionInfo(i).getHolyCityChar())
screen.setTableText("CityReligions", iColumn, iRow, "<font=4>" + sText + "</font>","", WidgetTypes.WIDGET_HELP_RELIGION_CITY, i, -1, CvUtil.FONT_CENTER_JUSTIFY)
iCount += 1
### Corporation Display
nColumns = 9
screen.addTableControlGFC("CityCorporations", nColumns, self.xResolution - 530, iCityCenterRow1Y + 65, 275, 75, False, False, 0, 0, TableStyles.TABLE_STYLE_EMPTY)
for i in xrange(nColumns):
screen.setTableColumnHeader("CityCorporations", i, "", 30)
iNumCorps = 0
for i in xrange(gc.getNumCorporationInfos()):
if pHeadSelectedCity.isHasCorporation(i):
iNumCorps += 1
iCount = 0
for i in xrange(gc.getNumCorporationInfos()):
if pHeadSelectedCity.isHasCorporation(i):
iColumn = nColumns - (iNumCorps % nColumns) + iCount
sText = u"%c" %(gc.getCorporationInfo(i).getChar())
if pHeadSelectedCity.isHeadquartersByType(i):
sText = u"%c" %(gc.getCorporationInfo(i).getHeadquarterChar())
screen.setTableText("CityCorporations", iColumn, iRow, "<font=4>" + sText + "</font>","", WidgetTypes.WIDGET_HELP_CORPORATION_CITY, i, -1, CvUtil.FONT_CENTER_JUSTIFY)
iCount += 1
### Culture Bar
if pHeadSelectedCity.getCultureLevel != CultureLevelTypes.NO_CULTURELEVEL:
iRate = pHeadSelectedCity.getCommerceRateTimes100(CommerceTypes.COMMERCE_CULTURE)
sLevel = gc.getCultureLevelInfo(pHeadSelectedCity.getCultureLevel()).getTextKey()
if iRate % 100 == 0:
szBuffer = localText.getText("INTERFACE_CITY_COMMERCE_RATE", (sLevel, iRate / 100, gc.getCommerceInfo(CommerceTypes.COMMERCE_CULTURE).getChar()))
else:
szRate = u"+%d.%02d" % (iRate / 100, iRate % 100)
szBuffer = localText.getText("INTERFACE_CITY_COMMERCE_RATE_FLOAT", (sLevel, szRate, gc.getCommerceInfo(CommerceTypes.COMMERCE_CULTURE).getChar()))
if CityScreenOpt.isShowCultureTurns() and iRate > 0:
iCultureTimes100 = pHeadSelectedCity.getCultureTimes100(pHeadSelectedCity.getOwner())
iCultureLeftTimes100 = 100 * pHeadSelectedCity.getCultureThreshold() - iCultureTimes100
szBuffer += u" " + localText.getText("INTERFACE_CITY_TURNS", (((iCultureLeftTimes100 + iRate - 1) / iRate), ))
screen.setLabel("CultureText", "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, 125, self.yResolution - 234, -1.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
screen.setHitTest("CultureText", HitTestTypes.HITTEST_NOHIT)
screen.show("CultureText")
iFirst = float(pHeadSelectedCity.getCultureTimes100(pHeadSelectedCity.getOwner())) / float(100 * pHeadSelectedCity.getCultureThreshold())
screen.setBarPercentage("CultureBar", InfoBarTypes.INFOBAR_STORED, iFirst)
if iFirst == 1:
screen.setBarPercentage("CultureBar", InfoBarTypes.INFOBAR_RATE, (float(pHeadSelectedCity.getCommerceRate(CommerceTypes.COMMERCE_CULTURE)) / float(pHeadSelectedCity.getCultureThreshold())))
else:
screen.setBarPercentage("CultureBar", InfoBarTypes.INFOBAR_RATE, ((float(pHeadSelectedCity.getCommerceRate(CommerceTypes.COMMERCE_CULTURE)) / float(pHeadSelectedCity.getCultureThreshold()))) / ( 1 - iFirst ))
screen.show("CultureBar")
### Nationality Bar
szBuffer = u"%d%% %s" %(pHeadSelectedCity.plot().calculateCulturePercent(pHeadSelectedCity.getOwner()), gc.getPlayer(pHeadSelectedCity.getOwner()).getCivilizationAdjective(0) )
screen.setLabel("NationalityText", "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, 125, self.yResolution - 208, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
screen.setHitTest("NationalityText", HitTestTypes.HITTEST_NOHIT)
screen.show("NationalityText")
iRemainder = 100
iWhichBar = 0
for h in xrange(gc.getMAX_PLAYERS()):
if gc.getPlayer(h).isAlive():
iPercent = pHeadSelectedCity.plot().calculateCulturePercent(h)
if iPercent > 0:
screen.setStackedBarColorsRGB("NationalityBar", iWhichBar, gc.getPlayer(h).getPlayerTextColorR(), gc.getPlayer(h).getPlayerTextColorG(), gc.getPlayer(h).getPlayerTextColorB(), gc.getPlayer(h).getPlayerTextColorA())
if iRemainder <= 0:
screen.setBarPercentage("NationalityBar", iWhichBar, 0.0)
else:
screen.setBarPercentage("NationalityBar", iWhichBar, float(iPercent) / iRemainder)
iRemainder -= iPercent
iWhichBar += 1
screen.show("NationalityBar")
### Dissent Bar
iDissent = CivilWar.CivilWar().getCityDissent(pHeadSelectedCity)
iLevel = CivilWar.CivilWar().getDissentLevel(iDissent)
iThreshold, sLevel, iColor = CivilWar.CivilWar().DissentLevels[iLevel]
lowerThreshold, lowerLevel, lowerColor = CivilWar.CivilWar().DissentLevels[max(0, iLevel - 1)]
upperThreshold, upperLevel, upperColor = CivilWar.CivilWar().DissentLevels[min(iLevel + 1, len(CivilWar.CivilWar().DissentLevels) - 1)]
iRate = CivilWar.CivilWar().getCityDissentRate(pHeadSelectedCity)
nextLevel, iTurns = CivilWar.CivilWar().getCityDissentTurns(pHeadSelectedCity)
if iRate == 0:
szBuffer = sLevel
else:
szBuffer = localText.getText("INTERFACE_CITY_DISSENT_RATE", (sLevel, iRate, CyGame().getSymbolID(FontSymbols.OCCUPATION_CHAR)))
if nextLevel != iLevel:
szBuffer += u" " + localText.getText("INTERFACE_CITY_TURNS", (iTurns, ))
screen.setLabel("DissentText", "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, 125, self.yResolution - 182, -1.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
screen.setHitTest("DissentText", HitTestTypes.HITTEST_NOHIT)
screen.show("DissentText")
iRange = float(upperThreshold - iThreshold)
if iRange == 0:
iFill = 1.0
else:
iFill = float(iDissent - iThreshold) / iRange
screen.setBarPercentage("DissentBar", InfoBarTypes.INFOBAR_STORED, iFill)
screen.setBarPercentage("DissentBar", InfoBarTypes.INFOBAR_RATE, 1.0)
if iRate < 0:
screen.setStackedBarColors("DissentBar", InfoBarTypes.INFOBAR_STORED, iColor)
screen.setStackedBarColors("DissentBar", InfoBarTypes.INFOBAR_RATE, lowerColor)
elif iRate >= 0:
screen.setStackedBarColors("DissentBar", InfoBarTypes.INFOBAR_STORED, upperColor)
screen.setStackedBarColors("DissentBar", InfoBarTypes.INFOBAR_RATE, iColor)
screen.show("DissentBar")
### Great People Bars
screen.show("SpecialistLabel")
screen.show("SpecialistBackground")
xBar = self.xResolution - self.iSpecGPAnchorX + 80
yBar = self.yResolution - self.iSpecGPAnchorY + iStackBarHeight + 9
wBar = self.xResolution - xBar - 10
xText = self.xResolution - ((self.iSpecGPAnchorX - 75) / 2)
yText = self.yResolution - self.iSpecGPAnchorY + iStackBarHeight + 14
GPProgress = HR.getCityData(pHeadSelectedCity, 1).split(",")
iThreshold = gc.getPlayer(pHeadSelectedCity.getOwner()).greatPeopleThreshold(False)
sThreshold = localText.getText('TXT_KEY_INTERFACE_CITY_GREAT_PEOPLE_THRESHOLD', (iThreshold, ))
screen.setText("GreatPeopleThreshold", "Background", "<font=2>" + sThreshold + "</font>", CvUtil.FONT_RIGHT_JUSTIFY, self.xResolution - 10, yText, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
screen.setHitTest("GreatPeopleThreshold", HitTestTypes.HITTEST_NOHIT)
for i in xrange(len(HR.GreatPeople)):
iUnit = HR.GreatPeople[i]
if len(GPProgress) > 1:
iProgress = int(GPProgress[i])
else:
iProgress = 0
iFirst = float(iProgress) / float(iThreshold)
iModifier = HR.getGreatPersonModifier(pHeadSelectedCity, iUnit)
iRate = pHeadSelectedCity.getGreatPeopleUnitRate(iUnit)
iRate += ((iRate * iModifier) / 100)
if iRate > 0:
iTurns = (iThreshold - iProgress + iRate - 1) / iRate
szBuffer = localText.getText('TXT_KEY_INTERFACE_CITY_GREAT_PEOPLE_TURNS', (iRate, iTurns))
else:
szBuffer = ""
sBar = "CityGPBar" + str(i)
yBar += iStackBarHeight
screen.addStackedBarGFC(sBar, xBar, yBar, wBar, iStackBarHeight, InfoBarTypes.NUM_INFOBAR_TYPES, WidgetTypes.WIDGET_HELP_GREAT_PERSON_CITY_BAR, HR.GreatPeople[i], -1)
screen.setStackedBarColors(sBar, InfoBarTypes.INFOBAR_STORED, gc.getInfoTypeForString('COLOR_GREAT_PEOPLE_STORED'))
screen.setStackedBarColors(sBar, InfoBarTypes.INFOBAR_RATE, gc.getInfoTypeForString('COLOR_GREAT_PEOPLE_RATE'))
screen.setStackedBarColors(sBar, InfoBarTypes.INFOBAR_RATE_EXTRA, gc.getInfoTypeForString('COLOR_EMPTY'))
screen.setStackedBarColors(sBar, InfoBarTypes.INFOBAR_EMPTY, gc.getInfoTypeForString('COLOR_EMPTY'))
screen.setBarPercentage(sBar, InfoBarTypes.INFOBAR_STORED, iFirst)
if iFirst == 1:
screen.setBarPercentage(sBar, InfoBarTypes.INFOBAR_RATE, float(iRate) / float(iThreshold))
else:
screen.setBarPercentage(sBar, InfoBarTypes.INFOBAR_RATE, (float(iRate) / float(iThreshold)) / (1 - iFirst))
screen.show(sBar)
sText = "CityGPText" + str(i)
yText += iStackBarHeight
screen.setLabel(sText, "Background", szBuffer, CvUtil.FONT_CENTER_JUSTIFY, xText, yText, -1.3, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
screen.setHitTest(sText, HitTestTypes.HITTEST_NOHIT)
screen.show(sText)
else:
# Help Text Area
if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
screen.setHelpTextArea(350, FontTypes.SMALL_FONT, 7, self.yResolution - 172, -0.1, False, "", True, False, CvUtil.FONT_LEFT_JUSTIFY, HELP_TEXT_MINIMUM_WIDTH)
else:
screen.setHelpTextArea(350, FontTypes.SMALL_FONT, 7, self.yResolution - 50, -0.1, False, "", True, False, CvUtil.FONT_LEFT_JUSTIFY, HELP_TEXT_MINIMUM_WIDTH)
screen.hide("InterfaceTopLeftBackgroundWidget")
screen.hide("InterfaceTopRightBackgroundWidget")
screen.hide("InterfaceCenterLeftBackgroundWidget")
screen.hide("CityScreenTopWidget")
screen.hide("CityNameBackground")
screen.hide("TopCityPanelLeft")
screen.hide("TopCityPanelRight")
screen.hide("CityScreenAdjustPanel")
screen.hide("InterfaceCenterRightBackgroundWidget")
if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
self.setMinimapButtonVisibility(True)
return 0
def updateInfoPaneStrings(self):
screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
pHeadSelectedCity = CyInterface().getHeadSelectedCity()
pHeadSelectedUnit = CyInterface().getHeadSelectedUnit()
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
iRow = 0
screen.addPanel("SelectedUnitPanel", u"", u"", True, False, 8, yResolution - 140, 280, 130, PanelStyles.PANEL_STYLE_STANDARD)
screen.setStyle("SelectedUnitPanel", "Panel_Game_HudStat_Style")
screen.hide("SelectedUnitPanel")
screen.addTableControlGFC("SelectedUnitText", 2, 10, yResolution - 109, 180, 102, False, False, 20, 20, TableStyles.TABLE_STYLE_STANDARD)
screen.setStyle("SelectedUnitText", "Table_EmptyScroll_Style")
screen.hide("SelectedUnitText")
screen.hide("SelectedUnitLabel")
screen.addTableControlGFC("SelectedCityText", 2, 10, yResolution - 139, 180, 128, False, False, 20, 20, TableStyles.TABLE_STYLE_STANDARD)
screen.setStyle("SelectedCityText", "Table_EmptyScroll_Style")
screen.hide("SelectedCityText")
for i in xrange(gc.getNumPromotionInfos()):
szName = "PromotionButton" + str(i)
screen.hide(szName)
if CyEngine().isGlobeviewUp():
return
if pHeadSelectedCity:
screen.setTableColumnHeader("SelectedCityText", 0, u"", 120)
screen.setTableColumnHeader("SelectedCityText", 1, u"", 50)
screen.setTableColumnRightJustify("SelectedCityText", 1)
iOrders = CyInterface().getNumOrdersQueued()
for i in xrange(iOrders):
szLeftBuffer = u""
szRightBuffer = u""
if CyInterface().getOrderNodeType(i) == OrderTypes.ORDER_TRAIN:
szLeftBuffer = gc.getUnitInfo(CyInterface().getOrderNodeData1(i)).getDescription()
szButton = gc.getUnitInfo(CyInterface().getOrderNodeData1(i)).getButton()
szRightBuffer = "(" + str(pHeadSelectedCity.getUnitProductionTurnsLeft(CyInterface().getOrderNodeData1(i), i)) + ")"
if CyInterface().getOrderNodeSave(i):
szLeftBuffer = u"*" + szLeftBuffer
### BUG - Production Started
if CityScreenOpt.isShowProductionStarted():
eUnit = CyInterface().getOrderNodeData1(i)
if pHeadSelectedCity.getUnitProduction(eUnit) > 0:
szRightBuffer = BugUtil.colorText(szRightBuffer, "COLOR_CYAN")
### BUG - Production Decay
if BugDll.isPresent() and CityScreenOpt.isShowProductionDecayQueue():
eUnit = CyInterface().getOrderNodeData1(i)
if pHeadSelectedCity.getUnitProduction(eUnit) > 0:
if pHeadSelectedCity.isUnitProductionDecay(eUnit):
szLeftBuffer = BugUtil.getText("TXT_KEY_BUG_PRODUCTION_DECAY_THIS_TURN", (szLeftBuffer,))
elif pHeadSelectedCity.getUnitProductionTime(eUnit) > 0:
iDecayTurns = pHeadSelectedCity.getUnitProductionDecayTurns(eUnit)
if iDecayTurns <= CityScreenOpt.getProductionDecayQueueUnitThreshold():
szLeftBuffer = BugUtil.getText("TXT_KEY_BUG_PRODUCTION_DECAY_WARNING", (szLeftBuffer,))
###
elif CyInterface().getOrderNodeType(i) == OrderTypes.ORDER_CONSTRUCT:
szLeftBuffer = gc.getBuildingInfo(CyInterface().getOrderNodeData1(i)).getDescription()
szButton = gc.getBuildingInfo(CyInterface().getOrderNodeData1(i)).getButton()
szRightBuffer = "(" + str(pHeadSelectedCity.getBuildingProductionTurnsLeft(CyInterface().getOrderNodeData1(i), i)) + ")"
### BUG - Production Started
if CityScreenOpt.isShowProductionStarted():
eBuilding = CyInterface().getOrderNodeData1(i)
if pHeadSelectedCity.getBuildingProduction(eBuilding) > 0:
szRightBuffer = BugUtil.colorText(szRightBuffer, "COLOR_CYAN")
### BUG - Production Decay
if BugDll.isPresent() and CityScreenOpt.isShowProductionDecayQueue():
eBuilding = CyInterface().getOrderNodeData1(i)
if pHeadSelectedCity.getBuildingProduction(eBuilding) > 0:
if pHeadSelectedCity.isBuildingProductionDecay(eBuilding):
szLeftBuffer = BugUtil.getText("TXT_KEY_BUG_PRODUCTION_DECAY_THIS_TURN", (szLeftBuffer,))
elif pHeadSelectedCity.getBuildingProductionTime(eBuilding) > 0:
iDecayTurns = pHeadSelectedCity.getBuildingProductionDecayTurns(eBuilding)
if iDecayTurns <= CityScreenOpt.getProductionDecayQueueBuildingThreshold():
szLeftBuffer = BugUtil.getText("TXT_KEY_BUG_PRODUCTION_DECAY_WARNING", (szLeftBuffer,))
###
elif ( CyInterface().getOrderNodeType(i) == OrderTypes.ORDER_CREATE ):
szLeftBuffer = gc.getProjectInfo(CyInterface().getOrderNodeData1(i)).getDescription()
szButton = gc.getProjectInfo(CyInterface().getOrderNodeData1(i)).getButton()
szRightBuffer = "(" + str(pHeadSelectedCity.getProjectProductionTurnsLeft(CyInterface().getOrderNodeData1(i), i)) + ")"
### BUG - Production Started
if BugDll.isVersion(3) and CityScreenOpt.isShowProductionStarted():
eProject = CyInterface().getOrderNodeData1(i)
if pHeadSelectedCity.getProjectProduction(eProject) > 0:
szRightBuffer = BugUtil.colorText(szRightBuffer, "COLOR_CYAN")
###
elif CyInterface().getOrderNodeType(i) == OrderTypes.ORDER_MAINTAIN:
szLeftBuffer = gc.getProcessInfo(CyInterface().getOrderNodeData1(i)).getDescription()
szButton = gc.getProcessInfo(CyInterface().getOrderNodeData1(i)).getButton()
screen.appendTableRow("SelectedCityText")
screen.setTableText("SelectedCityText", 0, iRow, szLeftBuffer, szButton, WidgetTypes.WIDGET_HELP_SELECTED, i, -1, CvUtil.FONT_LEFT_JUSTIFY)
screen.setTableText("SelectedCityText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, i, -1, CvUtil.FONT_RIGHT_JUSTIFY)
screen.show("SelectedCityText")
screen.show("SelectedUnitPanel")
iRow += 1
elif pHeadSelectedUnit and CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
screen.setTableColumnHeader("SelectedUnitText", 0, u"", 100)
screen.setTableColumnHeader("SelectedUnitText", 1, u"", 75)
screen.setTableColumnRightJustify("SelectedUnitText", 1)
if CyInterface().mirrorsSelectionGroup():
pSelectedGroup = pHeadSelectedUnit.getGroup()
else:
pSelectedGroup = 0
if CyInterface().getLengthSelectionList() > 1:
szBuffer = localText.getText("TXT_KEY_UNIT_STACK", (CyInterface().getLengthSelectionList(), ))
if MainOpt.isShowStackMovementPoints():
iMinMoves = 100000
iMaxMoves = 0
for i in xrange(CyInterface().getLengthSelectionList()):
pUnit = CyInterface().getSelectionUnit(i)
if pUnit != None:
iLoopMoves = pUnit.movesLeft()
if iLoopMoves > iMaxMoves:
iMaxMoves = iLoopMoves
if iLoopMoves < iMinMoves:
iMinMoves = iLoopMoves
if iMinMoves == iMaxMoves:
fMinMoves = float(iMinMoves) / gc.getMOVE_DENOMINATOR()
szBuffer += u" %.1f%c" % (fMinMoves, CyGame().getSymbolID(FontSymbols.MOVES_CHAR))
else:
fMinMoves = float(iMinMoves) / gc.getMOVE_DENOMINATOR()
fMaxMoves = float(iMaxMoves) / gc.getMOVE_DENOMINATOR()
szBuffer += u" %.1f - %.1f%c" % (fMinMoves, fMaxMoves, CyGame().getSymbolID(FontSymbols.MOVES_CHAR))
screen.setText("SelectedUnitLabel", "Background", szBuffer, CvUtil.FONT_LEFT_JUSTIFY, 18, yResolution - 137, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_UNIT_NAME, -1, -1)
if pSelectedGroup == 0 or pSelectedGroup.getLengthMissionQueue() <= 1:
if pHeadSelectedUnit:
for i in xrange(gc.getNumUnitInfos()):
iCount = CyInterface().countEntities(i)
if iCount > 0:
szRightBuffer = u""
szLeftBuffer = gc.getUnitInfo(i).getDescription()
if iCount > 1:
szRightBuffer = u"(" + str(iCount) + u")"
szBuffer = szLeftBuffer + u" " + szRightBuffer
screen.appendTableRow("SelectedUnitText")
screen.setTableText("SelectedUnitText", 0, iRow, szLeftBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, i, -1, CvUtil.FONT_LEFT_JUSTIFY)
screen.setTableText("SelectedUnitText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, i, -1, CvUtil.FONT_RIGHT_JUSTIFY)
screen.show("SelectedUnitText")
screen.show("SelectedUnitPanel")
iRow += 1
else:
if pHeadSelectedUnit.getHotKeyNumber() == -1:
szBuffer = localText.getText("INTERFACE_PANE_UNIT_NAME", (pHeadSelectedUnit.getName(), ))
else:
szBuffer = localText.getText("INTERFACE_PANE_UNIT_NAME_HOT_KEY", (pHeadSelectedUnit.getHotKeyNumber(), pHeadSelectedUnit.getName()))
if len(szBuffer) > 60:
szBuffer = "<font=2>" + szBuffer + "</font>"
screen.setText("SelectedUnitLabel", "Background", szBuffer, CvUtil.FONT_LEFT_JUSTIFY, 18, yResolution - 137, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_UNIT_NAME, -1, -1)
if pSelectedGroup == 0 or pSelectedGroup.getLengthMissionQueue() <= 1:
screen.show("SelectedUnitText")
screen.show("SelectedUnitPanel")
szBuffer = u""
szLeftBuffer = u""
szRightBuffer = u""
if pHeadSelectedUnit.getDomainType() == DomainTypes.DOMAIN_AIR:
if pHeadSelectedUnit.airBaseCombatStr() > 0:
szLeftBuffer = localText.getText("INTERFACE_PANE_AIR_STRENGTH", ())
if pHeadSelectedUnit.isFighting():
szRightBuffer = u"?/%d%c" %(pHeadSelectedUnit.airBaseCombatStr(), CyGame().getSymbolID(FontSymbols.STRENGTH_CHAR))
elif pHeadSelectedUnit.isHurt():
szRightBuffer = u"%.1f/%d%c" %(((float(pHeadSelectedUnit.airBaseCombatStr() * pHeadSelectedUnit.currHitPoints())) / (float(pHeadSelectedUnit.maxHitPoints()))), pHeadSelectedUnit.airBaseCombatStr(), CyGame().getSymbolID(FontSymbols.STRENGTH_CHAR))
else:
szRightBuffer = u"%d%c" %(pHeadSelectedUnit.airBaseCombatStr(), CyGame().getSymbolID(FontSymbols.STRENGTH_CHAR))
else:
if pHeadSelectedUnit.canFight():
szLeftBuffer = localText.getText("INTERFACE_PANE_STRENGTH", ())
if pHeadSelectedUnit.isFighting():
szRightBuffer = u"?/%d%c" %(pHeadSelectedUnit.baseCombatStr(), CyGame().getSymbolID(FontSymbols.STRENGTH_CHAR))
elif pHeadSelectedUnit.isHurt():
szRightBuffer = u"%.1f/%d%c" %(((float(pHeadSelectedUnit.baseCombatStr() * pHeadSelectedUnit.currHitPoints())) / (float(pHeadSelectedUnit.maxHitPoints()))), pHeadSelectedUnit.baseCombatStr(), CyGame().getSymbolID(FontSymbols.STRENGTH_CHAR))
else:
szRightBuffer = u"%d%c" %(pHeadSelectedUnit.baseCombatStr(), CyGame().getSymbolID(FontSymbols.STRENGTH_CHAR))
szBuffer = szLeftBuffer + szRightBuffer
if szBuffer:
screen.appendTableRow("SelectedUnitText")
screen.setTableText("SelectedUnitText", 0, iRow, szLeftBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_LEFT_JUSTIFY)
screen.setTableText("SelectedUnitText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_RIGHT_JUSTIFY)
screen.show("SelectedUnitText")
screen.show("SelectedUnitPanel")
iRow += 1
### Unit Movement
szLeftBuffer = localText.getText("INTERFACE_PANE_MOVEMENT", ())
szRightBuffer = u""
if MainOpt.isShowUnitMovementPointsFraction():
szRightBuffer = u"%d%c" %(pHeadSelectedUnit.baseMoves(), CyGame().getSymbolID(FontSymbols.MOVES_CHAR))
if (pHeadSelectedUnit.movesLeft() == 0):
szRightBuffer = u"0/" + szRightBuffer
elif (pHeadSelectedUnit.movesLeft() == pHeadSelectedUnit.baseMoves() * gc.getMOVE_DENOMINATOR()):
pass
else:
fCurrMoves = float(pHeadSelectedUnit.movesLeft()) / gc.getMOVE_DENOMINATOR()
szRightBuffer = (u"%.1f/" % fCurrMoves) + szRightBuffer
else:
if (pHeadSelectedUnit.movesLeft() % gc.getMOVE_DENOMINATOR()) > 0:
iDenom = 1
else:
iDenom = 0
iCurrMoves = ((pHeadSelectedUnit.movesLeft() / gc.getMOVE_DENOMINATOR()) + iDenom)
if (pHeadSelectedUnit.baseMoves() == iCurrMoves):
szRightBuffer = u"%d%c" %(pHeadSelectedUnit.baseMoves(), CyGame().getSymbolID(FontSymbols.MOVES_CHAR))
else:
szRightBuffer = u"%d/%d%c" %(iCurrMoves, pHeadSelectedUnit.baseMoves(), CyGame().getSymbolID(FontSymbols.MOVES_CHAR))
screen.appendTableRow("SelectedUnitText")
screen.setTableText("SelectedUnitText", 0, iRow, szLeftBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_LEFT_JUSTIFY)
screen.setTableText("SelectedUnitText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_RIGHT_JUSTIFY)
screen.show("SelectedUnitText")
screen.show("SelectedUnitPanel")
iRow += 1
### Unit Level
if pHeadSelectedUnit.getLevel() > 0:
szLeftBuffer = localText.getText("INTERFACE_PANE_LEVEL", ())
szRightBuffer = u"%d" %(pHeadSelectedUnit.getLevel())
screen.appendTableRow("SelectedUnitText")
screen.setTableText("SelectedUnitText", 0, iRow, szLeftBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_LEFT_JUSTIFY)
screen.setTableText("SelectedUnitText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_RIGHT_JUSTIFY)
screen.show("SelectedUnitText")
screen.show("SelectedUnitPanel")
iRow += 1
### Unit Experience
if pHeadSelectedUnit.getExperience() > 0 and not pHeadSelectedUnit.isFighting():
szLeftBuffer = localText.getText("INTERFACE_PANE_EXPERIENCE", ())
szRightBuffer = u"(%d/%d)" %(pHeadSelectedUnit.getExperience(), pHeadSelectedUnit.experienceNeeded())
screen.appendTableRow("SelectedUnitText")
screen.setTableText("SelectedUnitText", 0, iRow, szLeftBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_LEFT_JUSTIFY)
screen.setTableText("SelectedUnitText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, -1, -1, CvUtil.FONT_RIGHT_JUSTIFY)
screen.show("SelectedUnitText")
screen.show("SelectedUnitPanel")
iRow += 1
### Unit Promotions
iPromotionCount = 0
i = 0
for i in xrange(gc.getNumPromotionInfos()):
if pHeadSelectedUnit.isHasPromotion(i):
sPromotion = gc.getPromotionInfo(i).getType()
sLast = sPromotion[len(sPromotion) -1]
if sLast.isdigit():
sPromotion = sPromotion[:len(sPromotion) -1] + str(int(sLast) +1)
if gc.getInfoTypeForString(sPromotion) > -1:
if pHeadSelectedUnit.isHasPromotion(gc.getInfoTypeForString(sPromotion)):
continue
szName = "PromotionButton" + str(i)
self.setPromotionButtonPosition(szName, iPromotionCount)
screen.moveToFront(szName)
screen.show(szName)
iPromotionCount = iPromotionCount + 1
if pSelectedGroup:
iNodeCount = pSelectedGroup.getLengthMissionQueue()
if iNodeCount > 1:
for i in xrange(iNodeCount):
szLeftBuffer = u""
szRightBuffer = u""
if gc.getMissionInfo(pSelectedGroup.getMissionType(i)).isBuild():
if i == 0:
szLeftBuffer = gc.getBuildInfo(pSelectedGroup.getMissionData1(i)).getDescription()
szRightBuffer = localText.getText("INTERFACE_CITY_TURNS", (pSelectedGroup.plot().getBuildTurnsLeft(pSelectedGroup.getMissionData1(i), 0, 0), ))
else:
szLeftBuffer = u"%s..." %(gc.getBuildInfo(pSelectedGroup.getMissionData1(i)).getDescription())
else:
szLeftBuffer = u"%s..." %(gc.getMissionInfo(pSelectedGroup.getMissionType(i)).getDescription())
szBuffer = szLeftBuffer + " " + szRightBuffer
screen.appendTableRow("SelectedUnitText")
screen.setTableText("SelectedUnitText", 0, iRow, szLeftBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, i, -1, CvUtil.FONT_LEFT_JUSTIFY)
screen.setTableText("SelectedUnitText", 1, iRow, szRightBuffer, "", WidgetTypes.WIDGET_HELP_SELECTED, i, -1, CvUtil.FONT_RIGHT_JUSTIFY)
screen.show("SelectedUnitText")
screen.show("SelectedUnitPanel")
iRow += 1
return 0
# Will update the scores
def updateScoreStrings( self ):
screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
screen.hide("ScoreBackground")
# BUG - Align Icons - start
for i in xrange( gc.getMAX_PLAYERS() ):
szName = "ScoreText" + str(i)
screen.hide( szName )
szName = "ScoreTech" + str(i)
screen.hide( szName )
for j in xrange( Scoreboard.NUM_PARTS ):
szName = "ScoreText%d-%d" %( i, j )
screen.hide( szName )
# BUG - Align Icons - end
iWidth = 0
iCount = 0
iBtnHeight = 22
if ((CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY)):
if (CyInterface().isScoresVisible() and not CyInterface().isCityScreenUp() and CyEngine().isGlobeviewUp() == false):
# BUG - Align Icons - start
bAlignIcons = ScoreOpt.isAlignIcons()
if (bAlignIcons):
scores = Scoreboard.Scoreboard()
# BUG - Align Icons - end
# BUG - 3.17 No Espionage - start
bEspionage = GameUtil.isEspionage()
# BUG - 3.17 No Espionage - end
# BUG - Power Rating - start
bShowPower = ScoreOpt.isShowPower()
if (bShowPower):
iPlayerPower = gc.getActivePlayer().getPower()
iPowerColor = ScoreOpt.getPowerColor()
iHighPowerColor = ScoreOpt.getHighPowerColor()
iLowPowerColor = ScoreOpt.getLowPowerColor()
if (bEspionage):
iDemographicsMission = -1
for iMissionLoop in xrange(gc.getNumEspionageMissionInfos()):
if (gc.getEspionageMissionInfo(iMissionLoop).isSeeDemographics()):
iDemographicsMission = iMissionLoop
break
if (iDemographicsMission == -1):
bShowPower = False
# BUG - Power Rating - end
i = gc.getMAX_CIV_TEAMS() - 1
while (i > -1):
eTeam = gc.getGame().getRankTeam(i)
if (gc.getTeam(gc.getGame().getActiveTeam()).isHasMet(eTeam) or gc.getTeam(eTeam).isHuman() or gc.getGame().isDebugMode()):
# BUG - Align Icons - start
if (bAlignIcons):
scores.addTeam(gc.getTeam(eTeam), i)
# BUG - Align Icons - end
j = gc.getMAX_CIV_PLAYERS() - 1
while (j > -1):
ePlayer = gc.getGame().getRankPlayer(j)
if (not CyInterface().isScoresMinimized() or gc.getGame().getActivePlayer() == ePlayer):
# BUG - Dead Civs - start
if (gc.getPlayer(ePlayer).isEverAlive() and not gc.getPlayer(ePlayer).isBarbarian()
and (gc.getPlayer(ePlayer).isAlive() or ScoreOpt.isShowDeadCivs())):
# BUG - Dead Civs - end
# BUG - Minor Civs - start
if (not gc.getPlayer(ePlayer).isMinorCiv() or ScoreOpt.isShowMinorCivs()):
# BUG - Minor Civs - end
if (gc.getPlayer(ePlayer).getTeam() == eTeam):
szBuffer = u"<font=2>"
# BUG - Align Icons - start
if (bAlignIcons):
scores.addPlayer(gc.getPlayer(ePlayer), j)
# BUG: Align Icons continues throughout -- if (bAlignIcons): scores.setFoo(foo)
# BUG - Align Icons - end
if (gc.getGame().isGameMultiPlayer()):
if (not (gc.getPlayer(ePlayer).isTurnActive())):
szBuffer = szBuffer + "*"
if (bAlignIcons):
scores.setWaiting()
# BUG - Dead Civs - start
if (ScoreOpt.isUsePlayerName()):
szPlayerName = gc.getPlayer(ePlayer).getName()
else:
szPlayerName = gc.getLeaderHeadInfo(gc.getPlayer(ePlayer).getLeaderType()).getDescription()
if (ScoreOpt.isShowBothNames()):
szCivName = gc.getPlayer(ePlayer).getCivilizationShortDescription(0)
szPlayerName = szPlayerName + "/" + szCivName
elif (ScoreOpt.isShowBothNamesShort()):
szCivName = gc.getPlayer(ePlayer).getCivilizationDescription(0)
szPlayerName = szPlayerName + "/" + szCivName
elif (ScoreOpt.isShowLeaderName()):
szPlayerName = szPlayerName
elif (ScoreOpt.isShowCivName()):
szCivName = gc.getPlayer(ePlayer).getCivilizationShortDescription(0)
szPlayerName = szCivName
else:
szCivName = gc.getPlayer(ePlayer).getCivilizationDescription(0)
szPlayerName = szCivName
if (not gc.getPlayer(ePlayer).isAlive() and ScoreOpt.isShowDeadTag()):
szPlayerScore = localText.getText("TXT_KEY_BUG_DEAD_CIV", ())
if (bAlignIcons):
scores.setScore(szPlayerScore)
else:
iScore = gc.getGame().getPlayerScore(ePlayer)
szPlayerScore = u"%d" % iScore
if (bAlignIcons):
scores.setScore(szPlayerScore)
# BUG - Score Delta - start
if (ScoreOpt.isShowScoreDelta()):
iGameTurn = gc.getGame().getGameTurn()
if (ePlayer >= gc.getGame().getActivePlayer()):
iGameTurn -= 1
if (ScoreOpt.isScoreDeltaIncludeCurrentTurn()):
iScoreDelta = iScore
elif (iGameTurn >= 0):
iScoreDelta = gc.getPlayer(ePlayer).getScoreHistory(iGameTurn)
else:
iScoreDelta = 0
iPrevGameTurn = iGameTurn - 1
if (iPrevGameTurn >= 0):
iScoreDelta -= gc.getPlayer(ePlayer).getScoreHistory(iPrevGameTurn)
if (iScoreDelta != 0):
if (iScoreDelta > 0):
iColorType = gc.getInfoTypeForString("COLOR_GREEN")
elif (iScoreDelta < 0):
iColorType = gc.getInfoTypeForString("COLOR_RED")
szScoreDelta = "%+d" % iScoreDelta
if (iColorType >= 0):
szScoreDelta = localText.changeTextColor(szScoreDelta, iColorType)
szPlayerScore += szScoreDelta + u" "
if (bAlignIcons):
scores.setScoreDelta(szScoreDelta)
# BUG - Score Delta - end
if (not CyInterface().isFlashingPlayer(ePlayer) or CyInterface().shouldFlash(ePlayer)):
if (ePlayer == gc.getGame().getActivePlayer()):
szPlayerName = u"[<color=%d,%d,%d,%d>%s</color>]" %(gc.getPlayer(ePlayer).getPlayerTextColorR(), gc.getPlayer(ePlayer).getPlayerTextColorG(), gc.getPlayer(ePlayer).getPlayerTextColorB(), gc.getPlayer(ePlayer).getPlayerTextColorA(), szPlayerName)
else:
if (not gc.getPlayer(ePlayer).isAlive() and ScoreOpt.isGreyOutDeadCivs()):
szPlayerName = u"<color=%d,%d,%d,%d>%s</color>" %(175, 175, 175, gc.getPlayer(ePlayer).getPlayerTextColorA(), szPlayerName)
else:
szPlayerName = u"<color=%d,%d,%d,%d>%s</color>" %(gc.getPlayer(ePlayer).getPlayerTextColorR(), gc.getPlayer(ePlayer).getPlayerTextColorG(), gc.getPlayer(ePlayer).getPlayerTextColorB(), gc.getPlayer(ePlayer).getPlayerTextColorA(), szPlayerName)
szTempBuffer = u"%s: %s" %(szPlayerScore, szPlayerName)
szBuffer = szBuffer + szTempBuffer
if (bAlignIcons):
scores.setName(szPlayerName)
scores.setID(u"<color=%d,%d,%d,%d>%d</color>" %(gc.getPlayer(ePlayer).getPlayerTextColorR(), gc.getPlayer(ePlayer).getPlayerTextColorG(), gc.getPlayer(ePlayer).getPlayerTextColorB(), gc.getPlayer(ePlayer).getPlayerTextColorA(), ePlayer))
if (gc.getPlayer(ePlayer).isAlive()):
if (bAlignIcons):
scores.setAlive()
# BUG: Rest of Dead Civs change is merely indentation by 1 level ...
if (gc.getTeam(eTeam).isAlive()):
if ( not (gc.getTeam(gc.getGame().getActiveTeam()).isHasMet(eTeam)) ):
szBuffer = szBuffer + (" ?")
if (bAlignIcons):
scores.setNotMet()
if (gc.getTeam(eTeam).isAtWar(gc.getGame().getActiveTeam())):
szBuffer = szBuffer + "(" + localText.getColorText("TXT_KEY_CONCEPT_WAR", (), gc.getInfoTypeForString("COLOR_RED")).upper() + ")"
if (bAlignIcons):
scores.setWar()
elif (gc.getTeam(gc.getGame().getActiveTeam()).isForcePeace(eTeam)):
if (bAlignIcons):
scores.setPeace()
elif (gc.getTeam(eTeam).isAVassal()):
for iOwnerTeam in xrange(gc.getMAX_TEAMS()):
if (gc.getTeam(eTeam).isVassal(iOwnerTeam) and gc.getTeam(gc.getGame().getActiveTeam()).isForcePeace(iOwnerTeam)):
if (bAlignIcons):
scores.setPeace()
break
if (gc.getPlayer(ePlayer).canTradeNetworkWith(gc.getGame().getActivePlayer()) and (ePlayer != gc.getGame().getActivePlayer())):
szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.TRADE_CHAR))
szBuffer = szBuffer + szTempBuffer
if (bAlignIcons):
scores.setTrade()
if (gc.getTeam(eTeam).isOpenBorders(gc.getGame().getActiveTeam())):
szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.OPEN_BORDERS_CHAR))
szBuffer = szBuffer + szTempBuffer
if (bAlignIcons):
scores.setBorders()
if (gc.getTeam(eTeam).isDefensivePact(gc.getGame().getActiveTeam())):
szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.DEFENSIVE_PACT_CHAR))
szBuffer = szBuffer + szTempBuffer
if (bAlignIcons):
scores.setPact()
if (gc.getPlayer(ePlayer).getStateReligion() != -1):
if (gc.getPlayer(ePlayer).hasHolyCity(gc.getPlayer(ePlayer).getStateReligion())):
szTempBuffer = u"%c" %(gc.getReligionInfo(gc.getPlayer(ePlayer).getStateReligion()).getHolyCityChar())
else:
szTempBuffer = u"%c" %(gc.getReligionInfo(gc.getPlayer(ePlayer).getStateReligion()).getChar())
szBuffer = szBuffer + szTempBuffer
if (bAlignIcons):
scores.setReligion(szTempBuffer)
if (bEspionage and gc.getTeam(eTeam).getEspionagePointsAgainstTeam(gc.getGame().getActiveTeam()) < gc.getTeam(gc.getGame().getActiveTeam()).getEspionagePointsAgainstTeam(eTeam)):
szTempBuffer = u"%c" %(gc.getCommerceInfo(CommerceTypes.COMMERCE_ESPIONAGE).getChar())
szBuffer = szBuffer + szTempBuffer
if (bAlignIcons):
scores.setEspionage()
bEspionageCanSeeResearch = False
if (bEspionage):
for iMissionLoop in xrange(gc.getNumEspionageMissionInfos()):
if (gc.getEspionageMissionInfo(iMissionLoop).isSeeResearch()):
bEspionageCanSeeResearch = gc.getActivePlayer().canDoEspionageMission(iMissionLoop, ePlayer, None, -1)
break
if (((gc.getPlayer(ePlayer).getTeam() == gc.getGame().getActiveTeam()) and (gc.getTeam(gc.getGame().getActiveTeam()).getNumMembers() > 1)) or (gc.getTeam(gc.getPlayer(ePlayer).getTeam()).isVassal(gc.getGame().getActiveTeam())) or gc.getGame().isDebugMode() or bEspionageCanSeeResearch):
if (gc.getPlayer(ePlayer).getCurrentResearch() != -1):
szTempBuffer = u"-%s (%d)" %(gc.getTechInfo(gc.getPlayer(ePlayer).getCurrentResearch()).getDescription(), gc.getPlayer(ePlayer).getResearchTurnsLeft(gc.getPlayer(ePlayer).getCurrentResearch(), True))
szBuffer = szBuffer + szTempBuffer
if (bAlignIcons):
scores.setResearch(gc.getPlayer(ePlayer).getCurrentResearch(), gc.getPlayer(ePlayer).getResearchTurnsLeft(gc.getPlayer(ePlayer).getCurrentResearch(), True))
# BUG: ...end of indentation
# BUG - Dead Civs - end
# BUG - Power Rating - start
# if on, show according to espionage "see demographics" mission
if (bShowPower
and (gc.getGame().getActivePlayer() != ePlayer
and (not bEspionage or gc.getActivePlayer().canDoEspionageMission(iDemographicsMission, ePlayer, None, -1)))):
iPower = gc.getPlayer(ePlayer).getPower()
if (iPower > 0): # avoid divide by zero
fPowerRatio = float(iPlayerPower) / float(iPower)
if (ScoreOpt.isPowerThemVersusYou()):
if (fPowerRatio > 0):
fPowerRatio = 1.0 / fPowerRatio
else:
fPowerRatio = 99.0
cPower = gc.getGame().getSymbolID(FontSymbols.STRENGTH_CHAR)
szTempBuffer = BugUtil.formatFloat(fPowerRatio, ScoreOpt.getPowerDecimals()) + u"%c" % (cPower)
if (iHighPowerColor >= 0 and fPowerRatio >= ScoreOpt.getHighPowerRatio()):
szTempBuffer = localText.changeTextColor(szTempBuffer, iHighPowerColor)
elif (iLowPowerColor >= 0 and fPowerRatio <= ScoreOpt.getLowPowerRatio()):
szTempBuffer = localText.changeTextColor(szTempBuffer, iLowPowerColor)
elif (iPowerColor >= 0):
szTempBuffer = localText.changeTextColor(szTempBuffer, iPowerColor)
szBuffer = szBuffer + u" " + szTempBuffer
if (bAlignIcons):
scores.setPower(szTempBuffer)
# BUG - Power Rating - end
# BUG - Attitude Icons - start
if (ScoreOpt.isShowAttitude()):
if (not gc.getPlayer(ePlayer).isHuman()):
iAtt = gc.getPlayer(ePlayer).AI_getAttitude(gc.getGame().getActivePlayer())
cAtt = unichr(ord(unichr(CyGame().getSymbolID(FontSymbols.POWER_CHAR) + 4)) + iAtt)
szBuffer += cAtt
if (bAlignIcons):
scores.setAttitude(cAtt)
# BUG - Attitude Icons - end
# BUG - Refuses to Talk - start
if (not DiplomacyUtil.isWillingToTalk(ePlayer, gc.getGame().getActivePlayer())):
cRefusesToTalk = u"!"
szBuffer += cRefusesToTalk
if (bAlignIcons):
scores.setWontTalk()
# BUG - Refuses to Talk - end
# BUG - Worst Enemy - start
if (ScoreOpt.isShowWorstEnemy()):
if (AttitudeUtil.isWorstEnemy(ePlayer, gc.getGame().getActivePlayer())):
cWorstEnemy = u"%c" %(CyGame().getSymbolID(FontSymbols.ANGRY_POP_CHAR))
szBuffer += cWorstEnemy
if (bAlignIcons):
scores.setWorstEnemy()
# BUG - Worst Enemy - end
# BUG - WHEOOH - start
if (ScoreOpt.isShowWHEOOH()):
if (PlayerUtil.isWHEOOH(ePlayer, PlayerUtil.getActivePlayerID())):
szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.OCCUPATION_CHAR))
szBuffer = szBuffer + szTempBuffer
if (bAlignIcons):
scores.setWHEOOH()
# BUG - WHEOOH - end
# BUG - Num Cities - start
if (ScoreOpt.isShowCountCities()):
if (PlayerUtil.canSeeCityList(ePlayer)):
szTempBuffer = u"%d" % PlayerUtil.getNumCities(ePlayer)
else:
szTempBuffer = BugUtil.colorText(u"%d" % PlayerUtil.getNumRevealedCities(ePlayer), "COLOR_CYAN")
szBuffer = szBuffer + " " + szTempBuffer
if (bAlignIcons):
scores.setNumCities(szTempBuffer)
# BUG - Num Cities - end
if (CyGame().isNetworkMultiPlayer()):
szTempBuffer = CyGameTextMgr().getNetStats(ePlayer)
szBuffer = szBuffer + szTempBuffer
if (bAlignIcons):
scores.setNetStats(szTempBuffer)
if (gc.getPlayer(ePlayer).isHuman() and CyInterface().isOOSVisible()):
szTempBuffer = u" <color=255,0,0>* %s *</color>" %(CyGameTextMgr().getOOSSeeds(ePlayer))
szBuffer = szBuffer + szTempBuffer
if (bAlignIcons):
scores.setNetStats(szTempBuffer)
szBuffer = szBuffer + "</font>"
# BUG - Align Icons - start
if (not bAlignIcons):
if ( CyInterface().determineWidth( szBuffer ) > iWidth ):
iWidth = CyInterface().determineWidth( szBuffer )
szName = "ScoreText" + str(ePlayer)
if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW or CyInterface().isInAdvancedStart()):
yCoord = yResolution - 206
else:
yCoord = yResolution - 88
# BUG - Dead Civs - start
# Don't try to contact dead civs
if (gc.getPlayer(ePlayer).isAlive()):
iWidgetType = WidgetTypes.WIDGET_CONTACT_CIV
iPlayer = ePlayer
else:
iWidgetType = WidgetTypes.WIDGET_GENERAL
iPlayer = -1
screen.setText( szName, "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, xResolution - 12, yCoord - (iCount * iBtnHeight), -0.3, FontTypes.SMALL_FONT, iWidgetType, iPlayer, -1 )
# BUG - Dead Civs - end
screen.show( szName )
CyInterface().checkFlashReset(ePlayer)
iCount = iCount + 1
# BUG - Align Icons - end
j = j - 1
i = i - 1
# BUG - Align Icons - start
if (bAlignIcons):
scores.draw(screen)
else:
if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW or CyInterface().isInAdvancedStart()):
yCoord = yResolution - 186
else:
yCoord = yResolution - 68
screen.setPanelSize( "ScoreBackground", xResolution - 21 - iWidth, yCoord - (iBtnHeight * iCount) - 4, iWidth + 12, (iBtnHeight * iCount) + 8 )
screen.show("ScoreBackground")
# BUG - Align Icons - end
def updateHelpStrings(self):
screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE_ALL:
screen.setHelpTextString("")
else:
screen.setHelpTextString(CyInterface().getHelpString())
return 0
# Will set the promotion button position
def setPromotionButtonPosition(self, szName, iPromotionCount):
screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
yResolution = screen.getYResolution()
if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW:
screen.moveItem(szName, 266 - (24 * (iPromotionCount / 6)), yResolution - 144 + (24 * (iPromotionCount % 6)), -0.3)
# Will set the selection button position
def setResearchButtonPosition(self, szButtonID, iCount ):
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
xResolution = screen.getXResolution()
# BUG - Bars on single line for higher resolution screens - start
if (xResolution >= 1440
and (MainOpt.isShowGGProgressBar() or MainOpt.isShowGPProgressBar())):
xCoord = 268 + (xResolution - 1440) / 2
xCoord += 6 + 84
screen.moveItem( szButtonID, 264 + ( ( xResolution - 1024 ) / 2 ) + ( 34 * ( iCount % 15 ) ), 0 + ( 34 * ( iCount / 15 ) ), -0.3 )
else:
xCoord = 264 + ( ( xResolution - 1024 ) / 2 )
screen.moveItem( szButtonID, xCoord + ( 34 * ( iCount % 15 ) ), 0 + ( 34 * ( iCount / 15 ) ), -0.3 )
# BUG - Bars on single line for higher resolution screens - end
# Will set the selection button position
def setScoreTextPosition( self, szButtonID, iWhichLine ):
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
yResolution = screen.getYResolution()
if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW ):
yCoord = yResolution - 180
else:
yCoord = yResolution - 88
screen.moveItem( szButtonID, 996, yCoord - (iWhichLine * 18), -0.3 )
# Will build the globeview UI
def updateGlobeviewButtons( self ):
kInterface = CyInterface()
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
kEngine = CyEngine()
kGLM = CyGlobeLayerManager()
iNumLayers = kGLM.getNumLayers()
iCurrentLayerID = kGLM.getCurrentLayerID()
# Positioning things based on the visibility of the globe
if kEngine.isGlobeviewUp():
screen.setHelpTextArea( 350, FontTypes.SMALL_FONT, 7, yResolution - 50, -0.1, False, "", True, False, CvUtil.FONT_LEFT_JUSTIFY, HELP_TEXT_MINIMUM_WIDTH )
else:
if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW ):
screen.setHelpTextArea( 350, FontTypes.SMALL_FONT, 7, yResolution - 172, -0.1, False, "", True, False, CvUtil.FONT_LEFT_JUSTIFY, HELP_TEXT_MINIMUM_WIDTH )
else:
screen.setHelpTextArea( 350, FontTypes.SMALL_FONT, 7, yResolution - 50, -0.1, False, "", True, False, CvUtil.FONT_LEFT_JUSTIFY, HELP_TEXT_MINIMUM_WIDTH )
# Set base Y position for the LayerOptions, if we find them
if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE:
iY = yResolution - iGlobeLayerOptionsY_Minimal
else:
iY = yResolution - iGlobeLayerOptionsY_Regular
# Hide the layer options ... all of them
for i in range (20):
szName = "GlobeLayerOption" + str(i)
screen.hide(szName)
# Setup the GlobeLayer panel
iNumLayers = kGLM.getNumLayers()
if kEngine.isGlobeviewUp() and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL:
# set up panel
if iCurrentLayerID != -1 and kGLM.getLayer(iCurrentLayerID).getNumOptions() != 0:
bHasOptions = True
else:
bHasOptions = False
screen.hide("ScoreBackground")
# set up toggle button
screen.setState("GlobeToggle", True)
# Set GlobeLayer indicators correctly
for i in xrange(kGLM.getNumLayers()):
szButtonID = "GlobeLayer" + str(i)
screen.setState( szButtonID, iCurrentLayerID == i )
# Set up options pane
if bHasOptions:
kLayer = kGLM.getLayer(iCurrentLayerID)
iCurY = iY
iNumOptions = kLayer.getNumOptions()
iCurOption = kLayer.getCurrentOption()
iMaxTextWidth = -1
for iTmp in xrange(iNumOptions):
iOption = iTmp # iNumOptions - iTmp - 1
szName = "GlobeLayerOption" + str(iOption)
szCaption = kLayer.getOptionName(iOption)
if(iOption == iCurOption):
szBuffer = " <color=0,255,0>%s</color> " % (szCaption)
else:
szBuffer = " %s " % (szCaption)
iTextWidth = CyInterface().determineWidth( szBuffer )
screen.setText( szName, "Background", szBuffer, CvUtil.FONT_LEFT_JUSTIFY, xResolution - 9 - iTextWidth, iCurY-iGlobeLayerOptionHeight-10, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GLOBELAYER_OPTION, iOption, -1 )
screen.show( szName )
iCurY -= iGlobeLayerOptionHeight
if iTextWidth > iMaxTextWidth:
iMaxTextWidth = iTextWidth
#make extra space
iCurY -= iGlobeLayerOptionHeight;
iPanelWidth = iMaxTextWidth + 32
iPanelHeight = iY - iCurY
iPanelX = xResolution - 14 - iPanelWidth
iPanelY = iCurY
screen.setPanelSize( "ScoreBackground", iPanelX, iPanelY, iPanelWidth, iPanelHeight )
screen.show("ScoreBackground")
else:
if iCurrentLayerID != -1:
kLayer = kGLM.getLayer(iCurrentLayerID)
if kLayer.getName() == "RESOURCES":
screen.setState("ResourceIcons", True)
else:
screen.setState("ResourceIcons", False)
if kLayer.getName() == "UNITS":
screen.setState("UnitIcons", True)
else:
screen.setState("UnitIcons", False)
else:
screen.setState("ResourceIcons", False)
screen.setState("UnitIcons", False)
screen.setState("Grid", CyUserProfile().getGrid())
screen.setState("BareMap", CyUserProfile().getMap())
screen.setState("Yields", CyUserProfile().getYields())
screen.setState("ScoresVisible", CyUserProfile().getScores())
screen.hide("InterfaceGlobeLayerPanel")
screen.setState("GlobeToggle", False )
# Update minimap buttons
def setMinimapButtonVisibility(self, bVisible):
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
kInterface = CyInterface()
kGLM = CyGlobeLayerManager()
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
if ( CyInterface().isCityScreenUp() ):
bVisible = False
kMainButtons = ["UnitIcons", "Grid", "BareMap", "Yields", "ScoresVisible", "ResourceIcons"]
kGlobeButtons = []
for i in xrange(kGLM.getNumLayers()):
szButtonID = "GlobeLayer" + str(i)
kGlobeButtons.append(szButtonID)
if bVisible:
if CyEngine().isGlobeviewUp():
kHide = kMainButtons
kShow = kGlobeButtons
else:
kHide = kGlobeButtons
kShow = kMainButtons
screen.show("GlobeToggle")
else:
kHide = kMainButtons + kGlobeButtons
kShow = []
screen.hide("GlobeToggle")
for szButton in kHide:
screen.hide(szButton)
if CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE:
iY = yResolution - iMinimapButtonsY_Minimal
iGlobeY = yResolution - iGlobeButtonY_Minimal
else:
iY = yResolution - iMinimapButtonsY_Regular
iGlobeY = yResolution - iGlobeButtonY_Regular
iBtnX = xResolution - 39
screen.moveItem("GlobeToggle", iBtnX, iGlobeY, 0.0)
iBtnAdvance = 28
iBtnX = iBtnX - len(kShow)*iBtnAdvance - 10
if len(kShow) > 0:
i = 0
for szButton in kShow:
screen.moveItem(szButton, iBtnX, iY, 0.0)
screen.moveToFront(szButton)
screen.show(szButton)
iBtnX += iBtnAdvance
i += 1
def createGlobeviewButtons( self ):
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
kEngine = CyEngine()
kGLM = CyGlobeLayerManager()
iNumLayers = kGLM.getNumLayers()
for i in range (kGLM.getNumLayers()):
szButtonID = "GlobeLayer" + str(i)
kLayer = kGLM.getLayer(i)
szStyle = kLayer.getButtonStyle()
if szStyle == 0 or szStyle == "":
szStyle = "Button_HUDSmall_Style"
screen.addCheckBoxGFC( szButtonID, "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_GLOBELAYER, i, -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.setStyle( szButtonID, szStyle )
screen.hide( szButtonID )
def createMinimapButtons( self ):
screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
screen.addCheckBoxGFC( "UnitIcons", "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_UNIT_ICONS).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.setStyle( "UnitIcons", "Button_HUDGlobeUnit_Style")
screen.setState( "UnitIcons", False )
screen.hide("UnitIcons")
screen.addCheckBoxGFC( "Grid", "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_GRID).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.setStyle( "Grid", "Button_HUDBtnGrid_Style")
screen.setState( "Grid", False )
screen.hide("Grid")
screen.addCheckBoxGFC( "BareMap", "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_BARE_MAP).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.setStyle( "BareMap", "Button_HUDBtnClearMap_Style")
screen.setState( "BareMap", False )
screen.hide("BareMap")
screen.addCheckBoxGFC( "Yields", "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_YIELDS).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.setStyle( "Yields", "Button_HUDBtnTileAssets_Style")
screen.setState( "Yields", False )
screen.hide("Yields")
screen.addCheckBoxGFC( "ScoresVisible", "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_SCORES).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.setStyle( "ScoresVisible", "Button_HUDBtnRank_Style")
screen.setState( "ScoresVisible", True )
screen.hide("ScoresVisible")
screen.addCheckBoxGFC( "ResourceIcons", "", "", 0, 0, 28, 28, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_RESOURCE_ALL).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.setStyle( "ResourceIcons", "Button_HUDBtnResources_Style")
screen.setState( "ResourceIcons", False )
screen.hide("ResourceIcons")
screen.addCheckBoxGFC( "GlobeToggle", "", "", -1, -1, 36, 36, WidgetTypes.WIDGET_ACTION, gc.getControlInfo(ControlTypes.CONTROL_GLOBELAYER).getActionInfoIndex(), -1, ButtonStyles.BUTTON_STYLE_LABEL )
screen.setStyle( "GlobeToggle", "Button_HUDZoom_Style")
screen.setState( "GlobeToggle", False )
screen.hide("GlobeToggle")
def handleInput (self, inputClass):
'Handles input for this screen'
if inputClass.getNotifyCode() == 11:
# Great People Actions
if inputClass.getData1() > 899 and inputClass.getData1() < 1000:
if CyInterface().shiftKey():
return
CyMessageControl().sendModNetMessage(3010, g_pSelectedUnit.getOwner(), g_pSelectedUnit.getID(), inputClass.getData1(), inputClass.getData2())
# Founding Religions
elif inputClass.getData1() == 1748:
CyMessageControl().sendModNetMessage(1748, g_pSelectedUnit.getOwner(), g_pSelectedUnit.getID(), inputClass.getData2(), -1)
# Inquisition
elif inputClass.getData1() == 8586:
CyMessageControl().sendModNetMessage(inputClass.getData1(), g_pSelectedUnit.getOwner(), g_pSelectedUnit.getID(), inputClass.getData2(), -1)
# Great Person Bar
elif inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED and inputClass.getFunctionName().startswith("GreatPersonBar"):
pPlayer = gc.getActivePlayer()
iCity = inputClass.getData1()
if iCity == -1:
GPCityList = HR.getGreatPersonTopCities(pPlayer, 1)
if GPCityList:
iTurns, iGP, pCity = GPCityList[0]
else:
pCity = None
else:
pCity = gc.getActivePlayer().getCity(iCity)
if pCity:
CyInterface().selectCity(pCity, False)
return 1
# Field of View
elif inputClass.getNotifyCode() == NotifyCode.NOTIFY_SLIDER_NEWSTOP:
if inputClass.getFunctionName() == self.szSliderId:
screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
self.iField_View = inputClass.getData() + 1
self.setFieldofView(screen, False)
self.setFieldofView_Text(screen)
MainOpt.setFieldOfView(self.iField_View)
# Civil War
if inputClass.getFunctionName() == "CivilWarButton":
CivilWar.CivilWar().interfaceScreen()
# Raw Yields
elif inputClass.getFunctionName().startswith("RawYields"):
return self.handleRawYieldsButtons(inputClass)
# Resource Display
elif inputClass.getFunctionName() == "ResourceFilter":
self.iBonusClass = inputClass.getData() - 1
self.updateCityScreen()
# PLE
if (inputClass.getNotifyCode() == NotifyCode.NOTIFY_CURSOR_MOVE_ON) or \
(inputClass.getNotifyCode() == NotifyCode.NOTIFY_CURSOR_MOVE_OFF) or \
(inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED):
if self.MainInterfaceInputMap.has_key(inputClass.getFunctionName()):
return self.MainInterfaceInputMap.get(inputClass.getFunctionName())(inputClass)
if self.MainInterfaceInputMap.has_key(inputClass.getFunctionName() + "1"):
return self.MainInterfaceInputMap.get(inputClass.getFunctionName() + "1")(inputClass)
# BUG Options Button
if inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED:
if inputClass.getFunctionName() == "BUGOptionsScreenWidget":
BugOptionsScreen.showOptionsScreen()
return 1
return 0
def handleRawYieldsButtons(self, inputClass):
iButton = inputClass.getID()
if inputClass.getNotifyCode() == NotifyCode.NOTIFY_CURSOR_MOVE_ON:
self.PLE.displayHelpHover(RAW_YIELD_HELP[iButton])
elif inputClass.getNotifyCode() == NotifyCode.NOTIFY_CURSOR_MOVE_OFF:
self.PLE.hideInfoPane()
elif inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED:
global g_bYieldView
global g_iYieldType
global g_iYieldTiles
if iButton == 0:
g_bYieldView = False
elif iButton in (1, 2, 3):
g_bYieldView = True
g_iYieldType = RawYields.YIELDS[iButton - 1]
elif iButton in (4, 5, 6):
g_bYieldView = True
g_iYieldTiles = RawYields.TILES[iButton - 4]
else:
return 0
CyInterface().setDirty(InterfaceDirtyBits.CityScreen_DIRTY_BIT, True)
return 1
else:
return 0
def update(self, fDelta):
return
def forward(self):
if (not CyInterface().isFocused() or CyInterface().isCityScreenUp()):
if (CyInterface().isCitySelection()):
CyGame().doControl(ControlTypes.CONTROL_NEXTCITY)
else:
CyGame().doControl(ControlTypes.CONTROL_NEXTUNIT)
def back(self):
if (not CyInterface().isFocused() or CyInterface().isCityScreenUp()):
if (CyInterface().isCitySelection()):
CyGame().doControl(ControlTypes.CONTROL_PREVCITY)
else:
CyGame().doControl(ControlTypes.CONTROL_PREVUNIT)
def setFieldofView(self, screen, bDefault):
if bDefault or not MainOpt.isShowFieldOfView():
self._setFieldofView(screen, DEFAULT_FIELD_OF_VIEW)
else:
self._setFieldofView(screen, self.iField_View)
def _setFieldofView(self, screen, iFoV):
if self.iField_View_Prev != iFoV:
gc.setDefineFLOAT("FIELD_OF_VIEW", float(iFoV))
self.iField_View_Prev = iFoV
def setFieldofView_Text(self, screen):
zsFieldOfView_Text = "%s [%i]" % (self.sFieldOfView_Text, self.iField_View)
screen.setLabel(self.szSliderTextId, "", zsFieldOfView_Text, CvUtil.FONT_RIGHT_JUSTIFY, self.iX_FoVSlider, self.iY_FoVSlider + 6, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)