From ca4bac07daf254fc564fde4c299215fb5cb69011 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Sat, 7 Dec 2019 01:17:41 +0300 Subject: [PATCH] Implement switching between user and builtin patterns --- eos/db/saveddata/fit.py | 6 ++++-- eos/saveddata/damagePattern.py | 8 +++++++- eos/saveddata/fit.py | 36 +++++++++++++++++++++++++++++----- eos/saveddata/targetProfile.py | 8 +++++++- service/damagePattern.py | 2 +- service/targetProfile.py | 2 +- 6 files changed, 51 insertions(+), 11 deletions(-) diff --git a/eos/db/saveddata/fit.py b/eos/db/saveddata/fit.py index c10b297da..a304ea006 100644 --- a/eos/db/saveddata/fit.py +++ b/eos/db/saveddata/fit.py @@ -235,8 +235,10 @@ mapper(es_Fit, fits_table, "_Fit__character": relation( Character, backref="fits"), - "_Fit__damagePattern": relation(DamagePattern), - "_Fit__targetProfile": relation(TargetProfile), + "_Fit__userDamagePattern": relation(DamagePattern), + "_Fit__builtinDamagePatternID": fits_table.c.builtinDamagePatternID, + "_Fit__userTargetProfile": relation(TargetProfile), + "_Fit__builtinTargetProfileID": fits_table.c.builtinTargetResistsID, "projectedOnto": projectedFitSourceRel, "victimOf": relationship( ProjectedFit, diff --git a/eos/saveddata/damagePattern.py b/eos/saveddata/damagePattern.py index d113948f8..53aaa62e0 100644 --- a/eos/saveddata/damagePattern.py +++ b/eos/saveddata/damagePattern.py @@ -133,11 +133,17 @@ class DamagePattern: self.explosiveAmount = explosiveAmount @classmethod - def getBuiltins(cls): + def getBuiltinList(cls): if cls._builtins is None: cls.__generateBuiltins() return list(cls._builtins.values()) + @classmethod + def getBuiltinById(cls, id): + if cls._builtins is None: + cls.__generateBuiltins() + return cls._builtins.get(id) + @classmethod def __generateBuiltins(cls): cls._builtins = OrderedDict() diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index 66b43541f..502275dd9 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -28,15 +28,17 @@ from sqlalchemy.orm import reconstructor, validates import eos.db from eos import capSim -from eos.calc import calculateMultiplier, calculateLockTime +from eos.calc import calculateLockTime, calculateMultiplier from eos.const import CalcType, FitSystemSecurity, FittingHardpoint, FittingModuleState, FittingSlot, ImplantLocation from eos.effectHandlerHelpers import ( HandledBoosterList, HandledDroneCargoList, HandledImplantList, HandledModuleList, HandledProjectedDroneList, HandledProjectedModList) from eos.saveddata.character import Character from eos.saveddata.citadel import Citadel +from eos.saveddata.damagePattern import DamagePattern from eos.saveddata.module import Module from eos.saveddata.ship import Ship +from eos.saveddata.targetProfile import TargetProfile from eos.utils.stats import DmgTypes, RRTypes @@ -166,11 +168,23 @@ class Fit: @property def targetProfile(self): - return self.__targetProfile + if self.__userTargetProfile is not None: + return self.__userTargetProfile + if self.__builtinTargetProfileID is not None: + return TargetProfile.getBuiltinById(self.__builtinTargetProfileID) + return None @targetProfile.setter def targetProfile(self, targetProfile): - self.__targetProfile = targetProfile + if targetProfile is None: + self.__userTargetProfile = None + self.__builtinTargetProfileID = None + if targetProfile.builtin: + self.__userTargetProfile = None + self.__builtinTargetProfileID = targetProfile.ID + else: + self.__userTargetProfile = targetProfile + self.__builtinTargetProfileID = None self.__weaponDpsMap = {} self.__weaponVolleyMap = {} self.__droneDps = None @@ -178,11 +192,23 @@ class Fit: @property def damagePattern(self): - return self.__damagePattern + if self.__userDamagePattern is not None: + return self.__userDamagePattern + if self.__builtinDamagePatternID is not None: + return DamagePattern.getBuiltinById(self.__builtinDamagePatternID) + return None @damagePattern.setter def damagePattern(self, damagePattern): - self.__damagePattern = damagePattern + if damagePattern is None: + self.__userDamagePattern = None + self.__builtinDamagePatternID = None + if damagePattern.builtin: + self.__userDamagePattern = None + self.__builtinDamagePatternID = damagePattern.ID + else: + self.__userDamagePattern = damagePattern + self.__builtinDamagePatternID = None self.__ehp = None self.__effectiveTank = None diff --git a/eos/saveddata/targetProfile.py b/eos/saveddata/targetProfile.py index 62cb2b546..1f163f15d 100644 --- a/eos/saveddata/targetProfile.py +++ b/eos/saveddata/targetProfile.py @@ -105,11 +105,17 @@ class TargetProfile: self._radius = radius @classmethod - def getBuiltins(cls): + def getBuiltinList(cls): if cls._builtins is None: cls.__generateBuiltins() return list(cls._builtins.values()) + @classmethod + def getBuiltinById(cls, id): + if cls._builtins is None: + cls.__generateBuiltins() + return cls._builtins.get(id) + @classmethod def __generateBuiltins(cls): cls._builtins = OrderedDict() diff --git a/service/damagePattern.py b/service/damagePattern.py index 76aff9ce1..b2139959c 100644 --- a/service/damagePattern.py +++ b/service/damagePattern.py @@ -44,7 +44,7 @@ class DamagePattern: @staticmethod def getBuiltinDamagePatternList(): - return es_DamagePattern.getBuiltins() + return es_DamagePattern.getBuiltinList() @staticmethod def getDamagePattern(name): diff --git a/service/targetProfile.py b/service/targetProfile.py index d1f506913..ea624c5df 100644 --- a/service/targetProfile.py +++ b/service/targetProfile.py @@ -43,7 +43,7 @@ class TargetProfile: @staticmethod def getBuiltinTargetProfileList(): - return es_TargetProfile.getBuiltins() + return es_TargetProfile.getBuiltinList() @staticmethod def newPattern(name):