class StateObserver: def __init__(self, stateregister): self.bus = EventBus() self.register = stateregister self.active_state = None def bind(self, event, callback): self.bus.register(event, callback) def get_register(self): return self.register def change_state(self, state): state.action(self, *self.active_state_args) def set_state(self, name, args=[]): state = self.register.get_state(name) self.bus.post('change', (self.active_state, state)) if self.active_state is not None: self.bus.post('finish', self.active_state) print "[SM] State replaced" self.active_state = state self.active_state_args = args def state_finished(self, state): if state == self.active_state and not state.was_interrupted: self.bus.post('finish', state) self.active_state = None def get_active_state(self): return self.active_state def next_state(self): while self.active_state != None: yield self.active_state def get_states(self): return self.register.states[0]
from event_bus import EventBus from sample_event import SampleEvent KEY_ESCAPE = 27 event_bus = EventBus() assert event_bus is not None def onEventKey(event: SampleEvent): assert event is not None assert event.key == KEY_ESCAPE assert len(event_bus.getHandlers(SampleEvent)) == 0 event_bus.unregister(onEventKey) assert len(event_bus.getHandlers(SampleEvent)) == 0 event_bus.register(onEventKey) assert len(event_bus.getHandlers(SampleEvent)) == 1 event_bus.unregister(onEventKey) assert len(event_bus.getHandlers(SampleEvent)) == 0 event_bus.register(onEventKey) assert len(event_bus.getHandlers(SampleEvent)) == 1 event_bus.emit(SampleEvent(KEY_ESCAPE))