Files
BattleTech/events/__init__.py
T

61 lines
1.8 KiB
Python

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']