Example #1
0
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)))
Example #2
0
 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))
Example #3
0
 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))
Example #4
0
 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
Example #5
0
    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
Example #7
0
    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)
Example #8
0
    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)))
Example #9
0
    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)
Example #10
0
 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)
Example #11
0
 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)
Example #12
0
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)))
Example #13
0
    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
Example #14
0
    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
Example #15
0
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)))
Example #16
0
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
Example #17
0
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
Example #18
0
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)))
Example #19
0
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
Example #20
0
    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)
Example #21
0
    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)
Example #22
0
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)
Example #23
0
    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)