42 lines
1.5 KiB
Python

from .arm_state import ArmState
class ControllerManager:
def __init__(self, state: ArmState):
self.state = state
self.controllers = {}
self.current_controller = None
def add_controller(self, controller_class, name, config_path):
if name not in self.controllers:
self.controllers[name] = controller_class(name,self.state,config_path)
else:
raise ValueError(f"Controller {name} already exists")
def remove_controller(self, name):
if name in self.controllers:
del self.controllers[name]
if self.current_controller == self.controllers.get(name):
self.current_controller = None
else:
raise ValueError(f"Controller {name} does not exist")
def switch_controller(self, name):
if name in self.controllers:
self.current_controller = self.controllers[name]
else:
raise ValueError(f"Controller {name} does not exist")
def __getattr__(self, name):
if self.current_controller:
method = getattr(self.current_controller, name, None)
if method:
return method
else:
raise AttributeError(f"'{type(self.current_controller).__name__}' object has no attribute '{name}'")
else:
raise RuntimeError("No current controller is set")
def step(self,dt):
if self.current_controller:
self.current_controller.step(dt)