Files
BattleTech/MechFabrik/bauteile/__init__.py
T

142 lines
3.2 KiB
Python
Executable File

import enum
from MechFabrik.bauteile.items import Item
class ZoneNames(enum.Enum):
HEAD = 'Kopf'
MIDDLE_TORSO_FRONT = 'Torso Mitte Vorn'
MIDDLE_TORSO_REAR = 'Torso Mitte Rücken'
RIGHT_TORSO_FRONT = 'Rechter Torso Vorn'
RIGHT_TORSO_REAR = 'Rechter Torso Rücken'
LEFT_TORSO_FRONT = 'Linker Torso Vorn'
LEFT_TORSO_REAR = 'Linker Torso Rücken'
RIGHT_LEG = 'Rechtes Bein'
RIGHT_ARM = 'Rechter Arm'
LEFT_LEG = 'Linkes Bein'
LEFT_ARM = 'Linker Arm'
class AreaNames(enum.Enum):
HEAD = 'Kopf'
MIDDLE_TORSO = 'Torso Mitte'
RIGHT_TORSO = 'Rechter Torso'
LEFT_TORSO = 'Linker Torso'
RIGHT_LEG = 'Rechtes Bein'
RIGHT_ARM = 'Rechter Arm'
LEFT_LEG = 'Linkes Bein'
LEFT_ARM = 'Linker Arm'
class AreaStatus(enum.Flag):
FINE = 0
DAMAGED = 1
DESTROYED = 2
class Zone:
def __init__(self):
self.__dict__['_armor'] = 0
self.__dict__['_parent'] = None
self.__dict__['_state'] = AreaStatus.FINE
def __setattr__(self, key, value):
self.__dict__['_' + key] = value
def __getattr__(self, item):
return self.__dict__['_' + item]
class Area(Zone):
def __init__(self):
super().__init__()
self.__dict__['_outer_amor'] = list()
self.__dict__['_children'] = list()
self.__dict__['_items'] = dict()
class OuterAmor(Zone):
def __init__(self, area: Area):
super().__init__()
self.__dict__['_parent'] = area
self.__dict__['_area'] = area
class StrikeEvent:
def __init__(self, zone: Zone, hits: int):
self._zone = zone
self._hits = hits
@property
def zone(self) -> Zone:
return self._zone
@property
def hits(self) -> int:
return self._hits
@hits.setter
def hits(self, hits: int):
self._hits = hits
def process_event(self) -> StrikeEvent:
while self.hits > 0:
if self.hits >= self.zone.armor:
self.hits -= self.zone.armor
self.zone.armor = 0
self.zone.state = AreaStatus.DESTROYED
if self.hits > 0:
self._zone = self.zone.parent
else:
self.zone.armor -= self.hits
self.zone.state = AreaStatus.DAMAGED
self.hits = 0
break
return self
class Gyroskope:
def __init__(self, tonnage: float):
self._tonnage = tonnage
@property
def tonnage(self) -> float:
return self._tonnage
class InnerStructure:
def __init__(self, tonnage: float, gyroskope: Gyroskope):
self._gyroskope = gyroskope
self._tonnage = tonnage
self._areas = dict()
self._zones = dict()
@property
def tonnage(self) -> float:
return self._tonnage
@property
def gyroskope(self) -> Gyroskope:
return self._gyroskope
@property
def areas(self) -> dict[AreaNames, Area]:
return self._areas
def add_area(self, index: AreaNames, area: Area):
self._areas[index] = area
@property
def zones(self) -> dict[ZoneNames, Zone]:
return self._zones
def add_zone(self, index: ZoneNames, zone: Zone):
self._zones[index] = zone
class CriticalStrikeEvent:
pass