Feature: nutze richtige Rüstung in den einzelnen Zonen

This commit is contained in:
2025-09-02 17:45:13 +02:00
parent 8e5e8527b2
commit c3c4fe0864
4 changed files with 93 additions and 46 deletions
+62 -42
View File
@@ -8,7 +8,18 @@ class MechFabrik(object):
def __init__(self, name: str, tonnage: float, movement_rate: int): def __init__(self, name: str, tonnage: float, movement_rate: int):
self.__components = ComponentReader() self.__components = ComponentReader()
self.__tonnage = tonnage
self.__reactor_value = int(movement_rate * 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.__build_inner_structure(tonnage, movement_rate)
self._mech = Mech(name, tonnage, movement_rate, self._inner_structure) self._mech = Mech(name, tonnage, movement_rate, self._inner_structure)
@@ -20,29 +31,28 @@ class MechFabrik(object):
self.__build_middle_torso_area(gyroscope) self.__build_middle_torso_area(gyroscope)
def __build_head_area(self) -> None: def __build_head_area(self) -> None:
area = Area()
cockpit = Cockpit() cockpit = Cockpit()
area.cockpit = cockpit self.__areas[AreaNames.HEAD].cockpit = cockpit
area.items = { self.__areas[AreaNames.HEAD].items = {
(1, 1): Sustainment(), (1, 1): Sustainment(),
(1, 2): Sensors(), (1, 2): Sensors(),
(1, 3): area.cockpit, (1, 3): cockpit,
(1, 4): None, (1, 4): None,
(1, 5): Sensors(), (1, 5): Sensors(),
(1, 6): Sustainment(), (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: def __build_middle_torso_area(self, gyroscope: Gyroskope) -> None:
area_middle = Area() self.__areas[AreaNames.LEFT_TORSO].parent = self.__areas[AreaNames.MIDDLE_TORSO]
area_left = Area() self.__areas[AreaNames.RIGHT_TORSO].parent = self.__areas[AreaNames.MIDDLE_TORSO]
area_right = Area()
area_left.parent = area_middle
area_right.parent = area_middle
reactor = Reaktor(self.__reactor_value, self.__components.reactor_tonnage_from(self.__reactor_value)) reactor = Reaktor(self.__reactor_value, self.__components.reactor_tonnage_from(self.__reactor_value))
area_middle.reactor = reactor self.__areas[AreaNames.MIDDLE_TORSO].reactor = reactor
area_middle.children = [area_right, area_left] self.__areas[AreaNames.MIDDLE_TORSO].children = [
area_middle.items = { self.__areas[AreaNames.RIGHT_TORSO],
self.__areas[AreaNames.LEFT_TORSO]
]
self.__areas[AreaNames.MIDDLE_TORSO].items = {
(1, 1): reactor, (1, 1): reactor,
(1, 2): reactor, (1, 2): reactor,
(1, 3): reactor, (1, 3): reactor,
@@ -56,19 +66,24 @@ class MechFabrik(object):
(2, 5): None, (2, 5): None,
(2, 6): None, (2, 6): None,
} }
self.__build_arm(area_right, AreaNames.RIGHT_ARM) self.__areas[AreaNames.MIDDLE_TORSO].inner_armor = self.__components.inner_amor_for_tonnage_and_area(
self.__build_leg(area_right, AreaNames.RIGHT_LEG) self.__tonnage,
self.__build_arm(area_left, AreaNames.LEFT_ARM) AreaNames.MIDDLE_TORSO
self.__build_leg(area_left, AreaNames.LEFT_LEG) )
self._inner_structure.add_area(AreaNames.LEFT_TORSO, area_left) self.__areas[AreaNames.LEFT_TORSO].inner_armor = self.__components.inner_amor_for_tonnage_and_area(
self._inner_structure.add_area(AreaNames.RIGHT_TORSO, area_right) self.__tonnage, AreaNames.LEFT_TORSO)
self._inner_structure.add_area(AreaNames.MIDDLE_TORSO, area_middle) self.__areas[AreaNames.RIGHT_TORSO].inner_armor = self.__components.inner_amor_for_tonnage_and_area(
return area_middle 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): def __build_arm(self, parent: Area, index: AreaNames):
arm = Area() self.__areas[index].parent = parent
arm.parent = parent self.__areas[index].items = {
arm.items = {
(1, 1): Joint(), (1, 1): Joint(),
(1, 2): Activator(), (1, 2): Activator(),
(1, 3): Activator(), (1, 3): Activator(),
@@ -82,13 +97,13 @@ class MechFabrik(object):
(2, 5): None, (2, 5): None,
(2, 6): None, (2, 6): None,
} }
parent.children.append(arm) self.__areas[index].inner_armor = self.__components.inner_amor_for_tonnage_and_area(self.__tonnage, index)
self._inner_structure.add_area(index, arm) parent.children.append(self.__areas[index])
def __build_leg(self, parent: Area, index: AreaNames): def __build_leg(self, parent: Area, index: AreaNames):
leg = Area() self.__areas[index].parent = parent
leg.parent = parent self.__areas[index].items = {
leg.items = {
(1, 1): Joint(), (1, 1): Joint(),
(1, 2): Activator(), (1, 2): Activator(),
(1, 3): Activator(), (1, 3): Activator(),
@@ -96,23 +111,28 @@ class MechFabrik(object):
(1, 5): None, (1, 5): None,
(1, 6): None, (1, 6): None,
} }
parent.children.append(leg) self.__areas[index].inner_armor = self.__components.inner_amor_for_tonnage_and_area(self.__tonnage, index)
self._inner_structure.add_area(index, leg) parent.children.append(self.__areas[index])
def auslieferung(self) -> Mech: def auslieferung(self) -> Mech:
for (index, area) in self.__areas.items():
self._inner_structure.add_area(index, area)
return self._mech return self._mech
def setHeadAmore(self, param): def set_head_armor(self, armor: int) -> None:
pass self.__areas[AreaNames.HEAD].armor = armor
def setMidleTorsoAmore(self, param): def set_middle_torso_armor(self, armor: int) -> None:
pass self.__areas[AreaNames.MIDDLE_TORSO].armor = armor
def setSideTorsoAmore(self, param): def set_side_torso_armor(self, armor: int) -> None:
pass self.__areas[AreaNames.RIGHT_TORSO].armor = armor
self.__areas[AreaNames.LEFT_TORSO].armor = armor
def setArmAmore(self, param): def set_arm_armor(self, armor: int) -> None:
pass self.__areas[AreaNames.RIGHT_ARM].armor = armor
self.__areas[AreaNames.LEFT_ARM].armor = armor
def setLegAmore(self, param): def set_leg_armor(self, armor: int) -> None:
pass self.__areas[AreaNames.RIGHT_LEG].armor = armor
self.__areas[AreaNames.LEFT_LEG].armor = armor
+11 -3
View File
@@ -85,7 +85,8 @@ class Area:
def __init__(self): def __init__(self):
self.__dict__['_content'] = { self.__dict__['_content'] = {
'children': [], 'children': [],
'items': {} 'items': {},
'armor': 0,
} }
def __setattr__(self, key, value): def __setattr__(self, key, value):
@@ -154,5 +155,12 @@ class Mech(object):
def set_item(self, key: tuple, item: Item): def set_item(self, key: tuple, item: Item):
pass pass
def strike(self, area_name, param): def strike(self, area_name, hits: int):
pass 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
+19
View File
@@ -1,6 +1,8 @@
import csv import csv
import os.path import os.path
from MechFabrik import AreaNames
# noinspection SpellCheckingInspection # noinspection SpellCheckingInspection
class CsvDialect (csv.Dialect): class CsvDialect (csv.Dialect):
@@ -34,3 +36,20 @@ class ComponentReader:
def reactor_tonnage_from(self, reactor_value: int) -> float: def reactor_tonnage_from(self, reactor_value: int) -> float:
return float(self._reactor_data.get(reactor_value, {}).get('Tonnage', 0.0)) 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
+1 -1
View File
@@ -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 10,1.0,0.5,4,3,1,2,0.5
15,1.5,1.0,5,4,2,3,0.5 15,1.5,1.0,5,4,2,3,0.5
20,2.0,1.0,6,5,3,4,0.5 20,2.0,1.0,6,5,3,4,0.5
Can't render this file because it contains an unexpected character in line 1 and column 87.