42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
from events import CriticalStrikeEvent, StrikeEvent
|
|
from mech_factory.components import InnerStructure, Item, ZoneNames
|
|
|
|
|
|
class Mech(object):
|
|
|
|
def __init__(self, name: str, tonnage: float, movement_rate: int, inner_structure: InnerStructure):
|
|
self._movement_rate = movement_rate
|
|
self._tonnage = tonnage
|
|
self._name = name
|
|
self._inner_structure = inner_structure
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
return self._name
|
|
|
|
@property
|
|
def tonnage(self) -> float:
|
|
return self._tonnage
|
|
|
|
@property
|
|
def inner_structure(self) -> InnerStructure:
|
|
return self._inner_structure
|
|
|
|
@property
|
|
def movement_rate(self) -> int:
|
|
return self._movement_rate
|
|
|
|
def set_item(self, key: tuple, item: Item):
|
|
pass
|
|
|
|
def strike(self, zone_name: ZoneNames, hits: int) -> StrikeEvent:
|
|
zone = self._inner_structure.zones.get(zone_name)
|
|
if zone is None:
|
|
raise Exception(f"Zone {zone_name} not found")
|
|
return StrikeEvent(zone, hits)
|
|
|
|
def critical_strike(self, zone_name: ZoneNames, index: tuple[int, int]) -> CriticalStrikeEvent:
|
|
zone = self._inner_structure.zones.get(zone_name)
|
|
if zone is None:
|
|
raise Exception(f"Zone {zone_name} not found")
|
|
return CriticalStrikeEvent(zone, index) |