Rename multiple entities to reflect that it's target profile rather than target resists

This commit is contained in:
DarkPhoenix
2019-07-25 16:20:41 +03:00
parent 71f1c69f23
commit e34fcb2f9c
25 changed files with 189 additions and 187 deletions

View File

@@ -72,7 +72,7 @@ def DBInMemory_test():
# noinspection PyPep8
#from eos.db.gamedata import alphaClones, attribute, category, effect, group, icon, item, marketGroup, metaData, metaGroup, queries, traits, unit
# noinspection PyPep8
#from eos.db.saveddata import booster, cargo, character, crest, damagePattern, databaseRepair, drone, fighter, fit, implant, implantSet, loadDefaultDatabaseValues, miscData, module, override, price, queries, skill, targetResists, user
#from eos.db.saveddata import booster, cargo, character, crest, damagePattern, databaseRepair, drone, fighter, fit, implant, implantSet, loadDefaultDatabaseValues, miscData, module, override, price, queries, skill, targetProfile, user
# If using in memory saveddata, you'll want to reflect it so the data structure is good.
if saveddata_connectionstring == "sqlite:///:memory:":

View File

@@ -81,7 +81,7 @@ sd_lock = threading.RLock()
from eos.db.gamedata import alphaClones, attribute, category, effect, group, item, marketGroup, metaData, metaGroup, queries, traits, unit, dynamicAttributes
# noinspection PyPep8
from eos.db.saveddata import booster, cargo, character, damagePattern, databaseRepair, drone, fighter, fit, implant, implantSet, loadDefaultDatabaseValues, \
miscData, mutator, module, override, price, queries, skill, targetResists, user
miscData, mutator, module, override, price, queries, skill, targetProfile, user
# Import queries
# noinspection PyPep8

View File

@@ -11,7 +11,7 @@ __all__ = [
"implant",
"damagePattern",
"miscData",
"targetResists",
"targetProfile",
"override",
"implantSet",
"loadDefaultDatabaseValues"

View File

@@ -41,7 +41,7 @@ from eos.saveddata.fighter import Fighter
from eos.saveddata.fit import Fit as es_Fit
from eos.saveddata.implant import Implant
from eos.saveddata.module import Module
from eos.saveddata.targetResists import TargetResists
from eos.saveddata.targetProfile import TargetProfile
from eos.saveddata.user import User
@@ -232,7 +232,7 @@ mapper(es_Fit, fits_table,
Character,
backref="fits"),
"_Fit__damagePattern": relation(DamagePattern),
"_Fit__targetResists": relation(TargetResists),
"_Fit__targetProfile": relation(TargetProfile),
"projectedOnto": projectedFitSourceRel,
"victimOf": relationship(
ProjectedFit,

View File

@@ -19,7 +19,7 @@
import eos.db
from eos.saveddata.damagePattern import DamagePattern as es_DamagePattern
from eos.saveddata.targetResists import TargetResists as es_TargetResists
from eos.saveddata.targetProfile import TargetProfile as es_TargetProfile
class ImportError(Exception):
@@ -188,9 +188,9 @@ class DefaultDatabaseValues:
for targetResistProfileRow in targetResistProfileList:
name, em, therm, kin, exp = targetResistProfileRow
resistsProfile = eos.db.eos.db.getTargetResists(name)
resistsProfile = eos.db.eos.db.getTargetProfile(name)
if resistsProfile is None:
resistsProfile = es_TargetResists(em, therm, kin, exp)
resistsProfile = es_TargetProfile(em, therm, kin, exp)
resistsProfile.name = name
eos.db.save(resistsProfile)

View File

@@ -30,7 +30,7 @@ from eos.saveddata.price import Price
from eos.saveddata.user import User
from eos.saveddata.ssocharacter import SsoCharacter
from eos.saveddata.damagePattern import DamagePattern
from eos.saveddata.targetResists import TargetResists
from eos.saveddata.targetProfile import TargetProfile
from eos.saveddata.character import Character
from eos.saveddata.implantSet import ImplantSet
from eos.saveddata.fit import Fit
@@ -366,16 +366,16 @@ def clearDamagePatterns():
return deleted_rows
def getTargetResistsList(eager=None):
def getTargetProfileList(eager=None):
eager = processEager(eager)
with sd_lock:
patterns = saveddata_session.query(TargetResists).options(*eager).all()
patterns = saveddata_session.query(TargetProfile).options(*eager).all()
return patterns
def clearTargetResists():
def clearTargetProfiles():
with sd_lock:
deleted_rows = saveddata_session.query(TargetResists).delete()
deleted_rows = saveddata_session.query(TargetProfile).delete()
commit()
return deleted_rows
@@ -408,22 +408,22 @@ def getDamagePattern(lookfor, eager=None):
return pattern
@cachedQuery(TargetResists, 1, "lookfor")
def getTargetResists(lookfor, eager=None):
@cachedQuery(TargetProfile, 1, "lookfor")
def getTargetProfile(lookfor, eager=None):
if isinstance(lookfor, int):
if eager is None:
with sd_lock:
pattern = saveddata_session.query(TargetResists).get(lookfor)
pattern = saveddata_session.query(TargetProfile).get(lookfor)
else:
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(TargetResists).options(*eager).filter(
TargetResists.ID == lookfor).first()
pattern = saveddata_session.query(TargetProfile).options(*eager).filter(
TargetProfile.ID == lookfor).first()
elif isinstance(lookfor, str):
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(TargetResists).options(*eager).filter(
TargetResists.name == lookfor).first()
pattern = saveddata_session.query(TargetProfile).options(*eager).filter(
TargetProfile.name == lookfor).first()
else:
raise TypeError("Need integer or string as argument")
return pattern
@@ -439,11 +439,11 @@ def getImplantSet(lookfor, eager=None):
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(ImplantSet).options(*eager).filter(
TargetResists.ID == lookfor).first()
TargetProfile.ID == lookfor).first()
elif isinstance(lookfor, str):
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(ImplantSet).options(*eager).filter(TargetResists.name == lookfor).first()
pattern = saveddata_session.query(ImplantSet).options(*eager).filter(TargetProfile.name == lookfor).first()
else:
raise TypeError("Improper argument")
return pattern

View File

@@ -0,0 +1,42 @@
# ===============================================================================
# Copyright (C) 2014 Ryan Holmes
#
# 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 sqlalchemy import Table, Column, Integer, Float, ForeignKey, String, DateTime
from sqlalchemy.orm import mapper
import datetime
from eos.db import saveddata_meta
from eos.saveddata.targetProfile import TargetProfile
targetProfiles_table = Table("targetResists", saveddata_meta,
Column("ID", Integer, primary_key=True),
Column("name", String),
Column("emAmount", Float),
Column("thermalAmount", Float),
Column("kineticAmount", Float),
Column("explosiveAmount", Float),
Column("maxVelocity", Float, nullable=True),
Column("signatureRadius", Float, nullable=True),
Column("radius", Float, nullable=True),
Column("ownerID", ForeignKey("users.ID"), nullable=True),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now)
)
mapper(TargetProfile, targetProfiles_table)

View File

@@ -1,42 +0,0 @@
# ===============================================================================
# Copyright (C) 2014 Ryan Holmes
#
# 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 sqlalchemy import Table, Column, Integer, Float, ForeignKey, String, DateTime
from sqlalchemy.orm import mapper
import datetime
from eos.db import saveddata_meta
from eos.saveddata.targetResists import TargetResists
targetResists_table = Table("targetResists", saveddata_meta,
Column("ID", Integer, primary_key=True),
Column("name", String),
Column("emAmount", Float),
Column("thermalAmount", Float),
Column("kineticAmount", Float),
Column("explosiveAmount", Float),
Column("maxVelocity", Float, nullable=True),
Column("signatureRadius", Float, nullable=True),
Column("radius", Float, nullable=True),
Column("ownerID", ForeignKey("users.ID"), nullable=True),
Column("created", DateTime, nullable=True, default=datetime.datetime.now),
Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now)
)
mapper(TargetResists, targetResists_table)

View File

@@ -138,7 +138,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
return True
return False
def getVolleyParameters(self, targetResists=None):
def getVolleyParameters(self, targetProfile=None):
if not self.dealsDamage or self.amountActive <= 0:
return {0: DmgTypes(0, 0, 0, 0)}
if self.__baseVolley is None:
@@ -150,17 +150,17 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
kinetic=(dmgGetter("kineticDamage", 0)) * dmgMult,
explosive=(dmgGetter("explosiveDamage", 0)) * dmgMult)
volley = DmgTypes(
em=self.__baseVolley.em * (1 - getattr(targetResists, "emAmount", 0)),
thermal=self.__baseVolley.thermal * (1 - getattr(targetResists, "thermalAmount", 0)),
kinetic=self.__baseVolley.kinetic * (1 - getattr(targetResists, "kineticAmount", 0)),
explosive=self.__baseVolley.explosive * (1 - getattr(targetResists, "explosiveAmount", 0)))
em=self.__baseVolley.em * (1 - getattr(targetProfile, "emAmount", 0)),
thermal=self.__baseVolley.thermal * (1 - getattr(targetProfile, "thermalAmount", 0)),
kinetic=self.__baseVolley.kinetic * (1 - getattr(targetProfile, "kineticAmount", 0)),
explosive=self.__baseVolley.explosive * (1 - getattr(targetProfile, "explosiveAmount", 0)))
return {0: volley}
def getVolley(self, targetResists=None):
return self.getVolleyParameters(targetResists=targetResists)[0]
def getVolley(self, targetProfile=None):
return self.getVolleyParameters(targetProfile=targetProfile)[0]
def getDps(self, targetResists=None):
volley = self.getVolley(targetResists=targetResists)
def getDps(self, targetProfile=None):
volley = self.getVolley(targetProfile=targetProfile)
if not volley:
return DmgTypes(0, 0, 0, 0)
cycleParams = self.getCycleParameters()

View File

@@ -183,7 +183,7 @@ class Fighter(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
return True
return False
def getVolleyParametersPerEffect(self, targetResists=None):
def getVolleyParametersPerEffect(self, targetProfile=None):
if not self.active or self.amountActive <= 0:
return {}
if self.__baseVolley is None:
@@ -196,21 +196,21 @@ class Fighter(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
adjustedVolley[effectID] = {}
for volleyTime, volleyValue in effectData.items():
adjustedVolley[effectID][volleyTime] = DmgTypes(
em=volleyValue.em * (1 - getattr(targetResists, "emAmount", 0)),
thermal=volleyValue.thermal * (1 - getattr(targetResists, "thermalAmount", 0)),
kinetic=volleyValue.kinetic * (1 - getattr(targetResists, "kineticAmount", 0)),
explosive=volleyValue.explosive * (1 - getattr(targetResists, "explosiveAmount", 0)))
em=volleyValue.em * (1 - getattr(targetProfile, "emAmount", 0)),
thermal=volleyValue.thermal * (1 - getattr(targetProfile, "thermalAmount", 0)),
kinetic=volleyValue.kinetic * (1 - getattr(targetProfile, "kineticAmount", 0)),
explosive=volleyValue.explosive * (1 - getattr(targetProfile, "explosiveAmount", 0)))
return adjustedVolley
def getVolleyPerEffect(self, targetResists=None):
volleyParams = self.getVolleyParametersPerEffect(targetResists=targetResists)
def getVolleyPerEffect(self, targetProfile=None):
volleyParams = self.getVolleyParametersPerEffect(targetProfile=targetProfile)
volleyMap = {}
for effectID, volleyData in volleyParams.items():
volleyMap[effectID] = volleyData[0]
return volleyMap
def getVolley(self, targetResists=None):
volleyParams = self.getVolleyParametersPerEffect(targetResists=targetResists)
def getVolley(self, targetProfile=None):
volleyParams = self.getVolleyParametersPerEffect(targetProfile=targetProfile)
em = 0
therm = 0
kin = 0
@@ -222,30 +222,30 @@ class Fighter(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
exp += volleyData[0].explosive
return DmgTypes(em, therm, kin, exp)
def getDps(self, targetResists=None):
def getDps(self, targetProfile=None):
em = 0
thermal = 0
kinetic = 0
explosive = 0
for dps in self.getDpsPerEffect(targetResists=targetResists).values():
for dps in self.getDpsPerEffect(targetProfile=targetProfile).values():
em += dps.em
thermal += dps.thermal
kinetic += dps.kinetic
explosive += dps.explosive
return DmgTypes(em=em, thermal=thermal, kinetic=kinetic, explosive=explosive)
def getDpsPerEffect(self, targetResists=None):
def getDpsPerEffect(self, targetProfile=None):
if not self.active or self.amountActive <= 0:
return {}
cycleParams = self.getCycleParametersPerEffectOptimizedDps(targetResists=targetResists)
cycleParams = self.getCycleParametersPerEffectOptimizedDps(targetProfile=targetProfile)
dpsMap = {}
for ability in self.abilities:
if ability.effectID in cycleParams:
cycleTime = cycleParams[ability.effectID].averageTime
dpsMap[ability.effectID] = ability.getDps(targetResists=targetResists, cycleTimeOverride=cycleTime)
dpsMap[ability.effectID] = ability.getDps(targetProfile=targetProfile, cycleTimeOverride=cycleTime)
return dpsMap
def getCycleParametersPerEffectOptimizedDps(self, targetResists=None, reloadOverride=None):
def getCycleParametersPerEffectOptimizedDps(self, targetProfile=None, reloadOverride=None):
cycleParamsInfinite = self.getCycleParametersPerEffectInfinite()
cycleParamsReload = self.getCycleParametersPerEffect(reloadOverride=reloadOverride)
dpsMapOnlyInfinite = {}
@@ -254,10 +254,10 @@ class Fighter(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
for ability in self.abilities:
if ability.effectID in cycleParamsInfinite:
cycleTime = cycleParamsInfinite[ability.effectID].averageTime
dpsMapOnlyInfinite[ability.effectID] = ability.getDps(targetResists=targetResists, cycleTimeOverride=cycleTime)
dpsMapOnlyInfinite[ability.effectID] = ability.getDps(targetProfile=targetProfile, cycleTimeOverride=cycleTime)
if ability.effectID in cycleParamsReload:
cycleTime = cycleParamsReload[ability.effectID].averageTime
dpsMapAllWithReloads[ability.effectID] = ability.getDps(targetResists=targetResists, cycleTimeOverride=cycleTime)
dpsMapAllWithReloads[ability.effectID] = ability.getDps(targetProfile=targetProfile, cycleTimeOverride=cycleTime)
totalOnlyInfinite = sum(i.total for i in dpsMapOnlyInfinite.values())
totalAllWithReloads = sum(i.total for i in dpsMapAllWithReloads.values())
return cycleParamsInfinite if totalOnlyInfinite >= totalAllWithReloads else cycleParamsReload

View File

@@ -114,7 +114,7 @@ class FighterAbility:
speed = self.fighter.getModifiedItemAttr("{}Duration".format(self.attrPrefix))
return speed
def getVolley(self, targetResists=None):
def getVolley(self, targetProfile=None):
if not self.dealsDamage or not self.active:
return DmgTypes(0, 0, 0, 0)
if self.attrPrefix == "fighterAbilityLaunchBomb":
@@ -129,14 +129,14 @@ class FighterAbility:
exp = self.fighter.getModifiedItemAttr("{}DamageExp".format(self.attrPrefix), 0)
dmgMult = self.fighter.amountActive * self.fighter.getModifiedItemAttr("{}DamageMultiplier".format(self.attrPrefix), 1)
volley = DmgTypes(
em=em * dmgMult * (1 - getattr(targetResists, "emAmount", 0)),
thermal=therm * dmgMult * (1 - getattr(targetResists, "thermalAmount", 0)),
kinetic=kin * dmgMult * (1 - getattr(targetResists, "kineticAmount", 0)),
explosive=exp * dmgMult * (1 - getattr(targetResists, "explosiveAmount", 0)))
em=em * dmgMult * (1 - getattr(targetProfile, "emAmount", 0)),
thermal=therm * dmgMult * (1 - getattr(targetProfile, "thermalAmount", 0)),
kinetic=kin * dmgMult * (1 - getattr(targetProfile, "kineticAmount", 0)),
explosive=exp * dmgMult * (1 - getattr(targetProfile, "explosiveAmount", 0)))
return volley
def getDps(self, targetResists=None, cycleTimeOverride=None):
volley = self.getVolley(targetResists=targetResists)
def getDps(self, targetProfile=None, cycleTimeOverride=None):
volley = self.getVolley(targetProfile=targetProfile)
if not volley:
return DmgTypes(0, 0, 0, 0)
cycleTime = cycleTimeOverride if cycleTimeOverride is not None else self.cycleTime

View File

@@ -149,12 +149,12 @@ class Fit:
self.__capRecharge = None
@property
def targetResists(self):
return self.__targetResists
def targetProfile(self):
return self.__targetProfile
@targetResists.setter
def targetResists(self, targetResists):
self.__targetResists = targetResists
@targetProfile.setter
def targetProfile(self, targetProfile):
self.__targetProfile = targetProfile
self.__weaponDpsMap = {}
self.__weaponVolleyMap = {}
self.__droneDps = None
@@ -1497,8 +1497,8 @@ class Fit:
weaponDps = DmgTypes(0, 0, 0, 0)
for mod in self.modules:
weaponVolley += mod.getVolley(spoolOptions=spoolOptions, targetResists=self.targetResists)
weaponDps += mod.getDps(spoolOptions=spoolOptions, targetResists=self.targetResists)
weaponVolley += mod.getVolley(spoolOptions=spoolOptions, targetProfile=self.targetProfile)
weaponDps += mod.getDps(spoolOptions=spoolOptions, targetProfile=self.targetProfile)
self.__weaponVolleyMap[spoolOptions] = weaponVolley
self.__weaponDpsMap[spoolOptions] = weaponDps
@@ -1508,12 +1508,12 @@ class Fit:
droneDps = DmgTypes(0, 0, 0, 0)
for drone in self.drones:
droneVolley += drone.getVolley(targetResists=self.targetResists)
droneDps += drone.getDps(targetResists=self.targetResists)
droneVolley += drone.getVolley(targetProfile=self.targetProfile)
droneDps += drone.getDps(targetProfile=self.targetProfile)
for fighter in self.fighters:
droneVolley += fighter.getVolley(targetResists=self.targetResists)
droneDps += fighter.getDps(targetResists=self.targetResists)
droneVolley += fighter.getVolley(targetProfile=self.targetProfile)
droneDps += fighter.getDps(targetProfile=self.targetProfile)
self.__droneDps = droneDps
self.__droneVolley = droneVolley
@@ -1557,7 +1557,7 @@ class Fit:
fitCopy.mode = deepcopy(self.mode)
fitCopy.name = "%s copy" % self.name
fitCopy.damagePattern = self.damagePattern
fitCopy.targetResists = self.targetResists
fitCopy.targetProfile = self.targetProfile
fitCopy.implantLocation = self.implantLocation
fitCopy.systemSecurity = self.systemSecurity
fitCopy.notes = self.notes

View File

@@ -421,7 +421,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
return True
return False
def getVolleyParameters(self, spoolOptions=None, targetResists=None, ignoreState=False):
def getVolleyParameters(self, spoolOptions=None, targetProfile=None, ignoreState=False):
if self.isEmpty or (self.state < FittingModuleState.ACTIVE and not ignoreState):
return {0: DmgTypes(0, 0, 0, 0)}
if self.__baseVolley is None:
@@ -451,24 +451,24 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut):
adjustedVolley = {}
for volleyTime, volleyValue in self.__baseVolley.items():
adjustedVolley[volleyTime] = DmgTypes(
em=volleyValue.em * spoolMultiplier * (1 - getattr(targetResists, "emAmount", 0)),
thermal=volleyValue.thermal * spoolMultiplier * (1 - getattr(targetResists, "thermalAmount", 0)),
kinetic=volleyValue.kinetic * spoolMultiplier * (1 - getattr(targetResists, "kineticAmount", 0)),
explosive=volleyValue.explosive * spoolMultiplier * (1 - getattr(targetResists, "explosiveAmount", 0)))
em=volleyValue.em * spoolMultiplier * (1 - getattr(targetProfile, "emAmount", 0)),
thermal=volleyValue.thermal * spoolMultiplier * (1 - getattr(targetProfile, "thermalAmount", 0)),
kinetic=volleyValue.kinetic * spoolMultiplier * (1 - getattr(targetProfile, "kineticAmount", 0)),
explosive=volleyValue.explosive * spoolMultiplier * (1 - getattr(targetProfile, "explosiveAmount", 0)))
return adjustedVolley
def getVolley(self, spoolOptions=None, targetResists=None, ignoreState=False):
volleyParams = self.getVolleyParameters(spoolOptions=spoolOptions, targetResists=targetResists, ignoreState=ignoreState)
def getVolley(self, spoolOptions=None, targetProfile=None, ignoreState=False):
volleyParams = self.getVolleyParameters(spoolOptions=spoolOptions, targetProfile=targetProfile, ignoreState=ignoreState)
if len(volleyParams) == 0:
return DmgTypes(0, 0, 0, 0)
return volleyParams[min(volleyParams)]
def getDps(self, spoolOptions=None, targetResists=None, ignoreState=False):
def getDps(self, spoolOptions=None, targetProfile=None, ignoreState=False):
dmgDuringCycle = DmgTypes(0, 0, 0, 0)
cycleParams = self.getCycleParameters()
if cycleParams is None:
return dmgDuringCycle
volleyParams = self.getVolleyParameters(spoolOptions=spoolOptions, targetResists=targetResists, ignoreState=ignoreState)
volleyParams = self.getVolleyParameters(spoolOptions=spoolOptions, targetProfile=targetProfile, ignoreState=ignoreState)
avgCycleTime = cycleParams.averageTime
if len(volleyParams) == 0 or avgCycleTime == 0:
return dmgDuringCycle

View File

@@ -24,7 +24,7 @@ import eos.db
pyfalog = Logger(__name__)
class TargetResists:
class TargetProfile:
# also determined import/export order - VERY IMPORTANT
DAMAGE_TYPES = ("em", "thermal", "kinetic", "explosive")
@@ -49,7 +49,7 @@ class TargetResists:
# When we import damage profiles, we create new ones and update old ones. To do this, get a list of current
# patterns to allow lookup
lookup = {}
current = eos.db.getTargetResistsList()
current = eos.db.getTargetProfileList()
for pattern in current:
lookup[pattern.name] = pattern
@@ -64,7 +64,7 @@ class TargetResists:
pyfalog.warning("Data isn't in correct format, continue to next line.")
continue
if type != "TargetResists":
if type not in ("TargetProfile", "TargetResists"):
continue
numPatterns += 1
@@ -86,7 +86,7 @@ class TargetResists:
pattern.update(**fields)
eos.db.save(pattern)
else:
pattern = TargetResists(**fields)
pattern = TargetProfile(**fields)
pattern.name = name.strip()
eos.db.save(pattern)
patterns.append(pattern)
@@ -95,13 +95,13 @@ class TargetResists:
return patterns, numPatterns
EXPORT_FORMAT = "TargetResists = %s,%.1f,%.1f,%.1f,%.1f\n"
EXPORT_FORMAT = "TargetProfile = %s,%.1f,%.1f,%.1f,%.1f\n"
@classmethod
def exportPatterns(cls, *patterns):
out = "# Exported from pyfa\n#\n"
out += "# Values are in following format:\n"
out += "# TargetResists = [name],[EM %],[Thermal %],[Kinetic %],[Explosive %]\n\n"
out += "# TargetProfile = [name],[EM %],[Thermal %],[Kinetic %],[Explosive %]\n\n"
for dp in patterns:
out += cls.EXPORT_FORMAT % (
dp.name,
@@ -114,7 +114,7 @@ class TargetResists:
return out.strip()
def __deepcopy__(self, memo):
p = TargetResists(
p = TargetProfile(
self.emAmount, self.thermalAmount, self.kineticAmount, self.explosiveAmount,
self.maxVelocity, self.signatureRadius, self.radius)
p.name = "%s copy" % self.name

View File

@@ -39,7 +39,7 @@ from gui.builtinContextMenus import ( # noqa: E402,F401
damagePatternChange,
# Firepower panel
factorReload,
targetResists,
targetProfile,
# Graph extra options
graphDmgIgnoreResists,
graphDmgApplyProjected,

View File

@@ -8,10 +8,10 @@ import gui.mainFrame
from gui.bitmap_loader import BitmapLoader
from gui.contextMenu import ContextMenuUnconditional
from service.fit import Fit
from service.targetResists import TargetResists as svc_TargetResists
from service.targetProfile import TargetProfile as svc_TargetProfile
class TargetResists(ContextMenuUnconditional):
class TargetProfile(ContextMenuUnconditional):
def __init__(self):
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
@@ -20,13 +20,14 @@ class TargetResists(ContextMenuUnconditional):
if self.mainFrame.getActiveFit() is None or srcContext != "firepowerViewFull":
return False
sTR = svc_TargetResists.getInstance()
self.patterns = sTR.getTargetResistsList()
sTR = svc_TargetProfile.getInstance()
self.patterns = sTR.getTargetProfileList()
self.patterns.sort(key=lambda p: (p.name in ["None"], p.name))
return len(self.patterns) > 0
def getText(self, itmContext):
# We take into consideration just target resists, so call menu item accordingly
return "Target Resists"
def handleResistSwitch(self, event):
@@ -37,7 +38,7 @@ class TargetResists(ContextMenuUnconditional):
sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
sFit.setTargetResists(fitID, pattern)
sFit.setTargetProfile(fitID, pattern)
wx.PostEvent(self.mainFrame, GE.FitChanged(fitIDs=(fitID,)))
def addPattern(self, rootMenu, pattern):
@@ -55,7 +56,7 @@ class TargetResists(ContextMenuUnconditional):
sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
f = sFit.getFit(fitID)
tr = f.targetResists
tr = f.targetProfile
if tr == pattern:
bitmap = BitmapLoader.getBitmap("state_active_small", "gui")
@@ -108,4 +109,4 @@ class TargetResists(ContextMenuUnconditional):
return sub
TargetResists.register()
TargetProfile.register()

View File

@@ -2,7 +2,7 @@ import wx
import config
from eos.db.saveddata.loadDefaultDatabaseValues import DefaultDatabaseValues
from eos.db.saveddata.queries import clearPrices, clearDamagePatterns, clearTargetResists
from eos.db.saveddata.queries import clearPrices, clearDamagePatterns, clearTargetProfiles
from gui.bitmap_loader import BitmapLoader
from gui.preferenceView import PreferenceView
from gui.utils import helpers_wxPython as wxHelpers
@@ -83,9 +83,9 @@ class PFGeneralPref(PreferenceView):
btnSizer.Add(self.btnDeleteDamagePatterns, 0, wx.ALL, 5)
self.btnDeleteDamagePatterns.Bind(wx.EVT_BUTTON, self.DeleteDamagePatterns)
self.btnDeleteTargetResists = wx.Button(panel, wx.ID_ANY, "Delete All Target Resist Profiles", wx.DefaultPosition, wx.DefaultSize, 0)
btnSizer.Add(self.btnDeleteTargetResists, 0, wx.ALL, 5)
self.btnDeleteTargetResists.Bind(wx.EVT_BUTTON, self.DeleteTargetResists)
self.btnDeleteTargetProfiles = wx.Button(panel, wx.ID_ANY, "Delete All Target Resist Profiles", wx.DefaultPosition, wx.DefaultSize, 0)
btnSizer.Add(self.btnDeleteTargetProfiles, 0, wx.ALL, 5)
self.btnDeleteTargetProfiles.Bind(wx.EVT_BUTTON, self.DeleteTargetProfiles)
self.btnPrices = wx.Button(panel, wx.ID_ANY, "Delete All Prices", wx.DefaultPosition, wx.DefaultSize, 0)
btnSizer.Add(self.btnPrices, 0, wx.ALL, 5)
@@ -110,10 +110,10 @@ class PFGeneralPref(PreferenceView):
if wxHelpers.YesNoDialog(question, "Confirm"):
clearDamagePatterns()
def DeleteTargetResists(self, event):
def DeleteTargetProfiles(self, event):
question = "This is a destructive action that will delete all target resist profiles.\nAre you sure you want to do this?"
if wxHelpers.YesNoDialog(question, "Confirm"):
clearTargetResists()
clearTargetProfiles()
def DeletePrices(self, event):
question = "This is a destructive action that will delete all cached prices out of the database.\nAre you sure you want to do this?"

View File

@@ -146,7 +146,7 @@ class FirepowerViewFull(StatsView):
def refreshPanel(self, fit):
# If we did anything intresting, we'd update our labels to reflect the new fit's stats here
if fit is not None and fit.targetResists is not None:
if fit is not None and fit.targetProfile is not None:
self.stEff.Show()
else:
self.stEff.Hide()

View File

@@ -63,6 +63,7 @@ class GraphColumn(ViewColumn, metaclass=ABCMeta):
return self._getFitTooltip()
return ''
class DpsColumn(GraphColumn):
name = 'Dps'

View File

@@ -57,7 +57,7 @@ from gui.marketBrowser import MarketBrowser
from gui.multiSwitch import MultiSwitch
from gui.patternEditor import DmgPatternEditorDlg
from gui.preferenceDialog import PreferenceDialog
from gui.resistsEditor import ResistsEditorDlg
from gui.targetProfileEditor import ResistsEditorDlg
from gui.setEditor import ImplantSetEditorDlg
from gui.shipBrowser import ShipBrowser
from gui.statsPane import StatsPane
@@ -397,7 +397,7 @@ class MainFrame(wx.Frame):
dlg = AttributeEditor(self)
dlg.Show()
def showTargetResistsEditor(self, event):
def showTargetProfileEditor(self, event):
ResistsEditorDlg(self)
def showDamagePatternEditor(self, event):
@@ -472,8 +472,8 @@ class MainFrame(wx.Frame):
self.Bind(wx.EVT_MENU, self.showCharacterEditor, id=menuBar.characterEditorId)
# Damage pattern editor
self.Bind(wx.EVT_MENU, self.showDamagePatternEditor, id=menuBar.damagePatternEditorId)
# Target Resists editor
self.Bind(wx.EVT_MENU, self.showTargetResistsEditor, id=menuBar.targetResistsEditorId)
# Target Profile editor
self.Bind(wx.EVT_MENU, self.showTargetProfileEditor, id=menuBar.targetProfileEditorId)
# Implant Set editor
self.Bind(wx.EVT_MENU, self.showImplantSetEditor, id=menuBar.implantSetEditorId)
# Import dialog

View File

@@ -38,7 +38,7 @@ class MainMenuBar(wx.MenuBar):
pyfalog.debug("Initialize MainMenuBar")
self.characterEditorId = wx.NewId()
self.damagePatternEditorId = wx.NewId()
self.targetResistsEditorId = wx.NewId()
self.targetProfileEditorId = wx.NewId()
self.implantSetEditorId = wx.NewId()
self.graphFrameId = wx.NewId()
self.backupFitsId = wx.NewId()
@@ -156,9 +156,9 @@ class MainMenuBar(wx.MenuBar):
damagePatternEditItem = wx.MenuItem(editorsMenu, self.damagePatternEditorId, "&Damage Pattern Editor")
damagePatternEditItem.SetBitmap(BitmapLoader.getBitmap("damagePattern_small", "gui"))
editorsMenu.Append(damagePatternEditItem)
targetResistsEditItem = wx.MenuItem(editorsMenu, self.targetResistsEditorId, "&Target Resists Editor")
targetResistsEditItem.SetBitmap(BitmapLoader.getBitmap("explosive_small", "gui"))
editorsMenu.Append(targetResistsEditItem)
targetProfileEditItem = wx.MenuItem(editorsMenu, self.targetProfileEditorId, "&Target Profile Editor")
targetProfileEditItem.SetBitmap(BitmapLoader.getBitmap("explosive_small", "gui"))
editorsMenu.Append(targetProfileEditItem)
# Help menu
helpMenu = wx.Menu()

View File

@@ -19,7 +19,7 @@
# noinspection PyPackageRequirements
import wx
from service.targetResists import TargetResists
from service.targetProfile import TargetProfile
from gui.bitmap_loader import BitmapLoader
from gui.utils.clipboard import toClipboard, fromClipboard
from gui.builtinViews.entityEditor import EntityEditor, BaseValidator
@@ -28,12 +28,12 @@ from logbook import Logger
pyfalog = Logger(__name__)
class TargetResistsTextValidor(BaseValidator):
class TargetProfileTextValidor(BaseValidator):
def __init__(self):
BaseValidator.__init__(self)
def Clone(self):
return TargetResistsTextValidor()
return TargetProfileTextValidor()
def Validate(self, win):
entityEditor = win.parent
@@ -42,9 +42,9 @@ class TargetResistsTextValidor(BaseValidator):
try:
if len(text) == 0:
raise ValueError("You must supply a name for your Target Resist Profile!")
raise ValueError("You must supply a name for your Target Profile!")
elif text in [x.name for x in entityEditor.choices]:
raise ValueError("Target Resist Profile name already in use, please choose another.")
raise ValueError("Target Profile name already in use, please choose another.")
return True
except ValueError as e:
@@ -54,32 +54,32 @@ class TargetResistsTextValidor(BaseValidator):
return False
class TargetResistsEntityEditor(EntityEditor):
class TargetProfileEntityEditor(EntityEditor):
def __init__(self, parent):
EntityEditor.__init__(self, parent, "Target Resist Profile")
self.SetEditorValidator(TargetResistsTextValidor)
EntityEditor.__init__(self, parent, "Target Profile")
self.SetEditorValidator(TargetProfileTextValidor)
def getEntitiesFromContext(self):
sTR = TargetResists.getInstance()
choices = sorted(sTR.getTargetResistsList(), key=lambda p: p.name)
sTR = TargetProfile.getInstance()
choices = sorted(sTR.getTargetProfileList(), key=lambda p: p.name)
return choices
def DoNew(self, name):
sTR = TargetResists.getInstance()
sTR = TargetProfile.getInstance()
return sTR.newPattern(name)
def DoRename(self, entity, name):
sTR = TargetResists.getInstance()
sTR = TargetProfile.getInstance()
sTR.renamePattern(entity, name)
def DoCopy(self, entity, name):
sTR = TargetResists.getInstance()
sTR = TargetProfile.getInstance()
copy = sTR.copyPattern(entity)
sTR.renamePattern(copy, name)
return copy
def DoDelete(self, entity):
sTR = TargetResists.getInstance()
sTR = TargetProfile.getInstance()
sTR.deletePattern(entity)
@@ -90,7 +90,7 @@ class ResistsEditorDlg(wx.Dialog):
wx.Dialog.__init__(
self, parent, id=wx.ID_ANY,
# Dropdown list widget is scaled to its longest content line on GTK, adapt to that
title="Target Resists Editor",
title="Target Profile Editor",
size=wx.Size(500, 240) if "wxGTK" in wx.PlatformInfo else wx.Size(350, 240))
self.block = False
@@ -98,7 +98,7 @@ class ResistsEditorDlg(wx.Dialog):
mainSizer = wx.BoxSizer(wx.VERTICAL)
self.entityEditor = TargetResistsEntityEditor(self)
self.entityEditor = TargetProfileEntityEditor(self)
mainSizer.Add(self.entityEditor, 0, wx.ALL | wx.EXPAND, 2)
self.sl = wx.StaticLine(self)
@@ -227,7 +227,7 @@ class ResistsEditorDlg(wx.Dialog):
if event is not None:
event.Skip()
TargetResists.getInstance().saveChanges(p)
TargetProfile.getInstance().saveChanges(p)
except ValueError:
editObj.SetForegroundColour(wx.RED)
@@ -271,7 +271,7 @@ class ResistsEditorDlg(wx.Dialog):
text = fromClipboard()
if text:
sTR = TargetResists.getInstance()
sTR = TargetProfile.getInstance()
try:
sTR.importPatterns(text)
self.stNotice.SetLabel("Patterns successfully imported from clipboard")
@@ -290,7 +290,7 @@ class ResistsEditorDlg(wx.Dialog):
def exportPatterns(self, event):
"""Event fired when export to clipboard button is clicked"""
sTR = TargetResists.getInstance()
sTR = TargetProfile.getInstance()
toClipboard(sTR.exportPatterns())
self.stNotice.SetLabel("Patterns exported to clipboard")

View File

@@ -69,7 +69,7 @@ class Fit:
def __init__(self):
pyfalog.debug("Initialize Fit class")
self.pattern = DamagePattern.getInstance().getDamagePattern("Uniform")
self.targetResists = None
self.targetProfile = None
self.character = saveddata_Character.getAll5()
self.booster = False
self._loadedFits = WeakSet()
@@ -170,7 +170,7 @@ class Fit:
fit = FitType(ship)
fit.name = name if name is not None else "New %s" % fit.ship.item.name
fit.damagePattern = self.pattern
fit.targetResists = self.targetResists
fit.targetProfile = self.targetProfile
fit.character = self.character
fit.booster = self.booster
useCharImplants = self.serviceFittingOptions["useCharacterImplantsByDefault"]
@@ -358,21 +358,21 @@ class Fit:
self.fill(fit)
@staticmethod
def getTargetResists(fitID):
pyfalog.debug("Get target resists for fit ID: {0}", fitID)
def getTargetProfile(fitID):
pyfalog.debug("Get target profile for fit ID: {0}", fitID)
if fitID is None:
return
fit = eos.db.getFit(fitID)
return fit.targetResists
return fit.targetProfile
def setTargetResists(self, fitID, pattern):
def setTargetProfile(self, fitID, pattern):
pyfalog.debug("Set target resist for fit ID: {0}", fitID)
if fitID is None:
return
fit = eos.db.getFit(fitID)
fit.targetResists = pattern
fit.targetProfile = pattern
eos.db.commit()
self.recalc(fit)

View File

@@ -156,7 +156,7 @@ class Port:
# Set some more fit attributes and save
fit.character = sFit.character
fit.damagePattern = sFit.pattern
fit.targetResists = sFit.targetResists
fit.targetProfile = sFit.targetProfile
if len(fit.implants) > 0:
fit.implantLocation = ImplantLocation.FIT
else:
@@ -194,7 +194,7 @@ class Port:
for fit in importData:
fit.character = sFit.character
fit.damagePattern = sFit.pattern
fit.targetResists = sFit.targetResists
fit.targetProfile = sFit.targetProfile
if len(fit.implants) > 0:
fit.implantLocation = ImplantLocation.FIT
else:

View File

@@ -20,34 +20,34 @@
import copy
from eos import db
from eos.saveddata.targetResists import TargetResists as es_TargetResists
from eos.saveddata.targetProfile import TargetProfile as es_TargetProfile
class ImportError(Exception):
pass
class TargetResists:
class TargetProfile:
instance = None
@classmethod
def getInstance(cls):
if cls.instance is None:
cls.instance = TargetResists()
cls.instance = TargetProfile()
return cls.instance
@staticmethod
def getTargetResistsList():
return db.getTargetResistsList()
def getTargetProfileList():
return db.getTargetProfileList()
@staticmethod
def getTargetResists(name):
return db.getTargetResists(name)
def getTargetProfile(name):
return db.getTargetProfile(name)
@staticmethod
def newPattern(name):
p = es_TargetResists(0.0, 0.0, 0.0, 0.0)
p = es_TargetProfile(0.0, 0.0, 0.0, 0.0)
p.name = name
db.save(p)
return p
@@ -72,7 +72,7 @@ class TargetResists:
db.save(p)
def importPatterns(self, text):
imports, num = es_TargetResists.importPatterns(text)
imports, num = es_TargetProfile.importPatterns(text)
lenImports = len(imports)
if lenImports == 0:
@@ -81,6 +81,6 @@ class TargetResists:
raise ImportError("%d patterns imported from clipboard; %d had errors" % (num, num - lenImports))
def exportPatterns(self):
patterns = self.getTargetResistsList()
patterns = self.getTargetProfileList()
patterns.sort(key=lambda p: p.name)
return es_TargetResists.exportPatterns(*patterns)
return es_TargetProfile.exportPatterns(*patterns)