| 28 | |
| 29 | |
| 30 | class FitShieldRegenGraph(FitGraph): |
| 31 | |
| 32 | def __init__(self, *args, **kwargs): |
| 33 | super().__init__(*args, **kwargs) |
| 34 | self.isEffective = gui.mainFrame.MainFrame.getInstance().statsPane.nameViewMap['resistancesViewFull'].showEffective |
| 35 | |
| 36 | # UI stuff |
| 37 | internalName = 'shieldRegenGraph' |
| 38 | name = _t('Shield Regeneration') |
| 39 | inputs = [ |
| 40 | Input(handle='time', unit='s', label=_t('Time'), iconID=1392, defaultValue=120, defaultRange=(0, 300), conditions=[ |
| 41 | (('time', 's'), None)]), |
| 42 | Input(handle='shieldAmount', unit='%', label=_t('Shield amount'), iconID=1384, defaultValue=25, defaultRange=(0, 100), conditions=[ |
| 43 | (('shieldAmount', 'EHP'), None), |
| 44 | (('shieldAmount', 'HP'), None), |
| 45 | (('shieldAmount', '%'), None)]), |
| 46 | Input(handle='shieldAmountT0', unit='%', label=_t('Starting shield amount'), iconID=1384, defaultValue=0, defaultRange=(0, 100), conditions=[ |
| 47 | (('time', 's'), None)])] |
| 48 | srcExtraCols = ('ShieldAmount', 'ShieldTime') |
| 49 | usesHpEffectivity = True |
| 50 | |
| 51 | @property |
| 52 | def xDefs(self): |
| 53 | return [ |
| 54 | XDef(handle='time', unit='s', label=_t('Time'), mainInput=('time', 's')), |
| 55 | XDef(handle='shieldAmount', unit='EHP' if self.isEffective else 'HP', label=_t('Shield amount'), mainInput=('shieldAmount', '%')), |
| 56 | XDef(handle='shieldAmount', unit='%', label=_t('Shield amount'), mainInput=('shieldAmount', '%'))] |
| 57 | |
| 58 | @property |
| 59 | def yDefs(self): |
| 60 | return [ |
| 61 | YDef(handle='shieldAmount', unit='EHP' if self.isEffective else 'HP', label=_t('Shield amount')), |
| 62 | YDef(handle='shieldRegen', unit='EHP/s' if self.isEffective else 'HP/s', label=_t('Shield regen'))] |
| 63 | |
| 64 | # Calculation stuff |
| 65 | _normalizers = { |
| 66 | ('shieldAmount', '%'): lambda v, src, tgt: v / 100 * src.item.ship.getModifiedItemAttr('shieldCapacity'), |
| 67 | ('shieldAmountT0', '%'): lambda v, src, tgt: None if v is None else v / 100 * src.item.ship.getModifiedItemAttr('shieldCapacity'), |
| 68 | # Needed only for "x mark" support, to convert EHP x into normalized value |
| 69 | ('shieldAmount', 'EHP'): lambda v, src, tgt: v / src.item.damagePattern.effectivify(src.item.ship, 1, 'shield')} |
| 70 | _limiters = { |
| 71 | 'shieldAmount': lambda src, tgt: (0, src.item.ship.getModifiedItemAttr('shieldCapacity')), |
| 72 | 'shieldAmountT0': lambda src, tgt: (0, src.item.ship.getModifiedItemAttr('shieldCapacity'))} |
| 73 | _getters = { |
| 74 | ('time', 'shieldAmount'): Time2ShieldAmountGetter, |
| 75 | ('time', 'shieldRegen'): Time2ShieldRegenGetter, |
| 76 | ('shieldAmount', 'shieldAmount'): ShieldAmount2ShieldAmountGetter, |
| 77 | ('shieldAmount', 'shieldRegen'): ShieldAmount2ShieldRegenGetter} |
| 78 | _denormalizers = { |
| 79 | ('shieldAmount', '%'): lambda v, src, tgt: v * 100 / src.item.ship.getModifiedItemAttr('shieldCapacity'), |
| 80 | ('shieldAmount', 'EHP'): lambda v, src, tgt: src.item.damagePattern.effectivify(src.item.ship, v, 'shield'), |
| 81 | ('shieldRegen', 'EHP/s'): lambda v, src, tgt: src.item.damagePattern.effectivify(src.item.ship, v, 'shield')} |
nothing calls this directly
no test coverage detected