from Hangar.mech import Mech from MechFabrik.bauteile import InnerStructure, Area, AreaNames, OuterAmor, ZoneNames from MechFabrik.bauteile.items import Activator, Cockpit, Gyroskope, Joint, Reaktor, Sensors, Sustainment from MechFabrik.reader import ComponentReader class MechFabrik(object): def __init__(self, name: str, tonnage: float, movement_rate: int): self.__components = ComponentReader() self.__tonnage = tonnage self.__reactor_value = int(movement_rate * tonnage) self.__areas = { AreaNames.HEAD: Area(), AreaNames.MIDDLE_TORSO: Area(), AreaNames.LEFT_TORSO: Area(), AreaNames.RIGHT_TORSO: Area(), AreaNames.LEFT_ARM: Area(), AreaNames.RIGHT_ARM: Area(), AreaNames.LEFT_LEG: Area(), AreaNames.RIGHT_LEG: Area(), } self.__zones = { ZoneNames.HEAD: OuterAmor(self.__areas[AreaNames.HEAD]), ZoneNames.MIDDLE_TORSO_FRONT: OuterAmor(self.__areas[AreaNames.MIDDLE_TORSO]), ZoneNames.MIDDLE_TORSO_REAR: OuterAmor(self.__areas[AreaNames.MIDDLE_TORSO]), ZoneNames.LEFT_TORSO_FRONT: OuterAmor(self.__areas[AreaNames.LEFT_TORSO]), ZoneNames.LEFT_TORSO_REAR: OuterAmor(self.__areas[AreaNames.LEFT_TORSO]), ZoneNames.RIGHT_TORSO_FRONT: OuterAmor(self.__areas[AreaNames.RIGHT_TORSO]), ZoneNames.RIGHT_TORSO_REAR: OuterAmor(self.__areas[AreaNames.RIGHT_TORSO]), ZoneNames.LEFT_ARM: OuterAmor(self.__areas[AreaNames.LEFT_ARM]), ZoneNames.RIGHT_ARM: OuterAmor(self.__areas[AreaNames.RIGHT_ARM]), ZoneNames.LEFT_LEG: OuterAmor(self.__areas[AreaNames.LEFT_LEG]), ZoneNames.RIGHT_LEG: OuterAmor(self.__areas[AreaNames.RIGHT_LEG]), } self.__build_inner_structure(tonnage, movement_rate) self._mech = Mech(name, tonnage, movement_rate, self._inner_structure) def __build_inner_structure(self, tonnage: float, movement_rate: int) -> None: reactor_value = int(movement_rate * tonnage) gyroscope = Gyroskope(float(round(reactor_value / 100))) self._inner_structure = InnerStructure(self.__components.inner_structure_from(tonnage), gyroscope) self.__build_head_area() self.__build_middle_torso_area(gyroscope) def __build_head_area(self) -> None: cockpit = Cockpit() self.__areas[AreaNames.HEAD].cockpit = cockpit self.__areas[AreaNames.HEAD].items = { (1, 1): Sustainment(), (1, 2): Sensors(), (1, 3): cockpit, (1, 4): None, (1, 5): Sensors(), (1, 6): Sustainment(), } self.__areas[AreaNames.HEAD].armor = 3 self.__areas[AreaNames.HEAD].parent = self.__areas[AreaNames.MIDDLE_TORSO] def __build_middle_torso_area(self, gyroscope: Gyroskope) -> None: self.__areas[AreaNames.LEFT_TORSO].parent = self.__areas[AreaNames.MIDDLE_TORSO] self.__areas[AreaNames.RIGHT_TORSO].parent = self.__areas[AreaNames.MIDDLE_TORSO] reactor = Reaktor(self.__reactor_value, self.__components.reactor_tonnage_from(self.__reactor_value)) self.__areas[AreaNames.MIDDLE_TORSO].reactor = reactor self.__areas[AreaNames.MIDDLE_TORSO].children = [ self.__areas[AreaNames.RIGHT_TORSO], self.__areas[AreaNames.LEFT_TORSO] ] self.__areas[AreaNames.MIDDLE_TORSO].items = { (1, 1): reactor, (1, 2): reactor, (1, 3): reactor, (1, 4): gyroscope, (1, 5): gyroscope, (1, 6): gyroscope, (2, 1): gyroscope, (2, 2): reactor, (2, 3): reactor, (2, 4): reactor, (2, 5): None, (2, 6): None, } self.__areas[AreaNames.MIDDLE_TORSO].armor = self.__components.inner_amor_for_tonnage_and_area( self.__tonnage, AreaNames.MIDDLE_TORSO ) self.__areas[AreaNames.LEFT_TORSO].armor = self.__components.inner_amor_for_tonnage_and_area( self.__tonnage, AreaNames.LEFT_TORSO) self.__areas[AreaNames.RIGHT_TORSO].armor = self.__components.inner_amor_for_tonnage_and_area( self.__tonnage, AreaNames.RIGHT_TORSO ) self.__build_arm(self.__areas[AreaNames.RIGHT_TORSO], AreaNames.RIGHT_ARM) self.__build_leg(self.__areas[AreaNames.RIGHT_TORSO], AreaNames.RIGHT_LEG) self.__build_arm(self.__areas[AreaNames.LEFT_TORSO], AreaNames.LEFT_ARM) self.__build_leg(self.__areas[AreaNames.LEFT_TORSO], AreaNames.LEFT_LEG) def __build_arm(self, parent: Area, index: AreaNames): self.__areas[index].parent = parent self.__areas[index].items = { (1, 1): Joint(), (1, 2): Activator(), (1, 3): Activator(), (1, 4): Activator(), (1, 5): None, (1, 6): None, (2, 1): None, (2, 2): None, (2, 3): None, (2, 4): None, (2, 5): None, (2, 6): None, } self.__areas[index].armor = self.__components.inner_amor_for_tonnage_and_area(self.__tonnage, index) parent.children.append(self.__areas[index]) def __build_leg(self, parent: Area, index: AreaNames): self.__areas[index].parent = parent self.__areas[index].items = { (1, 1): Joint(), (1, 2): Activator(), (1, 3): Activator(), (1, 4): Activator(), (1, 5): None, (1, 6): None, } self.__areas[index].armor = self.__components.inner_amor_for_tonnage_and_area(self.__tonnage, index) parent.children.append(self.__areas[index]) def auslieferung(self) -> Mech: for (index, area) in self.__areas.items(): self._inner_structure.add_area(index, area) for (index, outer_amor) in self.__zones.items(): self._inner_structure.add_zone(index, outer_amor) return self._mech def set_head_armor(self, armor: int) -> None: self.__set_outer_armor(armor, ZoneNames.HEAD, AreaNames.HEAD) def set_middle_torso_armor(self, armor_front: int, amor_rear: int) -> None: self.__set_outer_armor(armor_front, ZoneNames.MIDDLE_TORSO_FRONT, AreaNames.MIDDLE_TORSO) self.__set_outer_armor(amor_rear, ZoneNames.MIDDLE_TORSO_REAR, AreaNames.MIDDLE_TORSO) def set_side_torso_armor(self, armor_front: int, amor_rear: int) -> None: self.__set_outer_armor(armor_front, ZoneNames.LEFT_TORSO_FRONT, AreaNames.LEFT_TORSO) self.__set_outer_armor(amor_rear, ZoneNames.LEFT_TORSO_REAR, AreaNames.LEFT_TORSO) self.__set_outer_armor(armor_front, ZoneNames.RIGHT_TORSO_FRONT, AreaNames.RIGHT_TORSO) self.__set_outer_armor(amor_rear, ZoneNames.RIGHT_TORSO_REAR, AreaNames.RIGHT_TORSO) def set_arm_armor(self, armor: int) -> None: self.__set_outer_armor(armor, ZoneNames.LEFT_ARM, AreaNames.LEFT_ARM) self.__set_outer_armor(armor, ZoneNames.RIGHT_ARM, AreaNames.RIGHT_ARM) def set_leg_armor(self, armor: int) -> None: self.__set_outer_armor(armor, ZoneNames.LEFT_LEG, AreaNames.LEFT_LEG) self.__set_outer_armor(armor, ZoneNames.RIGHT_LEG, AreaNames.RIGHT_LEG) def __set_outer_armor(self, armor: int, zone_name: ZoneNames, parent_name: AreaNames) -> None: self.__zones[zone_name].armor = armor self.__zones[zone_name].parent = self.__areas[parent_name] self.__areas[parent_name].outer_amor.append(self.__zones[zone_name])