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
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
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
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")
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")
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
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
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
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
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
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)
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)
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
def techID2Name(techID): if techID >= 1000: return _(client.getTechInfo(techID).name.encode()) else: return client.getPlayer().shipDesigns[techID].name
def designID2Name(designID): return client.getPlayer().shipDesigns[designID].name
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
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