Files
BattleTech/mech_factory/__init__.py
T

157 lines
9.1 KiB
Python
Executable File

from hangar.mech import Mech
from mech_factory.component_storage import InnerStructure, Area, AreaNames, OuterAmor, ZoneNames
from mech_factory.component_storage.items import Activator, Cockpit, Gyroskope, Item, Joint, Reaktor, Sensors, \
Sustainment
from mech_factory.store import ItemStore, ComponentStore, InnerAmorStore
from mech_factory.watcher import Watcher
class MechFabrik(object):
def __init__(self, name: str, tonnage: float, movement_rate: int):
self.__tonnage = tonnage
self.__reactor_value = int(movement_rate * tonnage)
self._watcher = Watcher(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._item_store = ItemStore()
self._component_store = ComponentStore(tonnage, movement_rate)
self._inner_amor_store = InnerAmorStore(tonnage)
self._inner_structure = self._component_store.get_inner_structure()
for (index, area) in self.__areas.items():
self._inner_structure.add_area(index, area)
self._watcher.add_item(self._inner_structure)
self.__build_head_area()
self.__build_middle_torso_area(self._inner_structure.gyroskope)
self._mech = Mech(name, tonnage, movement_rate, self._inner_structure)
@property
def watcher(self):
return self._watcher
def __build_head_area(self) -> None:
cockpit = self._item_store.get_cockpit()
self.__areas[AreaNames.HEAD].cockpit = cockpit
self.__add_item_to_areas(AreaNames.HEAD, (1, 1), self._item_store.get_sustainment(), )
self.__add_item_to_areas(AreaNames.HEAD, (1, 2), self._item_store.get_sensors(), )
self.__add_item_to_areas(AreaNames.HEAD, (1, 3), cockpit, )
self.__add_item_to_areas(AreaNames.HEAD, (1, 4), None, )
self.__add_item_to_areas(AreaNames.HEAD, (1, 5), self._item_store.get_sensors(), )
self.__add_item_to_areas(AreaNames.HEAD, (1, 6), self._item_store.get_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 = self._component_store.get_reaktor()
self.__areas[AreaNames.MIDDLE_TORSO].reactor = reactor
self.__areas[AreaNames.MIDDLE_TORSO].children = [
self.__areas[AreaNames.RIGHT_TORSO],
self.__areas[AreaNames.LEFT_TORSO]
]
self.__add_item_to_areas(AreaNames.MIDDLE_TORSO, (1, 1), reactor, )
self.__add_item_to_areas(AreaNames.MIDDLE_TORSO, (1, 2), reactor, )
self.__add_item_to_areas(AreaNames.MIDDLE_TORSO, (1, 3), reactor, )
self.__add_item_to_areas(AreaNames.MIDDLE_TORSO, (1, 4), gyroscope, )
self.__add_item_to_areas(AreaNames.MIDDLE_TORSO, (1, 5), gyroscope, )
self.__add_item_to_areas(AreaNames.MIDDLE_TORSO, (1, 6), gyroscope, )
self.__add_item_to_areas(AreaNames.MIDDLE_TORSO, (2, 1), gyroscope, )
self.__add_item_to_areas(AreaNames.MIDDLE_TORSO, (2, 2), reactor, )
self.__add_item_to_areas(AreaNames.MIDDLE_TORSO, (2, 3), reactor, )
self.__add_item_to_areas(AreaNames.MIDDLE_TORSO, (2, 4), reactor, )
self.__add_item_to_areas(AreaNames.MIDDLE_TORSO, (2, 5), None, )
self.__add_item_to_areas(AreaNames.MIDDLE_TORSO, (2, 6), None)
self.__areas[AreaNames.MIDDLE_TORSO].armor = self._inner_amor_store.get_middle_torso_amor()
self.__areas[AreaNames.LEFT_TORSO].armor = self._inner_amor_store.get_side_torso_amor()
self.__areas[AreaNames.RIGHT_TORSO].armor = self._inner_amor_store.get_side_torso_amor()
self.__build_arm_leg(self.__areas[AreaNames.RIGHT_TORSO], AreaNames.RIGHT_ARM, True)
self.__build_arm_leg(self.__areas[AreaNames.RIGHT_TORSO], AreaNames.RIGHT_LEG, False)
self.__build_arm_leg(self.__areas[AreaNames.LEFT_TORSO], AreaNames.LEFT_ARM, True)
self.__build_arm_leg(self.__areas[AreaNames.LEFT_TORSO], AreaNames.LEFT_LEG, False)
def __build_arm_leg(self, parent: Area, index: AreaNames, is_arm: bool) -> None:
self.__areas[index].parent = parent
self.__add_item_to_areas(index, (1, 1), self._item_store.get_joint(), )
self.__add_item_to_areas(index, (1, 2), self._item_store.get_activator(), )
self.__add_item_to_areas(index, (1, 3), self._item_store.get_activator(), )
self.__add_item_to_areas(index, (1, 4), self._item_store.get_activator(), )
self.__add_item_to_areas(index, (1, 5), None, )
self.__add_item_to_areas(index, (1, 6), None, )
if is_arm:
self.__add_item_to_areas(index, (2, 1), None, )
self.__add_item_to_areas(index, (2, 2), None, )
self.__add_item_to_areas(index, (2, 3), None, )
self.__add_item_to_areas(index, (2, 4), None, )
self.__add_item_to_areas(index, (2, 5), None, )
self.__add_item_to_areas(index, (2, 6), None, )
self.__areas[index].armor = self._inner_amor_store.get_arm_amore()
else:
self.__areas[index].armor = self._inner_amor_store.get_leg_amore()
parent.children.append(self.__areas[index])
def auslieferung(self) -> Mech:
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._watcher.add_armor(AreaNames.HEAD, armor)
self.__set_outer_armor(armor, ZoneNames.HEAD, AreaNames.HEAD)
def set_middle_torso_armor(self, armor_front: int, amor_rear: int) -> None:
self._watcher.add_armor(AreaNames.MIDDLE_TORSO, armor_front + amor_rear)
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._watcher.add_armor(AreaNames.LEFT_TORSO, armor_front + amor_rear)
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._watcher.add_armor(AreaNames.RIGHT_TORSO, armor_front + amor_rear)
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._watcher.add_armor(AreaNames.LEFT_ARM, armor)
self._watcher.add_armor(AreaNames.RIGHT_ARM, armor)
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._watcher.add_armor(AreaNames.LEFT_LEG, armor)
self._watcher.add_armor(AreaNames.RIGHT_LEG, armor)
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])
def __add_item_to_areas(self, area_name: AreaNames, index: tuple, item: Item | None) -> None:
self.__areas[area_name].items[index] = item
# noinspection PyTypeChecker
self._watcher.add_item(item)