diff --git a/events/__init__.py b/events/__init__.py new file mode 100644 index 0000000..c6d7081 --- /dev/null +++ b/events/__init__.py @@ -0,0 +1,60 @@ +from mech_factory.components import Area, AreaStatus, ItemStatus, OuterAmor, Zone + + +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 CriticalStrikeEvent: + def __init__(self, zone: OuterAmor, index: tuple[int, int]): + self.__dict__['_zone'] = zone + self.__dict__['_area'] = zone.area + self.__dict__['_index'] = index + self.__dict__['_item_is_empty'] = None + + @property + def area(self) -> Area: + return self.__dict__['_area'] + + def process_event(self) -> CriticalStrikeEvent: + self.__dict__['_zone'].state = AreaStatus.DAMAGED + self.__dict__['_area'].state = AreaStatus.DAMAGED + item = self.__dict__['_area'].items[self.__dict__['_index']] + if item is None or item.state == ItemStatus.DESTROYED: + self.__dict__['_item_is_empty'] = True + else: + self.__dict__['_item_is_empty'] = False + item.process_strike() + return self + + def is_empty(self): + return self.__dict__['_item_is_empty'] diff --git a/Hangar/__init__.py b/hangar/__init__.py similarity index 100% rename from Hangar/__init__.py rename to hangar/__init__.py diff --git a/Hangar/mech.py b/hangar/mech.py similarity index 96% rename from Hangar/mech.py rename to hangar/mech.py index 53b86d5..ac56b6d 100644 --- a/Hangar/mech.py +++ b/hangar/mech.py @@ -1,4 +1,5 @@ from MechFabrik.bauteile import CriticalStrikeEvent, InnerStructure, Item, StrikeEvent, ZoneNames +from events import CriticalStrikeEvent, StrikeEvent class Mech(object): diff --git a/MechFabrik/bauteile/__init__.py b/mech_factory/components/__init__.py similarity index 56% rename from MechFabrik/bauteile/__init__.py rename to mech_factory/components/__init__.py index 2336632..a51cfce 100755 --- a/MechFabrik/bauteile/__init__.py +++ b/mech_factory/components/__init__.py @@ -65,39 +65,6 @@ class OuterAmor(Zone): 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 InnerStructure: def __init__(self, tonnage: float, gyroskope: Gyroskope): @@ -127,29 +94,3 @@ class InnerStructure: def add_zone(self, index: ZoneNames, zone: OuterAmor): self._zones[index] = zone - - -class CriticalStrikeEvent: - def __init__(self, zone: OuterAmor, index: tuple[int,int]): - self.__dict__['_zone'] = zone - self.__dict__['_area'] = zone.area - self.__dict__['_index'] = index - self.__dict__['_item_is_empty'] = None - - @property - def area(self) -> Area: - return self.__dict__['_area'] - - def process_event(self) -> CriticalStrikeEvent: - self.__dict__['_zone'].state = AreaStatus.DAMAGED - self.__dict__['_area'].state = AreaStatus.DAMAGED - item = self.__dict__['_area'].items[self.__dict__['_index']] - if item is None or item.state == ItemStatus.DESTROYED: - self.__dict__['_item_is_empty'] = True - else: - self.__dict__['_item_is_empty'] = False - item.process_strike() - return self - - def is_empty(self): - return self.__dict__['_item_is_empty'] diff --git a/tests/test_mech_process.py b/tests/test_mech_process.py index e6a360a..b1a9437 100755 --- a/tests/test_mech_process.py +++ b/tests/test_mech_process.py @@ -1,4 +1,5 @@ from MechFabrik.bauteile.items import BigItem, DurableItem, Item, ItemStatus, ItemTypes +from events import CriticalStrikeEvent, StrikeEvent from test_mech import AbstractTestMechAmor, INNER_ARMOR, NEXT_OUTER_ZONE, OUTER_ARMOR from MechFabrik.bauteile import Area, AreaStatus, OuterAmor, StrikeEvent, CriticalStrikeEvent, ZoneNames