forked from pyfa-org/Pyfa
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement selectable booster side effects and persist them to the dat…
…abase, very much based on the fighter ability code. Still need to name them and enable the effects. This also removes the old boosterActiveSideEffect table definition (migration script to drop table still needs to be written)
- Loading branch information
Showing
10 changed files
with
214 additions
and
72 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
# =============================================================================== | ||
# Copyright (C) 2010 Diego Duclos | ||
# | ||
# This file is part of eos. | ||
# | ||
# eos is free software: you can redistribute it and/or modify | ||
# it under the terms of the GNU Lesser General Public License as published by | ||
# the Free Software Foundation, either version 2 of the License, or | ||
# (at your option) any later version. | ||
# | ||
# eos 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 Lesser General Public License for more details. | ||
# | ||
# You should have received a copy of the GNU Lesser General Public License | ||
# along with eos. If not, see <http://www.gnu.org/licenses/>. | ||
# =============================================================================== | ||
|
||
from logbook import Logger | ||
|
||
from sqlalchemy.orm import reconstructor | ||
|
||
pyfalog = Logger(__name__) | ||
|
||
|
||
class BoosterSideEffect(object): | ||
|
||
def __init__(self, effect): | ||
"""Initialize from the program""" | ||
self.__effect = effect | ||
self.effectID = effect.ID if effect is not None else None | ||
self.active = False | ||
self.build() | ||
|
||
@reconstructor | ||
def init(self): | ||
"""Initialize from the database""" | ||
self.__effect = None | ||
|
||
if self.effectID: | ||
self.__effect = next((x for x in self.booster.item.effects.itervalues() if x.ID == self.effectID), None) | ||
if self.__effect is None: | ||
pyfalog.error("Effect (id: {0}) does not exist", self.effectID) | ||
return | ||
|
||
self.build() | ||
|
||
def build(self): | ||
pass | ||
|
||
@property | ||
def effect(self): | ||
return self.__effect | ||
|
||
@property | ||
def name(self): | ||
return self.__effect.getattr('displayName') or self.__effect.handlerName | ||
|
||
@property | ||
def attrPrefix(self): | ||
return self.__effect.getattr('prefix') | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -49,6 +49,7 @@ class BoosterView(d.Display): | |
"State", | ||
"attr:boosterness", | ||
"Base Name", | ||
"Side Effects", | ||
"Price", | ||
] | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
# noinspection PyPackageRequirements | ||
import wx | ||
from gui.contextMenu import ContextMenu | ||
import gui.mainFrame | ||
import gui.globalEvents as GE | ||
from service.fit import Fit | ||
from service.settings import ContextMenuSettings | ||
|
||
|
||
class BoosterSideEffect(ContextMenu): | ||
def __init__(self): | ||
self.mainFrame = gui.mainFrame.MainFrame.getInstance() | ||
self.settings = ContextMenuSettings.getInstance() | ||
|
||
def display(self, srcContext, selection): | ||
# if not self.settings.get('fighterAbilities'): | ||
# return False | ||
|
||
if self.mainFrame.getActiveFit() is None or srcContext not in ("boosterItem"): | ||
return False | ||
|
||
self.booster = selection[0] | ||
return True | ||
|
||
def getText(self, itmContext, selection): | ||
return "Side Effects" | ||
|
||
def addEffect(self, menu, ability): | ||
label = ability.name | ||
id = ContextMenu.nextID() | ||
self.effectIds[id] = ability | ||
menuItem = wx.MenuItem(menu, id, label, kind=wx.ITEM_CHECK) | ||
menu.Bind(wx.EVT_MENU, self.handleMode, menuItem) | ||
return menuItem | ||
|
||
def getSubMenu(self, context, selection, rootMenu, i, pitem): | ||
msw = True if "wxMSW" in wx.PlatformInfo else False | ||
self.context = context | ||
self.effectIds = {} | ||
|
||
sub = wx.Menu() | ||
|
||
for effect in self.booster.sideEffects: | ||
if not effect.effect.isImplemented: | ||
continue | ||
menuItem = self.addEffect(rootMenu if msw else sub, effect) | ||
sub.AppendItem(menuItem) | ||
menuItem.Check(effect.active) | ||
|
||
return sub | ||
|
||
def handleMode(self, event): | ||
effect = self.effectIds[event.Id] | ||
if effect is False or effect not in self.booster.sideEffects: | ||
event.Skip() | ||
return | ||
|
||
sFit = Fit.getInstance() | ||
fitID = self.mainFrame.getActiveFit() | ||
sFit.toggleBoosterSideEffect(fitID, effect) | ||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) | ||
|
||
|
||
BoosterSideEffect.register() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
__all__ = ["ammo", "ammoIcon", "attributeDisplay", "baseIcon", "baseName", | ||
"capacitorUse", "maxRange", "price", "propertyDisplay", "state", "misc", "abilities"] | ||
"capacitorUse", "maxRange", "price", "propertyDisplay", "state", "misc", "abilities", "sideEffects"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
# ============================================================================= | ||
# 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/>. | ||
# ============================================================================= | ||
|
||
|
||
# noinspection PyPackageRequirements | ||
import wx | ||
from eos.saveddata.booster import Booster | ||
from gui.viewColumn import ViewColumn | ||
import gui.mainFrame | ||
|
||
|
||
class SideEffects(ViewColumn): | ||
name = "Side Effects" | ||
|
||
def __init__(self, fittingView, params): | ||
ViewColumn.__init__(self, fittingView) | ||
|
||
self.mainFrame = gui.mainFrame.MainFrame.getInstance() | ||
self.columnText = "Active Side Effects" | ||
self.mask = wx.LIST_MASK_TEXT | ||
|
||
def getText(self, stuff): | ||
if isinstance(stuff, Booster): | ||
active = [x.name for x in stuff.sideEffects if x.active] | ||
if len(active) == 0: | ||
return "None" | ||
return ", ".join(active) | ||
|
||
|
||
SideEffects.register() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -79,5 +79,6 @@ def delayedText(self, display, colItem): | |
misc, | ||
price, | ||
propertyDisplay, | ||
state | ||
state, | ||
sideEffects | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters