critical_striks #1
@@ -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']
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
from MechFabrik.bauteile import CriticalStrikeEvent, InnerStructure, Item, StrikeEvent, ZoneNames
|
from MechFabrik.bauteile import CriticalStrikeEvent, InnerStructure, Item, StrikeEvent, ZoneNames
|
||||||
|
from events import CriticalStrikeEvent, StrikeEvent
|
||||||
|
|
||||||
|
|
||||||
class Mech(object):
|
class Mech(object):
|
||||||
@@ -65,39 +65,6 @@ class OuterAmor(Zone):
|
|||||||
self.__dict__['_area'] = 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 InnerStructure:
|
class InnerStructure:
|
||||||
|
|
||||||
def __init__(self, tonnage: float, gyroskope: Gyroskope):
|
def __init__(self, tonnage: float, gyroskope: Gyroskope):
|
||||||
@@ -127,29 +94,3 @@ class InnerStructure:
|
|||||||
|
|
||||||
def add_zone(self, index: ZoneNames, zone: OuterAmor):
|
def add_zone(self, index: ZoneNames, zone: OuterAmor):
|
||||||
self._zones[index] = zone
|
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']
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
from MechFabrik.bauteile.items import BigItem, DurableItem, Item, ItemStatus, ItemTypes
|
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 test_mech import AbstractTestMechAmor, INNER_ARMOR, NEXT_OUTER_ZONE, OUTER_ARMOR
|
||||||
from MechFabrik.bauteile import Area, AreaStatus, OuterAmor, StrikeEvent, CriticalStrikeEvent, ZoneNames
|
from MechFabrik.bauteile import Area, AreaStatus, OuterAmor, StrikeEvent, CriticalStrikeEvent, ZoneNames
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user