From c3c4fe08646755e28dff8254fa2ed0ed3b4442dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20L=C3=BCcke?= Date: Tue, 2 Sep 2025 17:45:13 +0200 Subject: [PATCH] =?UTF-8?q?Feature:=20nutze=20richtige=20R=C3=BCstung=20in?= =?UTF-8?q?=20den=20einzelnen=20Zonen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MechFabrik/__init__.py | 104 ++++++++++++++++++------------- MechFabrik/bauteile/__init__.py | 14 ++++- MechFabrik/reader.py | 19 ++++++ MechFabrik/tabellen/bauteile.csv | 2 +- 4 files changed, 93 insertions(+), 46 deletions(-) diff --git a/MechFabrik/__init__.py b/MechFabrik/__init__.py index 2efdc5d..b4d8d3a 100755 --- a/MechFabrik/__init__.py +++ b/MechFabrik/__init__.py @@ -8,7 +8,18 @@ class MechFabrik(object): def __init__(self, name: str, tonnage: float, movement_rate: int): self.__components = ComponentReader() + self.__tonnage = tonnage self.__reactor_value = int(movement_rate * tonnage) + self.__areas = { + AreaNames.HEAD: Area(), + AreaNames.MIDDLE_TORSO: Area(), + AreaNames.LEFT_TORSO: Area(), + AreaNames.RIGHT_TORSO: Area(), + AreaNames.LEFT_ARM: Area(), + AreaNames.RIGHT_ARM: Area(), + AreaNames.LEFT_LEG: Area(), + AreaNames.RIGHT_LEG: Area(), + } self.__build_inner_structure(tonnage, movement_rate) self._mech = Mech(name, tonnage, movement_rate, self._inner_structure) @@ -20,29 +31,28 @@ class MechFabrik(object): self.__build_middle_torso_area(gyroscope) def __build_head_area(self) -> None: - area = Area() cockpit = Cockpit() - area.cockpit = cockpit - area.items = { + self.__areas[AreaNames.HEAD].cockpit = cockpit + self.__areas[AreaNames.HEAD].items = { (1, 1): Sustainment(), (1, 2): Sensors(), - (1, 3): area.cockpit, + (1, 3): cockpit, (1, 4): None, (1, 5): Sensors(), (1, 6): Sustainment(), } - self._inner_structure.add_area(AreaNames.HEAD, area) + self.__areas[AreaNames.HEAD].inner_armor = 3 - def __build_middle_torso_area(self, gyroscope: Gyroskope) -> Area: - area_middle = Area() - area_left = Area() - area_right = Area() - area_left.parent = area_middle - area_right.parent = area_middle + def __build_middle_torso_area(self, gyroscope: Gyroskope) -> None: + self.__areas[AreaNames.LEFT_TORSO].parent = self.__areas[AreaNames.MIDDLE_TORSO] + self.__areas[AreaNames.RIGHT_TORSO].parent = self.__areas[AreaNames.MIDDLE_TORSO] reactor = Reaktor(self.__reactor_value, self.__components.reactor_tonnage_from(self.__reactor_value)) - area_middle.reactor = reactor - area_middle.children = [area_right, area_left] - area_middle.items = { + self.__areas[AreaNames.MIDDLE_TORSO].reactor = reactor + self.__areas[AreaNames.MIDDLE_TORSO].children = [ + self.__areas[AreaNames.RIGHT_TORSO], + self.__areas[AreaNames.LEFT_TORSO] + ] + self.__areas[AreaNames.MIDDLE_TORSO].items = { (1, 1): reactor, (1, 2): reactor, (1, 3): reactor, @@ -56,19 +66,24 @@ class MechFabrik(object): (2, 5): None, (2, 6): None, } - self.__build_arm(area_right, AreaNames.RIGHT_ARM) - self.__build_leg(area_right, AreaNames.RIGHT_LEG) - self.__build_arm(area_left, AreaNames.LEFT_ARM) - self.__build_leg(area_left, AreaNames.LEFT_LEG) - self._inner_structure.add_area(AreaNames.LEFT_TORSO, area_left) - self._inner_structure.add_area(AreaNames.RIGHT_TORSO, area_right) - self._inner_structure.add_area(AreaNames.MIDDLE_TORSO, area_middle) - return area_middle + self.__areas[AreaNames.MIDDLE_TORSO].inner_armor = self.__components.inner_amor_for_tonnage_and_area( + self.__tonnage, + AreaNames.MIDDLE_TORSO + ) + self.__areas[AreaNames.LEFT_TORSO].inner_armor = self.__components.inner_amor_for_tonnage_and_area( + self.__tonnage, AreaNames.LEFT_TORSO) + self.__areas[AreaNames.RIGHT_TORSO].inner_armor = self.__components.inner_amor_for_tonnage_and_area( + self.__tonnage, + AreaNames.RIGHT_TORSO + ) + self.__build_arm(self.__areas[AreaNames.RIGHT_TORSO], AreaNames.RIGHT_ARM) + self.__build_leg(self.__areas[AreaNames.RIGHT_TORSO], AreaNames.RIGHT_LEG) + self.__build_arm(self.__areas[AreaNames.LEFT_TORSO], AreaNames.LEFT_ARM) + self.__build_leg(self.__areas[AreaNames.LEFT_TORSO], AreaNames.LEFT_LEG) def __build_arm(self, parent: Area, index: AreaNames): - arm = Area() - arm.parent = parent - arm.items = { + self.__areas[index].parent = parent + self.__areas[index].items = { (1, 1): Joint(), (1, 2): Activator(), (1, 3): Activator(), @@ -82,13 +97,13 @@ class MechFabrik(object): (2, 5): None, (2, 6): None, } - parent.children.append(arm) - self._inner_structure.add_area(index, arm) + self.__areas[index].inner_armor = self.__components.inner_amor_for_tonnage_and_area(self.__tonnage, index) + parent.children.append(self.__areas[index]) + def __build_leg(self, parent: Area, index: AreaNames): - leg = Area() - leg.parent = parent - leg.items = { + self.__areas[index].parent = parent + self.__areas[index].items = { (1, 1): Joint(), (1, 2): Activator(), (1, 3): Activator(), @@ -96,23 +111,28 @@ class MechFabrik(object): (1, 5): None, (1, 6): None, } - parent.children.append(leg) - self._inner_structure.add_area(index, leg) + self.__areas[index].inner_armor = self.__components.inner_amor_for_tonnage_and_area(self.__tonnage, index) + parent.children.append(self.__areas[index]) def auslieferung(self) -> Mech: + for (index, area) in self.__areas.items(): + self._inner_structure.add_area(index, area) return self._mech - def setHeadAmore(self, param): - pass + def set_head_armor(self, armor: int) -> None: + self.__areas[AreaNames.HEAD].armor = armor - def setMidleTorsoAmore(self, param): - pass + def set_middle_torso_armor(self, armor: int) -> None: + self.__areas[AreaNames.MIDDLE_TORSO].armor = armor - def setSideTorsoAmore(self, param): - pass + def set_side_torso_armor(self, armor: int) -> None: + self.__areas[AreaNames.RIGHT_TORSO].armor = armor + self.__areas[AreaNames.LEFT_TORSO].armor = armor - def setArmAmore(self, param): - pass + def set_arm_armor(self, armor: int) -> None: + self.__areas[AreaNames.RIGHT_ARM].armor = armor + self.__areas[AreaNames.LEFT_ARM].armor = armor - def setLegAmore(self, param): - pass + def set_leg_armor(self, armor: int) -> None: + self.__areas[AreaNames.RIGHT_LEG].armor = armor + self.__areas[AreaNames.LEFT_LEG].armor = armor diff --git a/MechFabrik/bauteile/__init__.py b/MechFabrik/bauteile/__init__.py index ccfcaec..059de89 100755 --- a/MechFabrik/bauteile/__init__.py +++ b/MechFabrik/bauteile/__init__.py @@ -85,7 +85,8 @@ class Area: def __init__(self): self.__dict__['_content'] = { 'children': [], - 'items': {} + 'items': {}, + 'armor': 0, } def __setattr__(self, key, value): @@ -154,5 +155,12 @@ class Mech(object): def set_item(self, key: tuple, item: Item): pass - def strike(self, area_name, param): - pass + def strike(self, area_name, hits: int): + area = self._inner_structure.areas.get(area_name) + if area.armor > hits: + area.armor -= hits + return + hits_rest = hits - area.armor + if area.inner_armor > hits_rest: + area.inner_armor -= hits_rest + area.armor = 0 diff --git a/MechFabrik/reader.py b/MechFabrik/reader.py index d951a5f..17f824d 100755 --- a/MechFabrik/reader.py +++ b/MechFabrik/reader.py @@ -1,6 +1,8 @@ import csv import os.path +from MechFabrik import AreaNames + # noinspection SpellCheckingInspection class CsvDialect (csv.Dialect): @@ -34,3 +36,20 @@ class ComponentReader: def reactor_tonnage_from(self, reactor_value: int) -> float: return float(self._reactor_data.get(reactor_value, {}).get('Tonnage', 0.0)) + + def inner_amor_for_tonnage_and_area(self, tonnage: float, area: AreaNames) -> int: + match area: + case AreaNames.HEAD: + return 3 + case AreaNames.MIDDLE_TORSO: + return int(self._inner_structure_data.get(tonnage, {}).get('TorsoMitte', 0)) + pass + case AreaNames.RIGHT_TORSO | AreaNames.LEFT_TORSO: + return int(self._inner_structure_data.get(tonnage, {}).get('TorsoSeite', 0)) + pass + case AreaNames.RIGHT_ARM | AreaNames.LEFT_ARM: + return int(self._inner_structure_data.get(tonnage, {}).get('Arm', 0)) + pass + case AreaNames.RIGHT_LEG | AreaNames.LEFT_LEG: + return int(self._inner_structure_data.get(tonnage, {}).get('Bein', 0)) + return 0 diff --git a/MechFabrik/tabellen/bauteile.csv b/MechFabrik/tabellen/bauteile.csv index dfe0433..ba24faa 100755 --- a/MechFabrik/tabellen/bauteile.csv +++ b/MechFabrik/tabellen/bauteile.csv @@ -1,4 +1,4 @@ -"GTonnage","Tonnage IS","Tonnage Endo","TorsoMitte","TorsoSeite","Arm","Bein","Tonnage" "SD" +"GTonnage","Tonnage IS","Tonnage Endo","TorsoMitte","TorsoSeite","Arm","Bein","Tonnage SD" 10,1.0,0.5,4,3,1,2,0.5 15,1.5,1.0,5,4,2,3,0.5 20,2.0,1.0,6,5,3,4,0.5