import csv import os.path from MechFabrik import AreaNames # noinspection SpellCheckingInspection class CsvDialect (csv.Dialect): lineterminator='\r\n' delimiter = ',' quotechar = '"' quoting=csv.QUOTE_NONNUMERIC class ComponentReader: def __init__(self): my_dirname = str(os.path.dirname(__file__)) self._inner_structure_data = {} self._reactor_data = {} self._weapon_data = {} with open(os.path.join(my_dirname, 'tabellen', 'bauteile.csv')) as csvfile: component_reader = csv.DictReader(csvfile, dialect=CsvDialect) for row in component_reader: self._inner_structure_data[float(row['GTonnage'])] = row with open(os.path.join(my_dirname, 'tabellen', 'reaktoren.csv')) as csvfile: component_reader = csv.DictReader(csvfile, dialect=CsvDialect) for row in component_reader: self._reactor_data[float(row['RW'])] = row with open(os.path.join(my_dirname, 'tabellen', 'waffen.csv')) as csvfile: component_reader = csv.DictReader(csvfile, dialect=CsvDialect) for row in component_reader: self._weapon_data[row['Waffentyp']] = row def inner_structure_from(self, tonnage: float) -> float: return float(self._inner_structure_data.get(tonnage, {}).get('Tonnage IS', 0.0)) def reactor_tonnage_from(self, reactor_value: int) -> float: return float(self._reactor_data.get(reactor_value, {}).get('Tonnage', 0.0)) def inner_amor_for_tonnage_and_area(self, tonnage: float, area: AreaNames) -> int: match area: case AreaNames.HEAD: return 3 case AreaNames.MIDDLE_TORSO: return int(self._inner_structure_data.get(tonnage, {}).get('TorsoMitte', 0)) case AreaNames.RIGHT_TORSO | AreaNames.LEFT_TORSO: return int(self._inner_structure_data.get(tonnage, {}).get('TorsoSeite', 0)) case AreaNames.RIGHT_ARM | AreaNames.LEFT_ARM: return int(self._inner_structure_data.get(tonnage, {}).get('Arm', 0)) case AreaNames.RIGHT_LEG | AreaNames.LEFT_LEG: return int(self._inner_structure_data.get(tonnage, {}).get('Bein', 0))