Add Ammo support for projected effects view
This commit is contained in:
@@ -11,10 +11,13 @@ class ModuleAmmoPicker(ContextMenu):
|
||||
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
|
||||
|
||||
def display(self, context, selection):
|
||||
if self.mainFrame.getActiveFit() is None or context != "module":
|
||||
if self.mainFrame.getActiveFit() is None or context not in ("module", "projectedModule"):
|
||||
return False
|
||||
|
||||
modules = self.mainFrame.getFittingView().getSelectedMods()
|
||||
if context == "module":
|
||||
modules = self.mainFrame.getFittingView().getSelectedMods()
|
||||
else:
|
||||
modules = (selection[0],)
|
||||
validCharges = None
|
||||
for mod in modules:
|
||||
currCharges = mod.getValidCharges()
|
||||
@@ -23,6 +26,7 @@ class ModuleAmmoPicker(ContextMenu):
|
||||
|
||||
validCharges = currCharges
|
||||
|
||||
self.modules = modules
|
||||
self.charges = list(validCharges)
|
||||
self.module = mod
|
||||
return len(self.charges) > 0
|
||||
@@ -41,7 +45,7 @@ class ModuleAmmoPicker(ContextMenu):
|
||||
d = charge.getAttribute("%sDamage" % type)
|
||||
if d > 0:
|
||||
damage += d
|
||||
|
||||
|
||||
return (-range - falloff, charge.name.rsplit()[-2:], damage, charge.name)
|
||||
|
||||
MISSILE_ORDER = ["em", "thermal", "kinetic", "explosive"]
|
||||
@@ -74,6 +78,7 @@ class ModuleAmmoPicker(ContextMenu):
|
||||
m.Enable(id, False)
|
||||
|
||||
def getSubMenu(self, context, selection, menu, i):
|
||||
self.context = context
|
||||
menu.Bind(wx.EVT_MENU, self.handleAmmoSwitch)
|
||||
m = wx.Menu()
|
||||
m.Bind(wx.EVT_MENU, self.handleAmmoSwitch)
|
||||
@@ -167,8 +172,8 @@ class ModuleAmmoPicker(ContextMenu):
|
||||
|
||||
sFit = service.Fit.getInstance()
|
||||
fitID = self.mainFrame.getActiveFit()
|
||||
modules = map(lambda mod: mod.position, self.mainFrame.getFittingView().getSelectedMods())
|
||||
sFit.setAmmo(fitID, charge.ID if charge is not None else None, modules)
|
||||
|
||||
sFit.setAmmo(fitID, charge.ID if charge is not None else None, self.modules)
|
||||
wx.PostEvent(self.mainFrame, gui.fittingView.FitChanged(fitID=fitID))
|
||||
|
||||
ModuleAmmoPicker.register()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
__all__ = ["moduleState", "moduleNameOrSlot", "attributeDisplay", "maxRange",
|
||||
"name", "droneDps", "droneNameAmount", "droneCheckbox", "moduleAmmo",
|
||||
"capacitorUse", "activityCheckbox", "moduleAmmoIcon", "modulePrice",
|
||||
"projectedName", "projectedState"]
|
||||
"projectedName", "projectedState", "projectedAmmoIcon", "projectedAmmo"]
|
||||
|
||||
43
gui/builtinViewColumns/projectedAmmo.py
Executable file
43
gui/builtinViewColumns/projectedAmmo.py
Executable file
@@ -0,0 +1,43 @@
|
||||
#===============================================================================
|
||||
# Copyright (C) 2010 Diego Duclos
|
||||
#
|
||||
# This file is part of pyfa.
|
||||
#
|
||||
# pyfa is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# pyfa is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
|
||||
#===============================================================================
|
||||
|
||||
from gui.viewColumn import ViewColumn
|
||||
import gui.builtinViewColumns.moduleAmmo
|
||||
from eos.types import Module
|
||||
|
||||
class ProjectedAmmo(ViewColumn):
|
||||
name = "Projected Ammo"
|
||||
def __init__(self, fittingView, params):
|
||||
ViewColumn.__init__(self, fittingView)
|
||||
self.columnText = "Ammo"
|
||||
self.slave = gui.builtinViewColumns.moduleAmmo.ModuleAmmo(fittingView, params)
|
||||
|
||||
def getText(self, stuff):
|
||||
if isinstance(stuff, Module):
|
||||
return self.slave.getText(stuff)
|
||||
else:
|
||||
return ""
|
||||
|
||||
def getImageId(self, thing):
|
||||
if isinstance(thing, Module):
|
||||
return self.slave.getImageId(thing)
|
||||
else:
|
||||
return -1
|
||||
|
||||
ProjectedAmmo.register()
|
||||
44
gui/builtinViewColumns/projectedAmmoIcon.py
Executable file
44
gui/builtinViewColumns/projectedAmmoIcon.py
Executable file
@@ -0,0 +1,44 @@
|
||||
#===============================================================================
|
||||
# Copyright (C) 2010 Diego Duclos
|
||||
#
|
||||
# This file is part of pyfa.
|
||||
#
|
||||
# pyfa is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# pyfa is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
|
||||
#===============================================================================
|
||||
|
||||
from gui.viewColumn import ViewColumn
|
||||
import gui.builtinViewColumns.moduleAmmoIcon
|
||||
from eos.types import Module
|
||||
|
||||
class ProjectedAmmoIcon(ViewColumn):
|
||||
name = "Projected Ammo Icon"
|
||||
def __init__(self, fittingView, params):
|
||||
ViewColumn.__init__(self, fittingView)
|
||||
self.columnText = ""
|
||||
self.size = 20
|
||||
self.slave = gui.builtinViewColumns.moduleAmmoIcon.ModuleAmmoIcon(fittingView, params)
|
||||
|
||||
def getText(self, stuff):
|
||||
if isinstance(stuff, Module):
|
||||
return self.slave.getText(stuff)
|
||||
else:
|
||||
return ""
|
||||
|
||||
def getImageId(self, thing):
|
||||
if isinstance(thing, Module):
|
||||
return self.slave.getImageId(thing)
|
||||
else:
|
||||
return -1
|
||||
|
||||
ProjectedAmmoIcon.register()
|
||||
@@ -122,7 +122,7 @@ class FittingView(d.Display):
|
||||
modules = []
|
||||
sel = self.GetFirstSelected()
|
||||
while sel != -1:
|
||||
modules.append(self.mods[self.GetItemData(sel)].position)
|
||||
modules.append(self.mods[self.GetItemData(sel)])
|
||||
sel = self.GetNextSelected(sel)
|
||||
|
||||
cFit.setAmmo(fitID, itemID, modules)
|
||||
|
||||
@@ -27,8 +27,10 @@ from gui.contextMenu import ContextMenu
|
||||
import eos.types
|
||||
|
||||
class ProjectedView(d.Display):
|
||||
DEFAULT_COLS = ["Projected State",
|
||||
"Projected Name"]
|
||||
DEFAULT_COLS = ["Projected Ammo Icon",
|
||||
"Projected State",
|
||||
"Projected Name",
|
||||
"Projected Ammo"]
|
||||
|
||||
def __init__(self, parent):
|
||||
d.Display.__init__(self, parent)
|
||||
|
||||
@@ -366,10 +366,9 @@ class Fit(object):
|
||||
fit = eos.db.getFit(fitID)
|
||||
ammo = eos.db.getItem(ammoID)
|
||||
|
||||
for pos in modules:
|
||||
mod = fit.modules[pos]
|
||||
for mod in modules:
|
||||
if mod.isValidCharge(ammo):
|
||||
fit.modules[pos].charge = ammo
|
||||
mod.charge = ammo
|
||||
|
||||
fit.clear()
|
||||
fit.calculateModifiedAttributes()
|
||||
|
||||
Reference in New Issue
Block a user