ATTITUDE_COLORS = None
...
def init (colors=DEFAULT_COLORS, modifiers=None):
"""Initializes this module, raising ConfigError if any problems occur."""
# create font icons for each attitude level
global ATTITUDE_ICONS
ATTITUDE_ICONS = [FontUtil.getChar(key) for key in ATTITUDE_KEYS]
if len(ATTITUDE_ICONS) != NUM_ATTITUDES:
raise BugUtil.ConfigError("Failed to create attitude icons")
# convert colors to type IDs
if len(colors) != NUM_ATTITUDES:
raise BugUtil.ConfigError("Expected %d colors" % NUM_ATTITUDES)
global ATTITUDE_COLORS
ATTITUDE_COLORS = map(gc.getInfoTypeForString, colors)
invalidCount = ATTITUDE_COLORS.count(-1)
if invalidCount > 0:
invalid = []
for id, color in zip(ATTITUDE_COLORS, colors):
if id == -1:
invalid.append(color)
raise BugUtil.ConfigError("Given %d invalid colors: %s" % (invalidCount, str(invalid)))
# init modifiers, overriding default list as necessary
if modifiers is not None and (isinstance(modifiers, list) or isinstance(modifiers, tuple)):
global ATTITUDE_MODIFIERS
ATTITUDE_MODIFIERS = tuple(modifiers)
initModifiers()
## Attitude
def hasAttitude (nPlayer, nTarget):
"""Returns True if nTarget can see nPlayer's attitude toward them."""
return (nPlayer != -1 and nTarget != -1 and nPlayer != nTarget
and gc.getTeam(gc.getPlayer(nPlayer).getTeam()).isHasMet(gc.getPlayer(nTarget).getTeam()))
def getAttitudeString (nPlayer, nTarget):
"""Returns the full hover text with attitude modifiers nPlayer has toward nTarget."""
if hasAttitude(nPlayer, nTarget):
return CyGameTextMgr().getAttitudeString(nPlayer, nTarget)
return None
def getAttitudeCategory (nPlayer, nTarget):
"""Returns the attitude level nPlayer has toward nTarget [0,4]."""
if hasAttitude(nPlayer, nTarget):
return gc.getPlayer(nPlayer).AI_getAttitude(nTarget)
return None
def getAttitudeColor (nPlayer, nTarget):
"""Returns the color of the attitude nPlayer has toward nTarget."""
iCategory = getAttitudeCategory(nPlayer, nTarget)
if iCategory is not None:
return ATTITUDE_COLORS[iCategory]
return -1
def getAttitudeIcon (nPlayer, nTarget):
"""Returns the font icon of the attitude nPlayer has toward nTarget."""
iCategory = getAttitudeCategory(nPlayer, nTarget)
if iCategory is not None:
return ATTITUDE_ICONS[iCategory]
return ""
def getAttitudeCount (nPlayer, nTarget):
"""Returns the total attitude modifiers nPlayer has toward nTarget."""
sAttStr = getAttitudeString(nPlayer, nTarget)
if sAttStr == None:
return
nAtt = 0
# TODO: Replace with simple line-by-line handling
# so it doesn't get tricked by leader names (": " fixes issue)
ltPlusAndMinuses = re.findall ("[-+][0-9]+\s?: ", sAttStr)
for i in range (len (ltPlusAndMinuses)):
nAtt += int (ltPlusAndMinuses[i][:-2])
return nAtt
def getAttitudeText (nPlayer, nTarget, bNumber, bSmily, bWorstEnemy, bWarPeace):
"""Returns a string describing the attitude nPlayer has toward nTarget."""
nAttitude = getAttitudeCount (nPlayer, nTarget)
if nAttitude == None:
return None
szText = []
if bSmily:
szText.append(getAttitudeIcon(nPlayer, nTarget))
if bNumber:
szText.append(BugUtil.colorText(u"%+d" % nAttitude, getAttitudeColor(nPlayer, nTarget)))
...