def missileSorter(charge): # Get charge damage type and total damage chargeDamageType, totalDamage = getChargeDamageInfo(charge) # Find its position in sort list try: position = DmgTypes.names().index(chargeDamageType) # Put charges which have non-standard damage type after charges with # standard damage type except ValueError: position = math.inf return position, totalDamage, charge.name
def turretSorter(charge): damage = 0 range_ = (mod.item.getAttribute('maxRange')) * \ (charge.getAttribute('weaponRangeMultiplier') or 1) falloff = (mod.item.getAttribute('falloff') or 0) * \ (charge.getAttribute('fallofMultiplier') or 1) for type_ in DmgTypes.names(): d = charge.getAttribute('%sDamage' % type_) if d > 0: damage += d # Take optimal and falloff as range factor rangeFactor = range_ + falloff return -rangeFactor, charge.typeName.rsplit( )[-2:], damage, charge.name
def getChargeDamageInfo(charge): # Set up data storage for missile damage stuff damageMap = {} totalDamage = 0 # Fill them with the data about charge for damageType in DmgTypes.names(): currentDamage = charge.getAttribute( '{}Damage'.format(damageType)) or 0 damageMap[damageType] = currentDamage totalDamage += currentDamage # Detect type of ammo chargeDamageType = None for damageType in damageMap: # If all damage belongs to certain type purely, set appropriate # ammoType if damageMap[damageType] == totalDamage: chargeDamageType = damageType break # Else consider ammo as mixed damage if chargeDamageType is None: chargeDamageType = 'mixed' return chargeDamageType, totalDamage
def generalOutput(): rowNames = ["EHP"] rowNames.extend(RRTypes.names(postProcessor=lambda v: v.capitalize())) colNames = DmgTypes.names(short=True, postProcessor=lambda v: " " + v.capitalize()) colNames[0] = colNames[0][1::] outputScheme = [] for index, rowName in enumerate(rowNames): row = rowName + ": {:>} (" subsValue = " {:.0%}," if index > 0 else " {:>}," row += ''.join([(colName + ":" + subsValue) for colName in colNames]) row = row[:-1:] + ")\n" outputScheme.append(row) return \ outputScheme[0].format(ehpStr[3], *ehpAgainstDamageTypeStr) + \ outputScheme[1].format(ehpStr[0], *resists["shield"]) + \ outputScheme[2].format(ehpStr[1], *resists["armor"]) + \ outputScheme[3].format(ehpStr[2], *resists["hull"])
from functools import reduce from eos.saveddata.damagePattern import DamagePattern from eos.utils.stats import RRTypes, DmgTypes from gui.utils.numberFormatter import formatAmount tankTypes = RRTypes.names() damageTypes = DmgTypes.names() damagePatterns = [ DamagePattern.oneType(damageType) for damageType in damageTypes ] damageTypeResonanceNames = [ damageType.capitalize() + "DamageResonance" for damageType in damageTypes ] resonanceNames = { tankTypes[0]: [tankTypes[0] + s for s in damageTypeResonanceNames], tankTypes[1]: [tankTypes[1] + s for s in damageTypeResonanceNames], tankTypes[2]: [s[0].lower() + s[1:] for s in damageTypeResonanceNames] } def firepowerSection(fit): """ Returns the text of the firepower section""" totalDps = fit.getTotalDps().total weaponDps = fit.getWeaponDps().total droneDps = fit.getDroneDps().total totalVolley = fit.getTotalVolley().total firepower = [totalDps, weaponDps, droneDps, totalVolley] firepowerStr = [formatAmount(dps, 3, 0, 0) for dps in firepower] # showWeaponAndDroneDps = (weaponDps > 0) and (droneDps > 0) if sum(firepower) == 0:
def test_dmgtypes_names_lambda(): assert DmgTypes.names(False, lambda v: v.capitalize()) == [ 'Em', 'Thermal', 'Kinetic', 'Explosive' ] assert DmgTypes.names(True, lambda v: v.upper()) == ['EM', 'TH', 'KIN', 'EXP']
def test_dmgtypes_names(): assert DmgTypes.names() == ['em', 'thermal', 'kinetic', 'explosive'] assert DmgTypes.names(True) == ['em', 'th', 'kin', 'exp'] assert DmgTypes.names(short=True) == ['em', 'th', 'kin', 'exp']