def __init__(self): self.messages = [] self.camera = Camera() self.map = Map() self.user = User('Name') self.monsters = [Monster(f'Ork{i}') for i in range(MAX_MONSTERS)] EventManager.getInstance().bind(MessageEvent.name, self, 'new_message')
def __init__(self, name): self.name = name self.action = '' self.position = [-1, -1] self.direction = DIRECTION_UP self.heal = randint(1, MAX_HEAL) self.ap = randint(1, MAX_AP) EventManager.getInstance().bind(KickEvent.name, self, 'damage_deal_event')
def do(self, user, action, map): messages = [] if action == HEAL: user.cure() messages.append(f'{user.name} heal {user.heal}') if action == ATTACK: EventManager.getInstance().dispatch( KickEvent(self.position, user.ap)) messages.append(f'{user.name} kick {user.ap}') EventManager.getInstance().dispatch(MessageEvent(None, messages))
def turn(self, map): if self.find_enemy(map): messages = [] self.action = self.get_action() if self.action == ATTACK: EventManager.getInstance().dispatch( KickEvent(self.enemy_position(map), self.ap)) messages.append(f'{self.name} kick {self.ap}') else: self.cure() messages.append(f'{self.name} heal {self.heal}') EventManager.getInstance().dispatch(MessageEvent(None, messages))
def test_dispatch_events(self, MockUser): event_manger = EventManager.getInstance() event_manger.subscribers = {} position = [randint(0, 100), randint(0, 100)] MockUser.position = position event_manger.bind(KickEvent.name, MockUser, 'damage_deal') damage = randint(1, 100) event = KickEvent(position, damage) event_manger.dispatch(event) MockUser.damage_deal.assert_called_with(event)
def test_bind_subscriber_to_event(self, MockUser): event_manger = EventManager.getInstance() self.assertEqual(event_manger.subscribers, {}) callback = 'damage_deal' event_manger.bind(KickEvent.name, MockUser, callback) self.assertEqual( event_manger.subscribers, {KickEvent.name: [{ 'object': MockUser, 'callback': callback }]}) event_manger.bind(KickEvent.name, MockUser, callback) self.assertEqual( event_manger.subscribers, {KickEvent.name: [{ 'object': MockUser, 'callback': callback }]}) event_manger.bind(Event.name, MockUser, callback) self.assertEqual( event_manger.subscribers, { KickEvent.name: [{ 'object': MockUser, 'callback': callback }], Event.name: [{ 'object': MockUser, 'callback': callback }] }) monster = Monster('Ork') event_manger.bind(Event.name, monster, callback) self.assertEqual( event_manger.subscribers, { KickEvent.name: [{ 'object': MockUser, 'callback': callback }], Event.name: [ { 'object': MockUser, 'callback': callback }, { 'object': monster, 'callback': callback }, ] })
def test_unbind_subscriber_to_event(self, MockUser): event_manager = EventManager.getInstance() event_manager.subscribers = {} callback = 'damage_deal' event_manager.bind(KickEvent.name, MockUser, callback) self.assertEqual( event_manager.subscribers, {KickEvent.name: [{ 'object': MockUser, 'callback': callback }]}) event_manager.unbind(KickEvent.name, MockUser, '') self.assertEqual( event_manager.subscribers, {KickEvent.name: [{ 'object': MockUser, 'callback': callback }]}) event_manager.unbind(KickEvent.name, MockUser, callback) self.assertEqual(event_manager.subscribers, {KickEvent.name: []})
def test_subscriptions_dict(self): event_manager = EventManager() self.assertIsNone(event_manager.subscribers) event_manager = EventManager.getInstance() self.assertIsInstance(event_manager.subscribers, dict)
def test_make_event_manager_instance(self): event_manager = EventManager.getInstance() self.assertIsNotNone(event_manager) self.assertEqual(event_manager, EventManager.getInstance()) self.assertEqual(event_manager._instance, event_manager)
def test_object_is_event(self): self.assertTrue(EventManager.getInstance().is_event(KickEvent([], 0))) self.assertFalse(EventManager.getInstance().is_event({})) self.assertFalse(EventManager.getInstance().is_event(10))
def test_create_event_manager_object(self): event_manager = EventManager() self.assertNotEqual(event_manager, EventManager.getInstance())
def killed(self, map): map.clear(self.position) EventManager.getInstance().unbind(KickEvent.name, self, 'damage_deal_event')