Esempio n. 1
0
    def getFreeSlots(self, planetID):
        planet = client.get(planetID, noUpdate=1)
        system = client.get(self.systemID, noUpdate=1)
        player = client.getPlayer()
        owner = getattr(planet, 'owner', Const.OID_NONE)
        freeSlots = 0
        if owner == player.oid and hasattr(planet, 'slots') and hasattr(
                planet, 'plSlots'):
            freeSlots = planet.plSlots - len(planet.slots)
        if hasattr(system, 'planets'):
            for sPlanetID in system.planets:
                sPlanet = client.get(sPlanetID, noUpdate=1)
                if hasattr(sPlanet, 'prodQueue'):
                    for task in sPlanet.prodQueue:
                        # Target Slot does not changes number of free slots
                        if not task.isShip and hasattr(
                                task, "demolishStruct"
                        ) and task.demolishStruct == 0 and task.targetID == planetID:
                            tech = client.getFullTechInfo(task.techID)
                            # constructing Habitable Surface Expansion increases planet slots
                            if tech.isProject and tech.id == 3802:
                                freeSlots += task.quantity
                            elif tech.isStructure:
                                freeSlots -= task.quantity

        return freeSlots
Esempio n. 2
0
    def getFreeSlots(self, planetID):
        planet = client.get(planetID, noUpdate=1)
        system = client.get(self.systemID, noUpdate=1)
        player = client.getPlayer()
        owner = getattr(planet, "owner", OID_NONE)
        freeSlots = 0
        if owner == player.oid and hasattr(planet, "slots") and hasattr(planet, "plSlots"):
            freeSlots = planet.plSlots - len(planet.slots)
        if hasattr(system, "planets"):
            for sPlanetID in system.planets:
                sPlanet = client.get(sPlanetID, noUpdate=1)
                if hasattr(sPlanet, "prodQueue"):
                    for task in sPlanet.prodQueue:
                        # Target Slot does not changes number of free slots
                        if (
                            not task.isShip
                            and hasattr(task, "demolishStruct")
                            and task.demolishStruct == 0
                            and task.targetID == planetID
                        ):
                            tech = client.getFullTechInfo(task.techID)
                            # constructing Habitable Surface Expansion increases planet slots
                            if tech.isProject and tech.id == 3802:
                                freeSlots += task.quantity
                            elif tech.isStructure:
                                freeSlots -= task.quantity

        return freeSlots
Esempio n. 3
0
def getFullMessageText(message):
    """Gets full text of automaticaly generated message

	If message has no data to generate, it returns empty
	string.
	"""
    text = ""
    if message.has_key("data"):
        sourceID, msgID, locationID, turn, data = message["data"]
        sev = getMsgSeverity(msgID)
        currTurn = client.getTurn()
        player = client.getPlayer()
        # source
        if sourceID != OID_NONE and sourceID != player.oid:
            obj = client.get(sourceID, noUpdate=1)
            if obj:
                source = getattr(obj, "name", res.getUnknownName())
            else:
                source = _("N/A")
        else:
            source = _("-")
        text = "%s%s\n" % (text, _("Source: %s") % source)
        # location
        if locationID != OID_NONE:
            obj = client.get(locationID, noUpdate=1)
            location = getattr(obj, "name", res.getUnknownName())
        else:
            location = _("-")
        text = "%s%s\n" % (text, _("Location: %s") % location)
        text = "%s%s\n" % (text, _("Severity: %s") % _(gdata.msgSeverity[sev]))
        text = "%s%s\n" % (text, _("Time: %s [%s]") % (res.formatTime(turn), res.formatTime(turn - currTurn)))
        text = "%s%s\n" % (text, "")
        text = "%s%s\n" % (text, getMsgText(msgID, data))

    return text
Esempio n. 4
0
def getShortDescr(techID, myDetail=SHORT):
    tech = client.getFullTechInfo(techID)
    techEff = Rules.techImprEff[client.getPlayer().techs.get(
        techID, Rules.techBaseImprovement)]
    result = []
    # specific
    if tech.subtype in descr:
        for detail, attr, text, filter, eff in descr[tech.subtype]:
            if tech.isDefault(attr):
                continue
            if detail <= myDetail:
                if not filter:
                    result.append(_(text))
                elif eff:
                    result.append(
                        _(text) % filter(techEff * getattr(tech, attr)))
                else:
                    result.append(_(text) % filter(getattr(tech, attr)))
    # general
    for detail, attr, text, filter, eff in descr["*"]:
        if tech.isDefault(attr):
            continue
        if detail <= myDetail:
            if not filter:
                result.append(_(text))
            elif eff:
                result.append(_(text) % filter(techEff * getattr(tech, attr)))
            else:
                result.append(_(text) % filter(getattr(tech, attr)))
    if result:
        return string.join(result, ", ")
    else:
        return _("N/A")
Esempio n. 5
0
def getShortDescr(techID, myDetail = SHORT):
    tech = client.getFullTechInfo(techID)
    techEff = Rules.techImprEff[client.getPlayer().techs.get(techID, Rules.techBaseImprovement)]
    result = []
    # specific
    if tech.subtype in descr:
        for detail, attr, text, filter, eff in descr[tech.subtype]:
            if tech.isDefault(attr):
                continue
            if detail <= myDetail:
                if not filter:
                    result.append(_(text))
                elif eff:
                    result.append(_(text) % filter(techEff * getattr(tech, attr)))
                else:
                    result.append(_(text) % filter(getattr(tech, attr)))
    # general
    for detail, attr, text, filter, eff in descr["*"]:
        if tech.isDefault(attr):
            continue
        if detail <= myDetail:
            if not filter:
                result.append(_(text))
            elif eff:
                result.append(_(text) % filter(techEff * getattr(tech, attr)))
            else:
                result.append(_(text) % filter(getattr(tech, attr)))
    if result:
        return string.join(result, ", ")
    else:
        return _("N/A")
Esempio n. 6
0
 def precompute(self):
     self.star_map.rect = self.rect
     self.star_map.precompute()
     player = client.getPlayer()
     if (player.type == Const.T_PIRPLAYER or\
         player.type == Const.T_AIPIRPLAYER) and not self.control_modes['pirate_dialogs']:
         self.control_modes['pirate_dialogs'] = True
         if self.control_modes['hotbuttons']:
             self.initHotbuttons()  #reinit to add the pirate button
     self.miniMap.precompute()
     # self dirty flag
     self.repaint_map = 1
Esempio n. 7
0
 def precompute(self):
     self.star_map.rect = self.rect
     self.star_map.precompute()
     player = client.getPlayer()
     if (player.type == Const.T_PIRPLAYER or\
         player.type == Const.T_AIPIRPLAYER) and not self.control_modes['pirate_dialogs']:
         self.control_modes['pirate_dialogs'] = True
         if self.control_modes['hotbuttons']:
             self.initHotbuttons() #reinit to add the pirate button
     self.miniMap.precompute()
     # self dirty flag
     self.repaint_map = 1
    def __init__(self, parent, id, selectedRecipients):
        wx.Dialog.__init__(self,
                           parent,
                           id, ("Select recipients"),
                           pos=wx.DefaultPosition,
                           size=(300, 320),
                           style=wx.DEFAULT_DIALOG_STYLE)

        sizer = wx.BoxSizer(wx.VERTICAL)

        player = client.getPlayer()

        self.recipients = wx.CheckListBox(self, -1)

        self.items = []
        for contactID in player.diplomacyRels:
            contact = client.get(contactID)
            self.items.append((contact.name, contactID))
            self.recipients.Append(contact.name)

        i = 0
        for name, recipientID in self.items:
            if selectedRecipients.has_key(recipientID):
                self.recipients.Check(i, selectedRecipients[recipientID])
            i += 1

        wx.EVT_CHECKLISTBOX(self.recipients, self.recipients.GetId(),
                            self.OnRecipient)
        sizer.Add(self.recipients, 1, wx.GROW | wx.ALL, 4)

        boxButtons = wx.BoxSizer(wx.HORIZONTAL)

        btn = wx.Button(self, wx.ID_OK, _("&Select"))
        btn.SetDefault()
        boxButtons.Add(btn, 0, wx.ALL, 4)

        btn = wx.Button(self, wx.ID_CANCEL, _("&Cancel"))
        boxButtons.Add(btn, 0, wx.ALL, 4)

        sizer.AddSizer(boxButtons, 0, wx.ALIGN_CENTER, 0)

        accel = wx.AcceleratorTable([
            (wx.ACCEL_ALT, ord('S'), wx.ID_OK),
            (wx.ACCEL_ALT, ord('C'), wx.ID_CANCEL),
        ])
        self.SetAcceleratorTable(accel)

        self.SetSizer(sizer)
        self.SetAutoLayout(True)

        self.selectedRecipients = selectedRecipients
Esempio n. 9
0
	def __init__(self, parent, id, selectedRecipients):
		wx.Dialog.__init__(self, parent, id, ("Select recipients"), pos = wx.DefaultPosition, 
			size = (300, 320), style = wx.DEFAULT_DIALOG_STYLE)
		
		sizer = wx.BoxSizer(wx.VERTICAL)
		
		player = client.getPlayer()

		self.recipients = wx.CheckListBox(self, -1)
		
		self.items = []
		for contactID in player.diplomacyRels:
			contact = client.get(contactID)
			self.items.append((contact.name, contactID))
			self.recipients.Append(contact.name)

		i = 0
		for name, recipientID in self.items:
			if selectedRecipients.has_key(recipientID):
				self.recipients.Check(i, selectedRecipients[recipientID])
			i += 1

		wx.EVT_CHECKLISTBOX(self.recipients, self.recipients.GetId(), self.OnRecipient)
		sizer.Add(self.recipients, 1, wx.GROW|wx.ALL, 4)
		
		boxButtons = wx.BoxSizer(wx.HORIZONTAL)
		
		btn = wx.Button(self, wx.ID_OK, _("&Select"))
		btn.SetDefault()
		boxButtons.Add(btn, 0, wx.ALL, 4)
		
		btn = wx.Button(self, wx.ID_CANCEL, _("&Cancel"))
		boxButtons.Add(btn, 0, wx.ALL, 4)
		
		sizer.AddSizer(boxButtons, 0, wx.ALIGN_CENTER, 0)

		accel = wx.AcceleratorTable([
			(wx.ACCEL_ALT, ord('S'), wx.ID_OK),
			(wx.ACCEL_ALT, ord('C'), wx.ID_CANCEL),
			])
		self.SetAcceleratorTable(accel)
 
 		self.SetSizer(sizer)
		self.SetAutoLayout(True)
		
		self.selectedRecipients = selectedRecipients
Esempio n. 10
0
def getFullMessageText(message):
    """Gets full text of automaticaly generated message

    If message has no data to generate, it returns empty
    string.
    """
    text = ""
    if message.has_key("data"):
        sourceID, msgID, locationID, turn, data = message["data"]
        sev = getMsgSeverity(msgID)
        currTurn = client.getTurn()
        player = client.getPlayer()
        # source
        if sourceID != Const.OID_NONE and sourceID != player.oid:
            obj = client.get(sourceID, noUpdate = 1, publicOnly = 1)
            if obj:
                if hasattr(obj,'customname') and obj.customname:
                        source = _('"%s"') % obj.customname
                else:
                        source = getattr(obj, 'name', res.getUnknownName())
            else:
                source = _('N/A')
        else:
            source = _('-')
        text = '%s%s\n' % (text, _("Source: %s") % source)
        # location
        if locationID != Const.OID_NONE:
            obj = client.get(locationID, noUpdate = 1, publicOnly = 1)
            location = getattr(obj, 'name', res.getUnknownName())
        else:
            location = _('-')
        text = '%s%s\n' % (text, _("Location: %s") % location)
        text = '%s%s\n' % (text, _("Severity: %s") % _(gdata.msgSeverity[sev]))
        text = '%s%s\n' % (text, _("Time: %s [%s]") % (
            res.formatTime(turn),
            res.formatTime(turn - currTurn),
        ))
        text = '%s%s\n' % (text, "")
        text = '%s%s\n' % (text, getMsgText(msgID, data))

    return text
Esempio n. 11
0
    def precompute(self):
        galaxy_id = client.getPlayer().galaxy
        galaxy = client.get(galaxy_id, noUpdate=1)
        minX, maxX = galaxy.x - galaxy.radius, galaxy.x + galaxy.radius
        minY, maxY = galaxy.y - galaxy.radius, galaxy.y + galaxy.radius
        for objID in client.db.keys():
            if objID < Const.OID_FREESTART:
                continue
            obj = client.get(objID, noUpdate=1)
            if not (hasattr(obj, "type")):
                continue
            if obj.type in (Const.T_SYSTEM, Const.T_WORMHOLE):
                ownerID = Const.OID_NONE
                if hasattr(obj, 'planets'):
                    for planetID in obj.planets:
                        planet = client.get(planetID, noUpdate=1)
                        owner = getattr(planet, 'owner', Const.OID_NONE)
                        if int(owner) != 0:
                            ownerID = owner
                            break
                color = res.getPlayerColor(ownerID)
                self._map.append((obj.oid, obj.x, obj.y, color))

        self._minX = minX
        self._minY = minY
        zoomFactor = 0.05  #percent
        self._shiftX = int(self._width * zoomFactor)
        self._shiftY = int(self._height * zoomFactor)
        if ((maxX - minX) == 0):
            self._scaleX = 1
        else:
            self._scaleX = float(self._width - 2 * self._shiftX) / float(maxX -
                                                                         minX)
        if ((maxY - minY) == 0):
            self._scaleY = 1
        else:
            self._scaleY = float(self._height -
                                 2 * self._shiftX) / float(maxY - minY)

        self._repaintMap = True
Esempio n. 12
0
    def precompute(self):
        galaxy_id = client.getPlayer().galaxy
        galaxy = client.get(galaxy_id, noUpdate = 1)
        minX, maxX = galaxy.x - galaxy.radius, galaxy.x + galaxy.radius
        minY, maxY = galaxy.y - galaxy.radius, galaxy.y + galaxy.radius
        for objID in client.db.keys():
            if objID < Const.OID_FREESTART:
                continue
            obj = client.get(objID, noUpdate = 1)
            if not (hasattr(obj, "type")):
                continue
            if obj.type in (Const.T_SYSTEM,Const.T_WORMHOLE):
                ownerID = Const.OID_NONE
                if hasattr(obj, 'planets'):
                    for planetID in obj.planets:
                        planet = client.get(planetID, noUpdate = 1)
                        owner = getattr(planet, 'owner', Const.OID_NONE)
                        if int(owner) != 0:
                            ownerID = owner
                            break
                color = res.getPlayerColor(ownerID)
                self._map.append((obj.oid, obj.x, obj.y, color))

        self._minX = minX
        self._minY = minY
        zoomFactor = 0.05 #percent
        self._shiftX = int(self._width * zoomFactor)
        self._shiftY = int(self._height * zoomFactor)
        if ((maxX - minX) == 0) :
            self._scaleX = 1
        else :
            self._scaleX = float(self._width - 2 * self._shiftX) / float(maxX - minX)
        if ((maxY - minY) == 0) :
            self._scaleY = 1
        else :
            self._scaleY = float(self._height - 2 * self._shiftX) / float(maxY - minY)

        self._repaintMap = True
Esempio n. 13
0
    def createTree(self, select=True):
        player = client.getPlayer()
        self.tree.Freeze()
        self.constructingTree = 1
        self.tree.DeleteAllItems()
        root = self.tree.AddRoot("Channels")

        self.addNode(root, "INBOX", player.oid, T_PLAYER)
        events = self.addNode(root, "EVENTS", player.oid, T_PLAYER)
        self.addNode(root, "OUTBOX", player.oid, T_PLAYER)

        for galaxyID in player.galaxies:
            galaxy = client.get(galaxyID)
            galaxyNode = self.tree.AppendItem(root,
                                              _("Galaxy %s") % galaxy.name)

            self.addNode(galaxyNode, "NEWS", galaxyID, T_GALAXY)
            self.addNode(galaxyNode, "PUBLIC", galaxyID, T_GALAXY)
            self.tree.Expand(galaxyNode)

        osNode = self.tree.AppendItem(root, _("Outer Space"))

        self.addNode(osNode, "NEWS", OID_UNIVERSE, T_UNIVERSE)
        self.addNode(osNode, "PUBLIC", OID_UNIVERSE, T_UNIVERSE)
        self.addNode(osNode, "QA", OID_UNIVERSE, T_UNIVERSE)
        self.addNode(osNode, "IDEAS", OID_UNIVERSE, T_UNIVERSE)
        self.addNode(osNode, "ISSUES", OID_UNIVERSE, T_UNIVERSE)

        if self.selectedItem == None:
            self.selectedItem = events

        self.tree.Expand(osNode)
        self.tree.Expand(root)
        self.constructingTree = 0
        self.tree.Thaw()
        if select:
            self.tree.SelectItem(self.selectedItem)
Esempio n. 14
0
 	def createTree(self, select = True):
		player = client.getPlayer()
		self.tree.Freeze()
		self.constructingTree = 1
		self.tree.DeleteAllItems()
		root = self.tree.AddRoot("Channels")

		self.addNode(root, "INBOX", player.oid, T_PLAYER)
		events = self.addNode(root, "EVENTS", player.oid, T_PLAYER)
		self.addNode(root, "OUTBOX", player.oid, T_PLAYER)

		for galaxyID in player.galaxies:
			galaxy = client.get(galaxyID)
			galaxyNode = self.tree.AppendItem(root, _("Galaxy %s") % galaxy.name)
			
			self.addNode(galaxyNode, "NEWS", galaxyID, T_GALAXY)
			self.addNode(galaxyNode, "PUBLIC", galaxyID, T_GALAXY)
			self.tree.Expand(galaxyNode)

		osNode = self.tree.AppendItem(root, _("Outer Space"))

		self.addNode(osNode, "NEWS", OID_UNIVERSE, T_UNIVERSE)
		self.addNode(osNode, "PUBLIC", OID_UNIVERSE, T_UNIVERSE)
		self.addNode(osNode, "QA", OID_UNIVERSE, T_UNIVERSE)
		self.addNode(osNode, "IDEAS", OID_UNIVERSE, T_UNIVERSE)
		self.addNode(osNode, "ISSUES", OID_UNIVERSE, T_UNIVERSE)

		if self.selectedItem == None:
			self.selectedItem = events

		self.tree.Expand(osNode)
		self.tree.Expand(root)
		self.constructingTree = 0
		self.tree.Thaw()
		if select:
			self.tree.SelectItem(self.selectedItem)
Esempio n. 15
0
 def draw(self, surface):
     player = client.getPlayer()
     self._actAreas = {}
     # background
     surface.fill((0x00, 0x00, 0x00), self.rect)
     # common positions
     y = self.rect.centery
     x = self.rect.left
     r = self.rect.right
     height = self.rect.height
     if self._starImg:
         x += self._starImg.get_width()
         # mines
     if self.my_mines:
         if self.unknown_mines:
             textSrfc = renderText("small", "Minefield", 1, res.getFFColorCode(1250))
             surface.blit(textSrfc, (x, self.rect.top + textSrfc.get_height()))
             textSrfc = renderText("small", "Unknown Minefield Detected", 1, res.getFFColorCode(0))
             surface.blit(textSrfc, (x, self.rect.top + textSrfc.get_height() * 2 + 5))
         else:
             textSrfc = renderText("small", "Minefield", 1, res.getFFColorCode(1250))
             surface.blit(textSrfc, (x, self.rect.top + textSrfc.get_height()))
     elif self.unknown_mines:
         textSrfc = renderText("small", "Unknown Minefield Detected", 1, res.getFFColorCode(0))
         surface.blit(textSrfc, (x, self.rect.top + textSrfc.get_height()))
         # buoy
     if self.buoytext:
         lines = self.buoytext[0].split("\n")
         maxW = 0
         hh = 0
         i = 1
         textSrfcs = []
         bouycolor = buoyColors[self.buoytext[1] - 1]
         for line in lines:
             if len(line) == 0:
                 break
             if len(line) > MAX_BOUY_DISPLAY_LEN:
                 line = u"%s..." % line[:MAX_BOUY_DISPLAY_LEN]
             elif i == MAX_BOUY_DISPLAY_ROWS:
                 line = u"%s..." % line
             textSrfc = renderText("small", line, 1, bouycolor)
             textSrfcs.append(textSrfc)
             maxW = max(textSrfc.get_width(), maxW)
             i += 1
             if i > MAX_BOUY_DISPLAY_ROWS:
                 break
         for textSrfc in textSrfcs:
             hh += textSrfc.get_height()
             surface.blit(textSrfc, (r - maxW - 20, 5 + hh))
             # star
     if self._starImg:
         surface.blit(self._starImg, self.rect.topleft)
         self._actAreas[self.systemID] = Rect(self.rect.topleft, self._starImg.get_size())
         # planets
     for planetID, img, name, ffColor in self._planetImgs:
         planet = client.get(planetID, noUpdate=1)
         py = y - img.get_height() / 2
         surface.blit(img, (x, py))
         self._actAreas[planetID] = Rect((x, py), img.get_size())
         text = pygame.transform.rotate(renderText("small", " %s" % name, 1, ffColor), 90)
         py = height - text.get_height()
         px = x + img.get_width() / 2 - text.get_width() / 2
         nameWidth = text.get_width()
         surface.blit(text, (px, py))
         if getattr(planet, "owner", OID_NONE) == player.oid:
             text = pygame.transform.rotate(
                 renderText("small", " (%d)" % self.getFreeSlots(planetID), 1, ffColor), 90
             )
             py = height - text.get_height()
             px = x + img.get_width() / 2 - text.get_width() / 2 + nameWidth
             surface.blit(text, (px, py))
         if planetID == self.selectedObjID:
             gx, gy = self.theme.getGridParams()
             gx = gx / 2
             gy = gy / 2
             rect = Rect((x + img.get_width() / 2 - gx / 2, y + img.get_height() / 2), (gx, gy))
             pygame.draw.polygon(
                 surface, self.theme.themeForeground, (rect.bottomleft, rect.midtop, rect.bottomright), 0
             )
             rect = Rect((x + img.get_width() / 2 - gx / 2, y - img.get_height() / 2 - gy), (gx, gy))
             pygame.draw.polygon(
                 surface, self.theme.themeForeground, (rect.topleft, rect.midbottom, rect.topright), 0
             )
         x += int(img.get_width() * 1.25) + 10
Esempio n. 16
0
def techID2Name(techID):
	if techID >= 1000:
		return _(client.getTechInfo(techID).name.encode())
	else:
		return client.getPlayer().shipDesigns[techID].name
Esempio n. 17
0
def designID2Name(designID):
	return client.getPlayer().shipDesigns[designID].name
Esempio n. 18
0
def techID2Name(techID):
    if techID >= 1000:
        return _(client.getTechInfo(techID).name.encode())
    else:
        return client.getPlayer().shipDesigns[techID].name
Esempio n. 19
0
def designID2Name(designID):
    return client.getPlayer().shipDesigns[designID].name
Esempio n. 20
0
 def computeBuoy(self):
     player = client.getPlayer()
     if hasattr(player, "buoys") and self.systemID in player.buoys:
         self.buoytext = player.buoys[self.systemID]
     else:
         self.buoytext = None
Esempio n. 21
0
 def draw(self, surface):
     player = client.getPlayer()
     self._actAreas = {}
     # background
     surface.fill((0x00, 0x00, 0x00), self.rect)
     # common positions
     y = self.rect.centery
     x = self.rect.left
     r = self.rect.right
     height = self.rect.height
     if self._starImg:
         x += self._starImg.get_width()
     # mines
     if self.my_mines:
         if self.unknown_mines:
             textSrfc = Fonts.renderText('small', 'Minefield', 1,
                                         res.getFFColorCode(1250))
             surface.blit(textSrfc,
                          (x, self.rect.top + textSrfc.get_height()))
             textSrfc = Fonts.renderText('small',
                                         'Unknown Minefield Detected', 1,
                                         res.getFFColorCode(0))
             surface.blit(
                 textSrfc,
                 (x, self.rect.top + textSrfc.get_height() * 2 + 5))
         else:
             textSrfc = Fonts.renderText('small', 'Minefield', 1,
                                         res.getFFColorCode(1250))
             surface.blit(textSrfc,
                          (x, self.rect.top + textSrfc.get_height()))
     elif self.unknown_mines:
         textSrfc = Fonts.renderText('small', 'Unknown Minefield Detected',
                                     1, res.getFFColorCode(0))
         surface.blit(textSrfc, (x, self.rect.top + textSrfc.get_height()))
     # buoy
     if self.buoytext:
         lines = self.buoytext[0].split("\n")
         maxW = 0
         hh = 0
         i = 1
         textSrfcs = []
         bouycolor = buoyColors[self.buoytext[1] - 1]
         for line in lines:
             if len(line) == 0:
                 break
             if len(line) > MAX_BOUY_DISPLAY_LEN:
                 line = u"%s..." % line[:MAX_BOUY_DISPLAY_LEN]
             elif i == MAX_BOUY_DISPLAY_ROWS:
                 line = u"%s..." % line
             textSrfc = Fonts.renderText('small', line, 1, bouycolor)
             textSrfcs.append(textSrfc)
             maxW = max(textSrfc.get_width(), maxW)
             i += 1
             if i > MAX_BOUY_DISPLAY_ROWS: break
         for textSrfc in textSrfcs:
             hh += textSrfc.get_height()
             surface.blit(textSrfc, (r - maxW - 20, 5 + hh))
     # star
     if self._starImg:
         surface.blit(self._starImg, self.rect.topleft)
         self._actAreas[self.systemID] = pygame.Rect(
             self.rect.topleft, self._starImg.get_size())
     # planets
     for planetID, img, name, ffColor in self._planetImgs:
         planet = client.get(planetID, noUpdate=1)
         py = y - img.get_height() / 2
         surface.blit(img, (x, py))
         self._actAreas[planetID] = pygame.Rect((x, py), img.get_size())
         text = pygame.transform.rotate(
             Fonts.renderText('small', ' %s' % name, 1, ffColor), 90)
         py = height - text.get_height()
         px = x + img.get_width() / 2 - text.get_width() / 2
         nameWidth = text.get_width()
         surface.blit(text, (px, py))
         if getattr(planet, 'owner', Const.OID_NONE) == player.oid:
             text = pygame.transform.rotate(
                 Fonts.renderText('small',
                                  ' (%d)' % self.getFreeSlots(planetID), 1,
                                  ffColor), 90)
             py = height - text.get_height()
             px = x + img.get_width() / 2 - text.get_width() / 2 + nameWidth
             surface.blit(text, (px, py))
         if planetID in [self.activeObjID, self.selectedObjID]:
             if planetID == self.selectedObjID: style = 0
             elif planetID == self.activeObjID: style = 2
             gx, gy = self.theme.getGridParams()
             gx = gx / 2
             gy = gy / 2
             rect = pygame.Rect((x + img.get_width() / 2 - gx / 2,
                                 y + img.get_height() / 2), (gx, gy))
             pygame.draw.polygon(
                 surface, self.theme.themeForeground,
                 (rect.bottomleft, rect.midtop, rect.bottomright), style)
             rect = pygame.Rect((x + img.get_width() / 2 - gx / 2,
                                 y - img.get_height() / 2 - gy), (gx, gy))
             pygame.draw.polygon(
                 surface, self.theme.themeForeground,
                 (rect.topleft, rect.midbottom, rect.topright), style)
         x += int(img.get_width() * 1.25) + 10
Esempio n. 22
0
 def computeBuoy(self):
     player = client.getPlayer()
     if hasattr(player, "buoys") and self.systemID in player.buoys:
         self.buoytext = player.buoys[self.systemID]
     else:
         self.buoytext = None