feature: während der Erstellung erfolgt eine Kontrolle des Gewichts
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
from typing import Any
|
||||
|
||||
from mech_factory.component_storage import AreaNames, InnerStructure
|
||||
from mech_factory.component_storage.items import BigItem
|
||||
|
||||
class Watcher:
|
||||
def __init__(self, tonnage: float):
|
||||
self._tonnage = tonnage
|
||||
self._weight_watcher = WeightWatcher(tonnage)
|
||||
self._amor_watcher = ArmorWatcher()
|
||||
|
||||
def add_item(self, item: Any) -> Any:
|
||||
if isinstance(item, InnerStructure):
|
||||
self._amor_watcher.set_inner_structure(item)
|
||||
return self._weight_watcher.add_item(item)
|
||||
|
||||
@property
|
||||
def actual_weight(self):
|
||||
return self._weight_watcher.actual_weight + self._amor_watcher.actual_armor_tonnage
|
||||
|
||||
@property
|
||||
def rest_weight(self):
|
||||
return self._tonnage - self.actual_weight
|
||||
|
||||
def add_armor(self, area: AreaNames, armor: int):
|
||||
self._amor_watcher.add_armor(area, armor)
|
||||
|
||||
|
||||
class ArmorWatcher:
|
||||
def __init__(self):
|
||||
self._inner_structure = None
|
||||
self._areas = {}
|
||||
|
||||
@property
|
||||
def actual_armor_tonnage(self):
|
||||
actual_armor = sum(self._areas.values())
|
||||
if actual_armor % 8 > 0:
|
||||
raise ValueError('Armor is not valid')
|
||||
return actual_armor / 16
|
||||
|
||||
def set_inner_structure(self, inner_structure: InnerStructure):
|
||||
self._inner_structure = inner_structure
|
||||
|
||||
def add_armor(self, area: AreaNames, armor: int):
|
||||
max_armor = self._inner_structure.areas[area].armor * 2
|
||||
if area is AreaNames.HEAD and armor > 9:
|
||||
raise ValueError(AreaNames.HEAD.name + 'Armor cannot be greater than 9')
|
||||
elif armor > max_armor:
|
||||
raise ValueError(AreaNames.HEAD.name + 'Armor cannot be greater than ' + str(max_armor))
|
||||
self._areas[area] = armor
|
||||
|
||||
class WeightWatcher:
|
||||
def __init__(self, max_weight: float):
|
||||
self._max_weight = max_weight
|
||||
self._items = {}
|
||||
self._armor = 0
|
||||
|
||||
@property
|
||||
def actual_weight(self):
|
||||
return sum(self._items.values())
|
||||
|
||||
def add_item(self, item: Any) -> Any:
|
||||
if isinstance(item, BigItem):
|
||||
self._items[item] = item.tonnage
|
||||
if isinstance(item, InnerStructure):
|
||||
self._items[item] = item.tonnage
|
||||
return item
|
||||
|
||||
def set_armor(self, armor: int):
|
||||
self._armor = armor
|
||||
Reference in New Issue
Block a user