def impl(context): observer = context.observer hp_events = [ x for x in observer.events if e_event_type(x) == 'hit points changed' ] hp_event = hp_events[0] attack_events = [ x for x in observer.events if e_event_type(x) == 'attack hit' ] if attack_events: attack_event = attack_events[0] weapon = e_attacker(attack_event).inventory.weapon expected_damage = sum(x[0] for x in weapon.weapon_data.damage) realised_damage = e_old_hit_points(hp_event) - e_new_hit_points( hp_event) else: trap_event = [ x for x in observer.events if e_event_type(x) == 'damage trap triggered' ][0] expected_damage = 2 realised_damage = e_damage(trap_event)[0] assert_that(realised_damage, is_(less_than(expected_damage)))
def receive_update(self, event): """ Receive update from entity """ if e_event_type(event) == 'hit points changed': self.show_hit_points(e_character(event)) elif e_event_type(event) == 'spirit points changed': self.show_spirit_points(e_character(event))
def receive_event(self, event): """ Receive event to display """ if e_event_type(event) in self.event_types_to_show: if e_event_type(event) == 'new level': if e_character(event) is self.character: self.text_edit.append("You have reached new level: {0} - {1}".format( level_name(e_level(event)), level_description(e_level(event)))) else: pass
def create_animation(self, event): """ Create an animation for event :param event: event to create animation for :type event: Event :returns: animation :rtype: Animation """ if e_event_type(event) in self.animations: return self.animations[e_event_type(event)](event) else: return Animation(event)
def receive_event(self, event): """ Receive event to display """ if e_event_type(event) in self.event_types_to_show: if e_event_type(event) == 'new level': if e_character(event) is self.character: self.text_edit.append( "You have reached new level: {0} - {1}".format( level_name(e_level(event)), level_description(e_level(event)))) else: pass
def test_casting_spell_raises_spirit_changed_event(self): """ Since casting spells uses spirit, an appropriate event should be raised """ spell = (SpellBuilder() .with_spirit(10) .build()) caster = (CharacterBuilder() .with_spirit(20) .build()) listener = EventListener() caster.register_for_updates(listener) effects_factory = mock() action = SpellCastingAction(caster = caster, spell = spell, effects_factory = effects_factory) action.execute() events = [event for event in listener.events if e_event_type(event) == 'spirit points changed'] assert_that(len(events), is_(equal_to(1)))
def receive_event(self, event): """ Receive event """ if event.event_type == 'move': self.refresh_screen() if event.mover == self.model.player: self.messages = [] self.screen.addstr(0, 0, ' '.ljust(80)) if e_event_type(event) in [ 'attack hit', 'attack miss', 'attack nothing', 'poison triggered', 'poison ended', 'poisoned', 'heal started', 'heal ended', 'heal triggered', 'death', 'pick up', 'drop', 'damage triggered', 'equip', 'unequip', 'notice', 'lose focus', 'error' ]: message = event.get_description(self.model.player) self.messages.append(message) if len(self.messages) > 2: self.messages = self.messages[-2:] displayed_messages = ', '.join(self.messages) displayed_messages = displayed_messages.ljust(80) self.screen.addstr(0, 0, displayed_messages)
def receive_update(self, event): """ Receive update from entity """ if e_event_type(event) == 'move': if self.model.player.level != self.current_level: self.__construct_scene(self.model, self.scene) self.__center_view_on_character(self.model.player)
def impl(context, damage_amount): observer = context.observer damage = int(damage_amount) hp_events = [x for x in observer.events if e_event_type(x) == "hit points changed"] hp_event = hp_events[0] realised_damage = e_old_hit_points(hp_event) - e_new_hit_points(hp_event) assert_that(realised_damage, is_(equal_to(damage)))
def matches(self, arg): """ Check if the passed argument matches :param arg: argument to check :returns: True if match, otherwise False :rtype: boolean """ if not arg: return False return e_event_type(arg) == self.event_type
def impl(context, damage_amount): observer = context.observer damage = int(damage_amount) hp_events = [ x for x in observer.events if e_event_type(x) == 'hit points changed' ] hp_event = hp_events[0] realised_damage = e_old_hit_points(hp_event) - e_new_hit_points(hp_event) assert_that(realised_damage, is_(equal_to(damage)))
def impl(context, damage_type): observer = context.observer attack_hit_events = (x for x in context.observer.events if e_event_type(x) == "attack hit") found = False for event in attack_hit_events: damage_list = e_damage(event)[1] for damage in damage_list: if damage_type == damage[1]: found = True assert found
def impl(context, damage_type): observer = context.observer attack_hit_events = (x for x in context.observer.events if e_event_type(x) == 'attack hit') found = False for event in attack_hit_events: damage_list = e_damage(event)[1] for damage in damage_list: if damage_type == damage[1]: found = True assert found
def impl(context): observer = context.observer hp_events = [x for x in observer.events if e_event_type(x) == "hit points changed"] hp_event = hp_events[0] attack_events = [x for x in observer.events if e_event_type(x) == "attack hit"] if attack_events: attack_event = attack_events[0] weapon = e_attacker(attack_event).inventory.weapon expected_damage = sum(x[0] for x in weapon.weapon_data.damage) realised_damage = e_old_hit_points(hp_event) - e_new_hit_points(hp_event) else: trap_event = [x for x in observer.events if e_event_type(x) == "damage trap triggered"][0] expected_damage = 2 realised_damage = e_damage(trap_event)[0] assert_that(realised_damage, is_(less_than(expected_damage)))
def impl(context, character_name): character = get_character(context, character_name) old_hit_points = get_history_value(character, "hit_points") new_hit_points = character.hit_points total_damage_suffered = old_hit_points - new_hit_points attack_hit_events = (x for x in context.observer.events if e_event_type(x) == "attack hit") matching_events = [x for x in attack_hit_events if e_target(x).name == character_name] hit_event = matching_events[0] attacker = e_attacker(hit_event) total_damage_from_weapon = sum([x[0] for x in attacker.inventory.weapon.weapon_data.damage]) assert total_damage_suffered > total_damage_from_weapon
def receive_update(self, event): """ Receive update from entity """ if e_event_type(event) in ('heal started', 'poisoned', 'heal ended', 'poison ended', 'damage started', 'damage ended'): for i in range(self.layout().count()): self.layout().itemAt(i).widget().close() character = e_target(event) for effect in character.get_effects(): new_icon = QLabel() new_icon.setPixmap(self.surface_manager.get_icon(effect.icon)) self.layout().insertWidget(self.layout().count() - 1, new_icon)
def impl(context, character_name): character = get_character(context, character_name) old_hit_points = get_history_value(character, 'hit_points') new_hit_points = character.hit_points total_damage_suffered = old_hit_points - new_hit_points attack_hit_events = (x for x in context.observer.events if e_event_type(x) == 'attack hit') matching_events = [ x for x in attack_hit_events if e_target(x).name == character_name ] hit_event = matching_events[0] attacker = e_attacker(hit_event) total_damage_from_weapon = sum( [x[0] for x in attacker.inventory.weapon.weapon_data.damage]) assert (total_damage_suffered > total_damage_from_weapon)
def receive_event(self, event): """ Receive event """ if event.event_type == 'move': self.refresh_screen() if event.mover == self.model.player: self.messages = [] self.screen.addstr(0, 0, ' '.ljust(80)) if e_event_type(event) in ['attack hit', 'attack miss', 'attack nothing', 'poison triggered', 'poison ended', 'poisoned', 'heal started', 'heal ended', 'heal triggered', 'death', 'pick up', 'drop', 'damage triggered', 'equip', 'unequip', 'notice', 'lose focus', 'error']: message = event.get_description(self.model.player) self.messages.append(message) if len(self.messages) > 2: self.messages = self.messages[-2:] displayed_messages = ', '.join(self.messages) displayed_messages = displayed_messages.ljust(80) self.screen.addstr(0, 0, displayed_messages)