예제 #1
0
 def __init__(self, app):
     self.app = app
     self.createUI()
     self.fleetCommandDlg = FleetCommandDlg(self.app)
     self.fleetSpecsDlg = FleetSpecsDlg(self.app)
     self.fleetSplitDlg = FleetSplitDlg(self.app)
     self.renameFleetDlg = RenameFleetDlg(self.app)
     self.fleetScoutBloomDlg = FleetScoutBloomDlg(self.app)
     self.confirmDlg = ConfirmDlg(app)
예제 #2
0
	def __init__(self, app):
		self.app = app
		self.createUI()
		self.fleetCommandDlg = FleetCommandDlg(self.app)
		self.fleetSpecsDlg = FleetSpecsDlg(self.app)
		self.fleetSplitDlg = FleetSplitDlg(self.app)
		self.renameFleetDlg = RenameFleetDlg(self.app)
		self.fleetScoutBloomDlg = FleetScoutBloomDlg(self.app)
		self.confirmDlg = ConfirmDlg(app)
예제 #3
0
class FleetDlg:
    def __init__(self, app):
        self.app = app
        self.createUI()
        self.fleetCommandDlg = FleetCommandDlg(self.app)
        self.fleetSpecsDlg = FleetSpecsDlg(self.app)
        self.fleetSplitDlg = FleetSplitDlg(self.app)
        self.renameFleetDlg = RenameFleetDlg(self.app)
        self.fleetScoutBloomDlg = FleetScoutBloomDlg(self.app)
        self.confirmDlg = ConfirmDlg(app)

    def display(self, objID):
        fleet = client.get(objID)
        if not hasattr(fleet, "ships"):
            return
        self.fleetID = objID
        self.showFleet()
        # 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.showFleet()

    def showFleet(self):
        fleet = client.get(self.fleetID, noUpdate=1)
        if hasattr(fleet, 'customname') and fleet.customname:
            self.win.title = _('Fleet: %s') % fleet.customname
        else:
            self.win.title = _('Fleet: %s') % getattr(fleet, 'name',
                                                      res.getUnknownName())
        # fill listbox
        items = []
        # serial ships
        if hasattr(fleet, 'ships'):
            for designID, hp, shield, exp in fleet.ships:
                tech = client.getPlayer().shipDesigns[designID]
                if shield > 0:
                    hpInfo = _("%d + %d") % (hp, shield)
                    hpSort = hp + 1000 * shield
                else:
                    hpInfo = _("%d") % hp
                    hpSort = hp
                item = ui.Item(tech.name,
                               tHP=hpInfo,
                               tHP_raw=hpSort,
                               tExp=exp,
                               tClass=_(gdata.shipClasses[tech.combatClass]),
                               designID=designID,
                               tLevel=Rules.shipExpToLevel.get(
                                   int(exp / tech.baseExp),
                                   Rules.shipDefLevel),
                               tSpec=[designID, hp, shield, exp],
                               tSpeed=_("%.2f") % tech.speed)
                items.append(item)
        self.win.vShips.items = items
        self.win.vShips.itemsChanged()
        self.win.vShips.selectItem(self.win.vShips.items[0])
        self.showShip(self.win.vShips.items[0].designID,
                      self.win.vShips.items[0].tExp)
        # fleet info
        self.win.vFCoordinates.text = '[%.1f, %.1f]' % (fleet.x, fleet.y)
        if fleet.orbiting != OID_NONE:
            self.win.vFOrbiting.text = getattr(
                client.get(fleet.orbiting, noUpdate=1), 'name',
                res.getUnknownName())
        else:
            self.win.vFOrbiting.text = _('N/A')
        if hasattr(fleet, "speedBoost") and hasattr(fleet, "maxSpeed"):
            text = _("%.2f") % (fleet.maxSpeed * fleet.speedBoost)
            info = _("Base speed %.2f, speed boost %.2f") % (fleet.maxSpeed,
                                                             fleet.speedBoost)
        else:
            text = _("?")
            info = None
        self.win.vFMaxSpeed.text = text
        self.win.vFMaxSpeed.tooltip = info
        self.win.vFMaxSpeed.statustip = info
        self.win.vFSignature.text = getattr(fleet, 'signature', '?')
        # commands
        items = []
        index = 0
        if hasattr(fleet, 'actions'):
            for action, target, data in fleet.actions:
                info = "-"
                if target != OID_NONE:
                    targetName = getattr(client.get(target, noUpdate=1),
                                         'name', res.getUnknownName())
                else:
                    targetName = '-'
                if index == fleet.actionIndex: current = '>'
                else: current = ''
                # additional info
                if action == FLACTION_DECLAREWAR:
                    info = getattr(client.get(data, noUpdate=1), 'name',
                                   res.getUnknownName())
                elif action == FLACTION_DEPLOY:
                    info = client.getPlayer().shipDesigns[data].name
                elif action == FLACTION_REPEATFROM:
                    info = _("Command #%d") % (data + 1)
                elif action == FLACTION_WAIT:
                    info = _("%d / %d") % (fleet.actionWaitCounter, data)
                # create item
                item = ui.Item(gdata.fleetActions[action],
                               targetName=targetName,
                               data=info,
                               tIndex=index + 1,
                               current=current)
                items.append(item)
                index += 1
        self.win.vCommands.items = items
        self.win.vCommands.selection = []
        self.win.vCommands.itemsChanged()
        self.win.vCommandUp.enabled = 0
        self.win.vCommandDown.enabled = 0
        self.win.vCommandDel.enabled = 0
        self.win.vCommandSetActive.enabled = 0

    def showShip(self, techID, exp):
        tech = client.getPlayer().shipDesigns[techID]
        level = Rules.shipExpToLevel.get(int(exp / tech.baseExp),
                                         Rules.shipDefLevel)
        self.win.vShipModel.text = tech.name
        self.win.vShipClass.text = _(gdata.shipClasses[tech.combatClass])
        self.win.vShipAtt.text = int(tech.combatAtt *
                                     Rules.shipLevelEff[level])
        self.win.vShipDef.text = _("%d / %d") % (
            int(tech.combatDef * Rules.shipLevelEff[level]),
            int(tech.missileDef * Rules.shipLevelEff[level]),
        )
        self.win.vShipMaxSpeed.text = _("%.2f") % tech.speed
        self.win.vShipScannerPwr.text = tech.scannerPwr
        self.win.vShipSupport.text = _("%d + %d") % (
            tech.operEn, int(tech.buildProd * Rules.operProdRatio))
        info = _("Support: %d energy and %d contruction points per turn.") % (
            tech.operEn, int(tech.buildProd * Rules.operProdRatio))
        self.win.vShipSupport.statustip = info
        self.win.vShipSupport.tooltip = info
        self.win.vShipStorages.text = _("%d") % tech.storEn
        self.win.vShipSignature.text = tech.signature
        if tech.shieldHP > 0:
            self.win.vShipMaxHP.text = _("%d + %d") % (
                tech.maxHP,
                tech.shieldHP,
            )
        else:
            self.win.vShipMaxHP.text = _("%d") % (tech.maxHP, )
        # show equipment
        items = []
        for techID in tech.eqIDs:
            eq = client.getTechInfo(techID)
            short = sequip.getShortDescr(techID)
            long = sequip.getLongDescr(techID)
            item = ui.Item(_("%d x %s") % (tech.eqIDs[techID], eq.name),
                           tData=short,
                           tooltip=long,
                           statustip=long)
            items.append(item)
        self.win.vShipEquipment.items = items
        self.win.vShipEquipment.itemsChanged()

    def onFleetSpecs(self, widget, action, data):
        self.fleetSpecsDlg.displayFleet(self.fleetID)

    def onShipSelected(self, widget, action, data):
        self.showShip(data.designID, data.tExp)

    def onSelectCommand(self, widget, action, data):
        index = self.win.vCommands.items.index(self.win.vCommands.selection[0])
        self.win.vCommandUp.enabled = index > 0
        self.win.vCommandDown.enabled = index < len(
            self.win.vCommands.items) - 1
        self.win.vCommandDel.enabled = 1
        self.win.vCommandSetActive.enabled = 1

    def onNewCommand(self, widget, action, data):
        sel = self.win.vCommands.selection
        if not sel:
            self.fleetCommandDlg.display(self, FleetCommandDlg.NEW_COMMAND)
        else:
            self.fleetCommandDlg.display(
                self,
                self.win.vCommands.items.index(sel[0]) + 1)

    def onDeleteCommand(self, widget, action, data, all=0):
        sel = self.win.vCommands.selection
        if not sel:
            self.win.setStatus(_('Select command to delete.'))
            return
        item = sel[0]
        try:
            self.win.setStatus(_('Executing DELETE COMMAND command...'))
            fleet = client.get(self.fleetID, noUpdate=1)
            fleet.actions, fleet.actionIndex = client.cmdProxy.deleteAction(
                self.fleetID, item.tIndex - 1)
            self.win.vCommands.selection = []
            if not all:  # 0 from UI; 1 from "DeleteAll" function
                self.win.setStatus(_('Command has been executed.'))
                if item.text == gdata.fleetActions[FLACTION_WAIT]:
                    fleet = client.get(self.fleetID, forceUpdate=1)
                self.update()
                gdata.mainGameDlg.update()
            return 0
        except ige.GameException, e:
            self.win.setStatus(_(e.args[0]))
            return 1
예제 #4
0
class FleetDlg:

    def __init__(self, app):
        self.app = app
        self.createUI()
        self.fleetCommandDlg = FleetCommandDlg(self.app)
        self.fleetSpecsDlg = FleetSpecsDlg(self.app)
        self.fleetSplitDlg = FleetSplitDlg(self.app)
        self.renameFleetDlg = RenameFleetDlg(self.app)
        self.fleetScoutBloomDlg = FleetScoutBloomDlg(self.app)
        self.locateDlg = LocateDlg(self.app)
        self.confirmDlg = ConfirmDlg(app)

    def display(self, objID):
        fleet = client.get(objID)
        if not hasattr(fleet, "ships"):
            return
        self.fleetID = objID
        self.showFleet()
        # 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.showFleet()

    def showFleet(self):
        fleet = client.get(self.fleetID, noUpdate = 1)
        if hasattr(fleet,'customname') and fleet.customname:
            self.win.title = _('Fleet: %s') % fleet.customname
        else:
            self.win.title = _('Fleet: %s') % getattr(fleet, 'name', res.getUnknownName())
        # fill listbox
        items = []
        # serial ships
        if hasattr(fleet, 'ships'):
            for designID, hp, shield, exp in fleet.ships:
                tech = client.getPlayer().shipDesigns[designID]
                if shield > 0:
                    hpInfo = _("%d + %d") % (hp, shield)
                    hpSort = hp + 1000 * shield
                else:
                    hpInfo = _("%d") % hp
                    hpSort = hp
                item = ui.Item(tech.name,
                    tHP = hpInfo,
                    tHP_raw = hpSort,
                    tExp = exp,
                    tClass = _(gdata.shipClasses[tech.combatClass]),
                    designID = designID,
                    tLevel = Rules.shipExpToLevel.get(int(exp / tech.baseExp), Rules.shipDefLevel),
                    tSpec = [designID, hp, shield, exp],
                    tSpeed = _("%.2f") % tech.speed
                )
                items.append(item)
        self.win.vShips.items = items
        self.win.vShips.itemsChanged()
        self.win.vShips.selectItem(self.win.vShips.items[0])
        self.showShip(self.win.vShips.items[0].designID, self.win.vShips.items[0].tExp)
        # fleet info
        self.win.vFCoordinates.text = '[%.1f, %.1f]' % (fleet.x, fleet.y)
        if fleet.orbiting != Const.OID_NONE:
            self.win.vFOrbiting.text = getattr(client.get(fleet.orbiting, noUpdate = 1), 'name', res.getUnknownName())
        else:
            self.win.vFOrbiting.text = _('N/A')
        if hasattr(fleet, "speedBoost") and hasattr(fleet, "maxSpeed"):
            text = _("%.2f") % (fleet.maxSpeed * fleet.speedBoost)
            info = _("Base speed %.2f, speed boost %.2f") % (
                fleet.maxSpeed, fleet.speedBoost
            )
        else:
            text = _("?")
            info = None
        self.win.vFMaxSpeed.text = text
        self.win.vFMaxSpeed.tooltipTitle = _("Details")
        self.win.vFMaxSpeed.tooltip = info
        self.win.vFMaxSpeed.statustip = info
        self.win.vFSignature.text =  getattr(fleet, 'signature', '?')
        # commands
        items = []
        index = 0
        if hasattr(fleet, 'actions'):
            for action, target, data in fleet.actions:
                info = "-"
                if target != Const.OID_NONE:
                    targetName = getattr(client.get(target, noUpdate = 1), 'name', res.getUnknownName())
                else:
                    targetName = '-'
                if index == fleet.actionIndex: current = '>'
                else: current = ''
                # additional info
                if action == Const.FLACTION_DECLAREWAR:
                    info = getattr(client.get(data, noUpdate = 1), 'name', res.getUnknownName())
                elif action == Const.FLACTION_DEPLOY:
                    info = client.getPlayer().shipDesigns[data].name
                elif action == Const.FLACTION_REPEATFROM:
                    info = _("Command #%d") % (data + 1)
                elif action == Const.FLACTION_WAIT:
                    info = _("%d / %d") % (fleet.actionWaitCounter, data)
                # create item
                item = ui.Item(gdata.fleetActions[action], targetName = targetName, data = info, tIndex = index + 1, current = current)
                items.append(item)
                index += 1
        self.win.vCommands.items = items
        self.win.vCommands.selection = []
        self.win.vCommands.itemsChanged()
        self.win.vCommandUp.enabled = 0
        self.win.vCommandDown.enabled = 0
        self.win.vCommandDel.enabled = 0
        self.win.vCommandSetActive.enabled = 0

    def showShip(self, techID, exp):
        tech = client.getPlayer().shipDesigns[techID]
        level = Rules.shipExpToLevel.get(int(exp / tech.baseExp), Rules.shipDefLevel)
        self.win.vShipModel.text = tech.name
        self.win.vShipClass.text = _(gdata.shipClasses[tech.combatClass])
        self.win.vShipAtt.text = int(tech.combatAtt * Rules.shipLevelEff[level])
        self.win.vShipDef.text = _("%d / %d") % (
            int(tech.combatDef * Rules.shipLevelEff[level]),
            int(tech.missileDef * Rules.shipLevelEff[level]),
        )
        self.win.vShipMaxSpeed.text = _("%.2f") % tech.speed
        self.win.vShipScannerPwr.text = tech.scannerPwr
        self.win.vShipSupport.text = _("%d + %d") % (tech.operEn, int(tech.buildProd * Rules.operProdRatio))
        info = _("Support: %d energy and %d contruction points per turn.") % (tech.operEn, int(tech.buildProd * Rules.operProdRatio))
        self.win.vShipSupport.statustip = info
        self.win.vShipSupport.tooltip = info
        self.win.vShipStorages.text = _("%d") % tech.storEn
        self.win.vShipSignature.text = tech.signature
        if tech.shieldHP > 0:
            self.win.vShipMaxHP.text = _("%d + %d") % (
                tech.maxHP,
                tech.shieldHP,
            )
        else:
            self.win.vShipMaxHP.text = _("%d") % (
                tech.maxHP,
            )
        # show equipment
        items = []
        for techID in tech.eqIDs:
            eq = client.getTechInfo(techID)
            short = sequip.getShortDescr(techID)
            long = sequip.getLongDescr(techID)
            item = ui.Item(_("%d x %s") % (tech.eqIDs[techID], eq.name),
                tData = short, tooltip = long, statustip = long)
            items.append(item)
        self.win.vShipEquipment.items = items
        self.win.vShipEquipment.itemsChanged()

    def onFleetSpecs(self, widget, action, data):
        self.fleetSpecsDlg.displayFleet(self.fleetID)

    def onShipSelected(self, widget, action, data):
        self.showShip(data.designID, data.tExp)

    def onSelectCommand(self, widget, action, data):
        index = self.win.vCommands.items.index(self.win.vCommands.selection[0])
        self.win.vCommandUp.enabled = index > 0
        self.win.vCommandDown.enabled = index < len(self.win.vCommands.items) - 1
        self.win.vCommandDel.enabled = 1
        self.win.vCommandSetActive.enabled = 1

    def onNewCommand(self, widget, action, data):
        sel = self.win.vCommands.selection
        if not sel:
            self.fleetCommandDlg.display(self, FleetCommandDlg.NEW_COMMAND)
        else:
            self.fleetCommandDlg.display(self, self.win.vCommands.items.index(sel[0]) + 1)

    def onDeleteCommand(self, widget, action, data, update=True):
        sel = self.win.vCommands.selection
        if not sel:
            self.win.setStatus(_('Select command to delete.'))
            return
        item = sel[0]
        try:
            self.win.setStatus(_('Executing DELETE COMMAND command...'))
            fleet = client.get(self.fleetID, noUpdate = 1)
            fleet.actions, fleet.actionIndex = client.cmdProxy.deleteAction(self.fleetID,
                item.tIndex - 1)
            self.win.vCommands.selection = []
            if update:
                self.win.setStatus(_('Command has been executed.'))
                if item.text == gdata.fleetActions[Const.FLACTION_WAIT]:
                    fleet = client.get(self.fleetID,forceUpdate=1)
                self.update()
                gdata.mainGameDlg.update()
            return 0
        except ige.GameException, e:
            self.win.setStatus(_(e.args[0]))
            return 1