| 27 | |
| 28 | |
| 29 | class FitMobilityGraph(FitGraph): |
| 30 | # UI stuff |
| 31 | internalName = 'mobilityGraph' |
| 32 | name = _t('Mobility') |
| 33 | xDefs = [XDef(handle='time', unit='s', label=_t('Time'), mainInput=('time', 's'))] |
| 34 | yDefs = [ |
| 35 | YDef(handle='speed', unit='m/s', label=_t('Speed')), |
| 36 | YDef(handle='distance', unit='km', label=_t('Distance')), |
| 37 | YDef(handle='momentum', unit='Gkg⋅m/s', label=_t('Momentum')), |
| 38 | YDef(handle='bumpSpeed', unit='m/s', label=_t('Target speed'), selectorLabel=_t('Bump speed')), |
| 39 | YDef(handle='bumpDistance', unit='km', label=_t('Target distance traveled'), selectorLabel=_t('Bump distance'))] |
| 40 | inputs = [ |
| 41 | Input(handle='time', unit='s', label=_t('Time'), iconID=1392, defaultValue=10, defaultRange=(0, 30)), |
| 42 | # Default values in target fields correspond to a random carrier/fax |
| 43 | Input(handle='tgtMass', unit='Mkg', label=_t('Target mass'), iconID=76, defaultValue=1300, defaultRange=(100, 2500), |
| 44 | conditions=[(None, ('bumpSpeed', 'm/s')), (None, ('bumpDistance', 'km'))], secondaryTooltip=_t('Defined in millions of kilograms')), |
| 45 | Input(handle='tgtInertia', unit=None, label=_t('Target inertia factor'), iconID=1401, defaultValue=0.015, defaultRange=(0.03, 0.1), |
| 46 | conditions=[(None, ('bumpDistance', 'km'))], secondaryTooltip=_t('Inertia Modifier attribute value of the target ship'))] |
| 47 | srcExtraCols = ('Speed', 'Agility') |
| 48 | |
| 49 | # Calculation stuff |
| 50 | _normalizers = {('tgtMass', 'Mkg'): lambda v, src, tgt: None if v is None else v * 10 ** 6} |
| 51 | _getters = { |
| 52 | ('time', 'speed'): Time2SpeedGetter, |
| 53 | ('time', 'distance'): Time2DistanceGetter, |
| 54 | ('time', 'momentum'): Time2MomentumGetter, |
| 55 | ('time', 'bumpSpeed'): Time2BumpSpeedGetter, |
| 56 | ('time', 'bumpDistance'): Time2BumpDistanceGetter} |
| 57 | _denormalizers = { |
| 58 | ('distance', 'km'): lambda v, src, tgt: v / 1000, |
| 59 | ('momentum', 'Gkg⋅m/s'): lambda v, src, tgt: v / 10 ** 9, |
| 60 | ('bumpDistance', 'km'): lambda v, src, tgt: v / 1000} |