tests: verarbeite kritische Treffer
This commit is contained in:
@@ -137,3 +137,6 @@ class InnerStructure:
|
|||||||
def add_zone(self, index: ZoneNames, zone: Zone):
|
def add_zone(self, index: ZoneNames, zone: Zone):
|
||||||
self._zones[index] = zone
|
self._zones[index] = zone
|
||||||
|
|
||||||
|
|
||||||
|
class CriticalStrikeEvent:
|
||||||
|
pass
|
||||||
@@ -11,14 +11,29 @@ class ItemTypes(enum.Enum):
|
|||||||
SUSTAINMENT = 7
|
SUSTAINMENT = 7
|
||||||
|
|
||||||
|
|
||||||
|
class ItemStatus(enum.Flag):
|
||||||
|
FINE = 0
|
||||||
|
DAMAGED = 1
|
||||||
|
DESTROYED = 2
|
||||||
|
|
||||||
|
|
||||||
class Item(object):
|
class Item(object):
|
||||||
def __init__(self, item_type: ItemTypes):
|
def __init__(self, item_type: ItemTypes):
|
||||||
self._type = item_type
|
self._type = item_type
|
||||||
|
self._state = ItemStatus.FINE
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def type(self):
|
def type(self):
|
||||||
return self._type
|
return self._type
|
||||||
|
|
||||||
|
@property
|
||||||
|
def state(self):
|
||||||
|
return self._state
|
||||||
|
|
||||||
|
@state.setter
|
||||||
|
def state(self, new_state: ItemStatus):
|
||||||
|
self._state = new_state
|
||||||
|
|
||||||
|
|
||||||
class BigItem(Item):
|
class BigItem(Item):
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
from MechFabrik import Cockpit, Sensors, Sustainment
|
||||||
|
from MechFabrik.bauteile.items import ItemStatus
|
||||||
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, ZoneNames
|
from MechFabrik.bauteile import Area, AreaStatus, OuterAmor, StrikeEvent, CriticalStrikeEvent, ZoneNames
|
||||||
|
|
||||||
|
|
||||||
class TestMechAmor(AbstractTestMechAmor):
|
class TestMechAmor(AbstractTestMechAmor):
|
||||||
@@ -28,6 +30,17 @@ class TestMechAmor(AbstractTestMechAmor):
|
|||||||
self.assertEqual(10, event.hits)
|
self.assertEqual(10, event.hits)
|
||||||
self.assertEqual(area, event.zone.parent)
|
self.assertEqual(area, event.zone.parent)
|
||||||
|
|
||||||
|
def test_critical_process(self):
|
||||||
|
for zone_name in ZoneNames:
|
||||||
|
with self.subTest(msg=zone_name.value):
|
||||||
|
zone = self.mech.inner_structure.zones.get(zone_name)
|
||||||
|
area = zone.area
|
||||||
|
|
||||||
|
event = self.mech.critical_strike(zone_name, (1, 2))
|
||||||
|
self.assertIsInstance(event, CriticalStrikeEvent)
|
||||||
|
self.assertEqual(area, event.area)
|
||||||
|
self.assertIsNone(event.is_empty())
|
||||||
|
|
||||||
def test_strike(self):
|
def test_strike(self):
|
||||||
start_outer_armor = 11
|
start_outer_armor = 11
|
||||||
start_area_armor = 5
|
start_area_armor = 5
|
||||||
@@ -81,3 +94,40 @@ class TestMechAmor(AbstractTestMechAmor):
|
|||||||
self.assertNotEqual(area, event.zone)
|
self.assertNotEqual(area, event.zone)
|
||||||
self.assertEqual(area.parent, event.zone)
|
self.assertEqual(area.parent, event.zone)
|
||||||
self.assertEqual(0, event.hits)
|
self.assertEqual(0, event.hits)
|
||||||
|
|
||||||
|
def test_critical_strike(self):
|
||||||
|
parent = Area()
|
||||||
|
area = Area()
|
||||||
|
area.parent = parent
|
||||||
|
cockpit = Cockpit()
|
||||||
|
area.cockpit = cockpit
|
||||||
|
area.items = {
|
||||||
|
(1, 1): Sustainment(),
|
||||||
|
(1, 2): Sensors(),
|
||||||
|
(1, 3): cockpit,
|
||||||
|
(1, 4): None,
|
||||||
|
(1, 5): cockpit,
|
||||||
|
(1, 6): Sustainment(),
|
||||||
|
}
|
||||||
|
|
||||||
|
zone = OuterAmor(area)
|
||||||
|
|
||||||
|
event = CriticalStrikeEvent(zone, (1, 2)).process_event()
|
||||||
|
self.assertEqual(AreaStatus.DAMAGED, zone.state)
|
||||||
|
self.assertEqual(AreaStatus.DAMAGED, area.state)
|
||||||
|
self.assertIsInstance(event, CriticalStrikeEvent)
|
||||||
|
self.assertFalse(event.is_empty())
|
||||||
|
self.assertEqual(area, event.area)
|
||||||
|
self.assertEqual(ItemStatus.DESTROYED, area.items[(1, 2)].state)
|
||||||
|
|
||||||
|
event = CriticalStrikeEvent(zone, (1, 3)).process_event()
|
||||||
|
self.assertIsInstance(event, CriticalStrikeEvent)
|
||||||
|
self.assertFalse(event.is_empty())
|
||||||
|
self.assertEqual(area, event.area)
|
||||||
|
self.assertEqual(ItemStatus.DESTROYED, area.items[(1, 3)].state)
|
||||||
|
self.assertEqual(ItemStatus.DESTROYED, area.items[(1, 5)].state)
|
||||||
|
|
||||||
|
event = CriticalStrikeEvent(zone, (1, 4)).process_event()
|
||||||
|
self.assertIsInstance(event, CriticalStrikeEvent)
|
||||||
|
self.assertTrue(event.is_empty())
|
||||||
|
self.assertEqual(area, event.area)
|
||||||
|
|||||||
Reference in New Issue
Block a user