47 lines
2.0 KiB
Python
Executable File
47 lines
2.0 KiB
Python
Executable File
import csv
|
|
import os.path
|
|
|
|
|
|
# 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(self, tonnage: float) -> dict[str, int]:
|
|
return {
|
|
'head': 3,
|
|
'middle_torso': int(self._inner_structure_data.get(tonnage, {}).get('TorsoMitte', 0)),
|
|
'side_torso': int(self._inner_structure_data.get(tonnage, {}).get('TorsoSeite', 0)),
|
|
'arm': int(self._inner_structure_data.get(tonnage, {}).get('Arm', 0)),
|
|
'leg': int(self._inner_structure_data.get(tonnage, {}).get('Bein', 0)),
|
|
}
|