From 861b0736332c73b9c2b0f6e148b297e8e81af8bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20L=C3=BCcke?= Date: Wed, 1 Jul 2026 16:26:52 +0200 Subject: [PATCH] tests: verarbeite kritische Treffer --- MechFabrik/bauteile/__init__.py | 3 ++ MechFabrik/bauteile/items.py | 15 ++++++++++ tests/test_mech_process.py | 52 ++++++++++++++++++++++++++++++++- 3 files changed, 69 insertions(+), 1 deletion(-) diff --git a/MechFabrik/bauteile/__init__.py b/MechFabrik/bauteile/__init__.py index c88d5fc..da0f8ec 100755 --- a/MechFabrik/bauteile/__init__.py +++ b/MechFabrik/bauteile/__init__.py @@ -137,3 +137,6 @@ class InnerStructure: def add_zone(self, index: ZoneNames, zone: Zone): self._zones[index] = zone + +class CriticalStrikeEvent: + pass \ No newline at end of file diff --git a/MechFabrik/bauteile/items.py b/MechFabrik/bauteile/items.py index 354130b..92e1139 100644 --- a/MechFabrik/bauteile/items.py +++ b/MechFabrik/bauteile/items.py @@ -11,14 +11,29 @@ class ItemTypes(enum.Enum): SUSTAINMENT = 7 +class ItemStatus(enum.Flag): + FINE = 0 + DAMAGED = 1 + DESTROYED = 2 + + class Item(object): def __init__(self, item_type: ItemTypes): self._type = item_type + self._state = ItemStatus.FINE @property def type(self): 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): diff --git a/tests/test_mech_process.py b/tests/test_mech_process.py index 3a6ee50..5e28d36 100755 --- a/tests/test_mech_process.py +++ b/tests/test_mech_process.py @@ -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 MechFabrik.bauteile import Area, AreaStatus, OuterAmor, StrikeEvent, ZoneNames +from MechFabrik.bauteile import Area, AreaStatus, OuterAmor, StrikeEvent, CriticalStrikeEvent, ZoneNames class TestMechAmor(AbstractTestMechAmor): @@ -28,6 +30,17 @@ class TestMechAmor(AbstractTestMechAmor): self.assertEqual(10, event.hits) 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): start_outer_armor = 11 start_area_armor = 5 @@ -81,3 +94,40 @@ class TestMechAmor(AbstractTestMechAmor): self.assertNotEqual(area, event.zone) self.assertEqual(area.parent, event.zone) 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)