def __init__(self, app): self.app = app self.techInfoDlg = TechInfoDlg(app) self.confirmDlg = ConfirmDlg(app) self.showCompleted = 0 self.showObsolete = 0 self.createUI()
def __init__(self, app): self.app = app self.showStructures = 1 self.showShips = 0 self.showOther = 0 self.techID = 0 self.sort = 'type' self.showLevels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] self.techInfoDlg = TechInfoDlg(app) self.createUI()
def __init__(self, app): self.app = app self.showShips = 1 self.showOther = 0 self.techID = 0 self.showLevels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 99] self.techInfoDlg = TechInfoDlg(app) self.constructionDlg = ConstructionDlg(app) self.createUI() self.win.setTagAttr('ship', 'visible', 1) # set default sorting for technologies self.win.vTechs.setSort("text")
def __init__(self, app): self.app = app self.player = None self.vPQueues = None self.queueNo = 5 self.activeQueue = 0 self.activeIndex = None self.changeQtyDlg = ChangeQtyDlg(app) self.newGlobalTaskDlg = NewGlobalTaskDlg(self.app) self.constructionDlg = ConstructionDlg(app) self.techInfoDlg = TechInfoDlg(app) self.confirmDlg = ConfirmDlg(app) self.createUI()
class ResearchDlg: def __init__(self, app): self.app = app self.techInfoDlg = TechInfoDlg(app) self.confirmDlg = ConfirmDlg(app) self.showCompleted = 0 self.showObsolete = 0 self.createUI() def display(self): self.win.vUnObs.enabled = 0 self.win.vObs.enabled = 0 self.show() # show window if not self.win.visible: self.win.show() # register for updates if self not in gdata.updateDlgs: gdata.updateDlgs.append(self) def hide(self): self.win.setStatus(_("Ready.")) self.win.hide() # unregister updates if self in gdata.updateDlgs: gdata.updateDlgs.remove(self) def update(self): if self.win.visible: self.show() def show(self): player = client.getPlayer() # title self.win.vRQueueTitle.text = _('Research queue [%d pts/turn]') % ( player.effSciPoints, ) self.win.title = _("Research [TL%d]") % player.techLevel # Known techs items = [] #~researchable = {} disabled = [] taskIDs = {} for task in player.rsrchQueue: taskIDs[task.techID] = None for techID in player.techs.keys(): if techID in player.obsoleteTechs and not self.showObsolete: continue tech = client.getTechInfo(techID) improvement = player.techs[techID] item = ui.Item(tech.name, techID = techID, tLevel = '%d-%d' % (tech.level, improvement), tStruct = (' ', '*')[tech.isStructure], tShip = (' ', '*')[tech.isShipEquip], ) if improvement < Rules.techMaxImprovement and improvement < tech.maxImprovement: neededSci = Utils.getTechRCost(player, techID) if player.effSciPoints > 0: item.tETC = res.formatTime(float(neededSci) / player.effSciPoints) else: item.tETC = _("N/A") found = 0 if taskIDs.has_key(techID): item.foreground = (0xd0, 0xd0, 0xd0) else: item.foreground = None else: item.tETC = res.getNA() item.foreground = (0x80, 0x80, 0x80) if not self.showCompleted: # skip this item continue if techID in player.obsoleteTechs: item.foreground = (0x80, 0x40, 0x40) items.append(item) disabled.extend(tech.researchDisables) #~for improvement in range(1, improvement + 1): #~ for techID in tech.researchEnables[improvement]: #~ researchable[techID] = 1 self.win.vKTechs.items = items self.win.vKTechs.itemsChanged() # Research queue items = [] index = 0 queueTechs = [] total = 0 for task in player.rsrchQueue: tech = client.getTechInfo(task.techID) fulltech = client.getFullTechInfo(task.techID) queueTechs.append(task.techID) item = ui.Item(tech.name, techID = task.techID, index = index) researchSci = Utils.getTechRCost(player, task.techID, task.improvement) maxImprovement = min(Rules.techMaxImprovement,fulltech.maxImprovement) maxImpTotalSci = 0 if task.improveToMax and task.improvement < maxImprovement: for impr in range(task.improvement+1,maxImprovement+1): maxImpTotalSci += Utils.getTechRCost(player, task.techID, impr) item.tooltipTitle = _("Details") item.tooltip = _("Research points %d/%d, change %d pts/turn.") % (task.currSci, researchSci, task.changeSci) item.statustip = item.tooltip item.tImpToMax = ["", "*"][task.improveToMax] item.tImproveToMax = task.improveToMax if task.currSci > 0: item.tProgress = _("%d %%") % int(task.currSci * 100 / researchSci) else: item.tProgress = _("-") if task.changeSci > 0: value = float(researchSci - task.currSci) / max(task.changeSci, player.effSciPoints) total += int(value + 1) if player.effSciPoints > 0: total += float(maxImpTotalSci) / player.effSciPoints item.tETC = res.formatTime(value) else: total = 0 item.tETC = res.getNA() elif task.changeSci < 0: value = - float(task.currSci) / min(task.changeSci, player.effSciPoints) item.tETC = _("[%s]") % res.formatTime(value) elif player.effSciPoints > 0: value = float(researchSci) / player.effSciPoints total += int(value + 1) total += float(maxImpTotalSci) / player.effSciPoints item.tETC = res.formatTime(value) else: item.tETC = res.getNA() item.tLevel = _("%d-%d") % (tech.level, task.improvement) items.append(item) index += 1 self.win.vRQueue.items = items self.win.vRQueue.itemsChanged() self.win.vRQueueTop.enabled = 0 self.win.vRQueueUp.enabled = 0 self.win.vRQueueDown.enabled = 0 self.win.vRQueueAbort.enabled = 0 self.win.vRQueueRepat.enabled = 0 self.win.vRQueueRepat.pressed = 0 self.win.vRQueueInfo.enabled = 0 if total == 0: self.win.vRTotal.text = _("N/A") else: self.win.vRTotal.text = res.formatTime(total) # Researchable techs items = [] for techID in client.getAllTechIDs(): if player.techs.has_key(techID) or techID in queueTechs \ or techID in disabled: continue # can check requirements tech = client.getTechInfo(techID) if not hasattr(tech, "partialData"): continue item = ui.Item(tech.name, tLevel = tech.level, techID = techID) if hasattr(tech, 'isStructure'): item.tStruct = ('', '*')[tech.isStructure] else: item.tStruct = '' if hasattr(tech, 'isShipEquip'): item.tShip = ('', '*')[tech.isShipEquip] else: item.tShip = '' if hasattr(tech, 'researchMod'): neededSci = Utils.getTechRCost(player, techID) if player.effSciPoints > 0: item.tETC = res.formatTime(float(neededSci) / player.effSciPoints) else: item.tETC = _("N/A") item.foreground = None else: item.tSci = res.getNA() item.foreground = (0xc0, 0xc0, 0xc0) # skip this item continue if hasattr(tech, "researchDisables") and tech.researchDisables: item.foreground = (0xff, 0xff, 0x00) if client.getFullTechInfo(techID).finishResearchHandler == TechHandlers.finishResTLAdvance: item.foreground = gdata.sevColors[gdata.CRI] items.append(item) self.win.vRTechs.items = items self.win.vRTechs.itemsChanged() def onSelectKTech(self, widget, action, data): techID = self.win.vKTechs.selection[0].techID player = client.getPlayer() if techID in player.obsoleteTechs: self.win.vObs.enabled = 0 self.win.vUnObs.enabled = 1 else: self.win.vUnObs.enabled = 0 self.win.vObs.enabled = 1 def onKTechInfo(self, widget, action, data): if self.win.vKTechs.selection: self.techInfoDlg.display(self.win.vKTechs.selection[0].techID) def onSelectRTech(self, widget, action, data): # TODO implement pass def onRTechInfo(self, widget, action, data): if self.win.vRTechs.selection: self.techInfoDlg.display(self.win.vRTechs.selection[0].techID) def onSelectRQueueTech(self, widget, action, data): index = self.win.vRQueue.items.index(self.win.vRQueue.selection[0]) self.win.vRQueueTop.enabled = index > 0 self.win.vRQueueUp.enabled = index > 0 self.win.vRQueueDown.enabled = index < len(self.win.vRQueue.items) - 1 self.win.vRQueueAbort.enabled = 1 self.win.vRQueueRepat.enabled = 1 self.win.vRQueueRepat.pressed = self.win.vRQueue.selection[0].tImproveToMax self.win.vRQueueInfo.enabled = 1 def onRQueueTechInfo(self, widget, action, data): if self.win.vRQueue.selection: self.techInfoDlg.display(self.win.vRQueue.selection[0].techID) def onCloseDlg(self, widget, action, data): self.hide() def onStartResearch(self, widget, action, data): if not self.win.vRTechs.selection: self.win.setStatus(_('Select technology to research.')) return else: techID = self.win.vRTechs.selection[0].techID try: self.win.setStatus(_('Executing START RESEARCH command...')) player = client.getPlayer() player.rsrchQueue = client.cmdProxy.startResearch(player.oid, techID) self.win.setStatus(_('Command has been executed.')) except ige.GameException, e: self.win.setStatus(e.args[0]) return self.update()
class ResearchDlg: def __init__(self, app): self.app = app self.techInfoDlg = TechInfoDlg(app) self.confirmDlg = ConfirmDlg(app) self.showCompleted = 0 self.createUI() def display(self): self.show() # show window if not self.win.visible: self.win.show() # register for updates if self not in gdata.updateDlgs: gdata.updateDlgs.append(self) def hide(self): self.win.setStatus(_("Ready.")) self.win.hide() # unregister updates if self in gdata.updateDlgs: gdata.updateDlgs.remove(self) def update(self): if self.win.visible: self.show() def show(self): player = client.getPlayer() # title self.win.vRQueueTitle.text = _('Research queue [%d pts/turn]') % ( player.effSciPoints, ) self.win.title = _("Research [TL%d]") % player.techLevel # Known techs items = [] #~researchable = {} disabled = [] taskIDs = {} for task in player.rsrchQueue: taskIDs[task.techID] = None for techID in player.techs.keys(): tech = client.getTechInfo(techID) improvement = player.techs[techID] item = ui.Item(tech.name, techID = techID, tLevel = '%d-%d' % (tech.level, improvement), tStruct = (' ', '*')[tech.isStructure], tShip = (' ', '*')[tech.isShipEquip], ) if improvement < Rules.techMaxImprovement and improvement < tech.maxImprovement: neededSci = Utils.getTechRCost(player, techID) if player.effSciPoints > 0: item.tETC = res.formatTime(float(neededSci) / player.effSciPoints) else: item.tETC = _("N/A") found = 0 if taskIDs.has_key(techID): item.foreground = (0xd0, 0xd0, 0xd0) else: item.foreground = None else: item.tETC = res.getNA() item.foreground = (0x80, 0x80, 0x80) if not self.showCompleted: # skip this item continue items.append(item) disabled.extend(tech.researchDisables) #~for improvement in range(1, improvement + 1): #~ for techID in tech.researchEnables[improvement]: #~ researchable[techID] = 1 self.win.vKTechs.items = items self.win.vKTechs.itemsChanged() # Research queue items = [] index = 0 queueTechs = [] total = 0 for task in player.rsrchQueue: tech = client.getTechInfo(task.techID) fulltech = client.getFullTechInfo(task.techID) queueTechs.append(task.techID) item = ui.Item(tech.name, techID = task.techID, index = index) researchSci = Utils.getTechRCost(player, task.techID, task.improvement) maxImprovement = min(Rules.techMaxImprovement,fulltech.maxImprovement) maxImpTotalSci = 0 if task.improveToMax and task.improvement < maxImprovement: for impr in range(task.improvement+1,maxImprovement+1): maxImpTotalSci += Utils.getTechRCost(player, task.techID, impr) item.tooltip = _("Research points %d/%d, change %d pts/turn.") % (task.currSci, researchSci, task.changeSci) item.statustip = item.tooltip item.tImpToMax = ["", "*"][task.improveToMax] item.tImproveToMax = task.improveToMax if task.currSci > 0: item.tProgress = _("%d %%") % int(task.currSci * 100 / researchSci) else: item.tProgress = _("-") if task.changeSci > 0: value = float(researchSci - task.currSci) / max(task.changeSci, player.effSciPoints) total += int(value + 1) if player.effSciPoints > 0: total += float(maxImpTotalSci) / player.effSciPoints item.tETC = res.formatTime(value) else: total = 0 item.tETC = res.getNA() elif task.changeSci < 0: value = - float(task.currSci) / min(task.changeSci, player.effSciPoints) item.tETC = _("[%s]") % res.formatTime(value) elif player.effSciPoints > 0: value = float(researchSci) / player.effSciPoints total += int(value + 1) total += float(maxImpTotalSci) / player.effSciPoints item.tETC = res.formatTime(value) else: item.tETC = res.getNA() item.tLevel = _("%d-%d") % (tech.level, task.improvement) items.append(item) index += 1 self.win.vRQueue.items = items self.win.vRQueue.itemsChanged() self.win.vRQueueTop.enabled = 0 self.win.vRQueueUp.enabled = 0 self.win.vRQueueDown.enabled = 0 self.win.vRQueueAbort.enabled = 0 self.win.vRQueueRepat.enabled = 0 self.win.vRQueueRepat.pressed = 0 self.win.vRQueueInfo.enabled = 0 if total == 0: self.win.vRTotal.text = _("N/A") else: self.win.vRTotal.text = res.formatTime(total) # Researchable techs items = [] for techID in client.getAllTechIDs(): if player.techs.has_key(techID) or techID in queueTechs \ or techID in disabled: continue # can check requirements tech = client.getTechInfo(techID) if not hasattr(tech, "partialData"): continue item = ui.Item(tech.name, tLevel = tech.level, techID = techID) if hasattr(tech, 'isStructure'): item.tStruct = ('', '*')[tech.isStructure] else: item.tStruct = '' if hasattr(tech, 'isShipEquip'): item.tShip = ('', '*')[tech.isShipEquip] else: item.tShip = '' if hasattr(tech, 'researchMod'): neededSci = Utils.getTechRCost(player, techID) if player.effSciPoints > 0: item.tETC = res.formatTime(float(neededSci) / player.effSciPoints) else: item.tETC = _("N/A") item.foreground = None else: item.tSci = res.getNA() item.foreground = (0xc0, 0xc0, 0xc0) # skip this item continue if hasattr(tech, "researchDisables") and tech.researchDisables: item.foreground = (0xff, 0xff, 0x00) if client.getFullTechInfo(techID).finishResearchHandler == TechHandlers.finishResTLAdvance: item.foreground = gdata.sevColors[gdata.CRI] items.append(item) self.win.vRTechs.items = items self.win.vRTechs.itemsChanged() def onSelectKTech(self, widget, action, data): # TODO implement pass def onKTechInfo(self, widget, action, data): if self.win.vKTechs.selection: self.techInfoDlg.display(self.win.vKTechs.selection[0].techID) def onSelectRTech(self, widget, action, data): # TODO implement pass def onRTechInfo(self, widget, action, data): if self.win.vRTechs.selection: self.techInfoDlg.display(self.win.vRTechs.selection[0].techID) def onSelectRQueueTech(self, widget, action, data): index = self.win.vRQueue.items.index(self.win.vRQueue.selection[0]) self.win.vRQueueTop.enabled = index > 0 self.win.vRQueueUp.enabled = index > 0 self.win.vRQueueDown.enabled = index < len(self.win.vRQueue.items) - 1 self.win.vRQueueAbort.enabled = 1 self.win.vRQueueRepat.enabled = 1 self.win.vRQueueRepat.pressed = self.win.vRQueue.selection[0].tImproveToMax self.win.vRQueueInfo.enabled = 1 def onRQueueTechInfo(self, widget, action, data): if self.win.vRQueue.selection: self.techInfoDlg.display(self.win.vRQueue.selection[0].techID) def onCloseDlg(self, widget, action, data): self.hide() def onStartResearch(self, widget, action, data): if not self.win.vRTechs.selection: self.win.setStatus(_('Select technology to research.')) return else: techID = self.win.vRTechs.selection[0].techID try: self.win.setStatus(_('Executing START RESEARCH command...')) player = client.getPlayer() player.rsrchQueue = client.cmdProxy.startResearch(player.oid, techID) self.win.setStatus(_('Command has been executed.')) except ige.GameException, e: self.win.setStatus(e.args[0]) return self.update()
class ResearchDlg: def __init__(self, app): self.app = app self.techInfoDlg = TechInfoDlg(app) self.confirmDlg = ConfirmDlg(app) self.showCompleted = 0 self.showObsolete = 0 self.createUI() def display(self): self.win.vUnObs.enabled = 0 self.win.vObs.enabled = 0 self.show() # show window if not self.win.visible: self.win.show() # register for updates if self not in gdata.updateDlgs: gdata.updateDlgs.append(self) def hide(self): self.win.setStatus(_("Ready.")) self.win.hide() # unregister updates if self in gdata.updateDlgs: gdata.updateDlgs.remove(self) def update(self): if self.win.visible: self.show() def _processResearchableTech(self, tech): player = client.getPlayer() item = ui.Item(tech.name, tLevel=tech.level, techID=tech.id) item.tStruct = '*' if getattr(tech, 'isStructure', None) else '' item.tShip = '*' if getattr(tech, 'isShipEquip', None) else '' neededSci = Utils.getTechRCost(player, tech.id) item.tETC = res.formatTime( float(neededSci) / player.effSciPoints) if player.effSciPoints > 0 else _("N/A") item.foreground = None if client.getFullTechInfo( tech.id ).finishResearchHandler == TechHandlers.finishResTLAdvance: item.foreground = gdata.sevColors[gdata.CRI] elif getattr(tech, "researchDisables", None): item.foreground = (0xff, 0xff, 0x00) return item def _processResearchable(self, disabled, queued): player = client.getPlayer() items = [] for techID in client.getAllTechIDs(): if techID in player.techs or techID in queued or techID in disabled: continue tech = client.getTechInfo(techID) if not hasattr(tech, 'partialData') or not hasattr( tech, 'researchMod'): continue items.append(self._processResearchableTech(tech)) self.win.vRTechs.items = items self.win.vRTechs.itemsChanged() def _processResearchQueueTask(self, task): player = client.getPlayer() tech = client.getTechInfo(task.techID) fulltech = client.getFullTechInfo(task.techID) researchSci = Utils.getTechRCost(player, task.techID, task.improvement) item = ui.Item(tech.name, techID=task.techID) item.tooltipTitle = _("Details") item.tooltip = _("Research points %d/%d, change %d pts/turn.") % ( task.currSci, researchSci, task.changeSci) item.statustip = item.tooltip item.tImpToMax = "*" if task.improveToMax else "" item.tImproveToMax = task.improveToMax item.tProgress = _("%d %%") % int( task.currSci * 100 / researchSci) if task.currSci > 0 else _("-") totalSci = 0 if task.changeSci > 0: etc = float(researchSci - task.currSci) / max( task.changeSci, player.effSciPoints) totalSci += researchSci - task.currSci if player.effSciPoints > 0: item.tETC = res.formatTime(etc) else: item.tETC = res.getNA() elif task.changeSci < 0: etc = -float(task.currSci) / min(task.changeSci, player.effSciPoints) item.tETC = _("[%s]") % res.formatTime(etc) elif player.effSciPoints > 0: etc = float(researchSci) / player.effSciPoints totalSci += researchSci item.tETC = res.formatTime(etc) else: item.tETC = res.getNA() if task.improveToMax: for impr in range(task.improvement + 1, fulltech.maxImprovement + 1): totalSci += Utils.getTechRCost(player, task.techID, impr) item.tLevel = _("%d-%d") % (tech.level, task.improvement) return item, totalSci def _processResearchQueue(self): player = client.getPlayer() items = [] index = 0 queued = [] totalSci = 0 for task in player.rsrchQueue: queued.append(task.techID) item, taskSci = self._processResearchQueueTask(task) item.index = index items.append(item) totalSci += taskSci index += 1 totalSci = math.ceil(float(totalSci) / player.effSciPoints) self.win.vRQueue.items = items self.win.vRQueue.itemsChanged() self.win.vRQueueTop.enabled = 0 self.win.vRQueueUp.enabled = 0 self.win.vRQueueDown.enabled = 0 self.win.vRQueueAbort.enabled = 0 self.win.vRQueueRepat.enabled = 0 self.win.vRQueueRepat.pressed = 0 self.win.vRQueueInfo.enabled = 0 self.win.vRTotal.text = res.formatTime(totalSci) if totalSci else _( "N/A") return queued def _processImprovableTech(self, tech, scheduledIDs): player = client.getPlayer() item = ui.Item(tech.name, techID=tech.id, tLevel='%d-%d' % (tech.level, player.techs[tech.id]), tStruct=(' ', '*')[tech.isStructure], tShip=(' ', '*')[tech.isShipEquip]) neededSci = Utils.getTechRCost(player, tech.id) item.tETC = res.formatTime( float(neededSci) / player.effSciPoints) if player.effSciPoints > 0 else _("N/A") item.foreground = (0xd0, 0xd0, 0xd0) if tech.id in scheduledIDs else None item.foreground = ( 0x80, 0x40, 0x40) if tech.id in player.obsoleteTechs else item.foreground return item def _processKnownTech(self): player = client.getPlayer() items = [] disabled = [] scheduledIDs = set([task.techID for task in player.rsrchQueue]) for techID in player.techs.keys(): if techID in player.obsoleteTechs and not self.showObsolete: continue tech = client.getTechInfo(techID) improvement = player.techs[techID] if improvement == tech.maxImprovement and not self.showCompleted: continue items.append(self._processImprovableTech(tech, scheduledIDs)) disabled.extend(tech.researchDisables) self.win.vKTechs.items = items self.win.vKTechs.itemsChanged() return disabled def show(self): player = client.getPlayer() # title self.win.vRQueueTitle.text = _('Research queue [%d pts/turn]') % ( player.effSciPoints, ) self.win.title = _("Research [TL%d]") % player.techLevel disabled = self._processKnownTech() queued = self._processResearchQueue() self._processResearchable(disabled, queued) def onSelectKTech(self, widget, action, data): techID = self.win.vKTechs.selection[0].techID player = client.getPlayer() if techID in player.obsoleteTechs: self.win.vObs.enabled = 0 self.win.vUnObs.enabled = 1 else: self.win.vUnObs.enabled = 0 self.win.vObs.enabled = 1 def onKTechInfo(self, widget, action, data): if self.win.vKTechs.selection: self.techInfoDlg.display(self.win.vKTechs.selection[0].techID) def onSelectRTech(self, widget, action, data): # TODO implement pass def onRTechInfo(self, widget, action, data): if self.win.vRTechs.selection: self.techInfoDlg.display(self.win.vRTechs.selection[0].techID) def onSelectRQueueTech(self, widget, action, data): index = self.win.vRQueue.items.index(self.win.vRQueue.selection[0]) self.win.vRQueueTop.enabled = index > 0 self.win.vRQueueUp.enabled = index > 0 self.win.vRQueueDown.enabled = index < len(self.win.vRQueue.items) - 1 self.win.vRQueueAbort.enabled = 1 self.win.vRQueueRepat.enabled = 1 self.win.vRQueueRepat.pressed = self.win.vRQueue.selection[ 0].tImproveToMax self.win.vRQueueInfo.enabled = 1 def onRQueueTechInfo(self, widget, action, data): if self.win.vRQueue.selection: self.techInfoDlg.display(self.win.vRQueue.selection[0].techID) def onCloseDlg(self, widget, action, data): self.hide() def onStartResearch(self, widget, action, data): if not self.win.vRTechs.selection: self.win.setStatus(_('Select technology to research.')) return else: techID = self.win.vRTechs.selection[0].techID try: self.win.setStatus(_('Executing START RESEARCH command...')) player = client.getPlayer() player.rsrchQueue = client.cmdProxy.startResearch( player.oid, techID) self.win.setStatus(_('Command has been executed.')) except ige.GameException, e: self.win.setStatus(e.args[0]) return self.update()