示例#1
0
class Spell():
    """
    Class to represent spells

    .. versionadded:: 0.9
    """

    @log_debug
    def __init__(self):
        """
        Default constructor
        """
        self.targets = []
        self.effects = EffectsCollection()
        self.spirit = 0

    @log_debug
    def add_effect_handle(self, handle):
        """
        Add effect handle

        :param handle: effect handle to add
        :type handle: EffectHandle
        """
        self.effects.add_effect_handle(handle)

    @log_debug
    def get_effect_handles(self, trigger=None):
        """
        Get effect handles

        :param trigger: optional trigger type
        :type trigger: string

        :returns: effect handles
        :rtype: [EffectHandle]
        """
        return self.effects.get_effect_handles(trigger)

    @log_debug
    def remove_effect_handle(self, handle):
        """
        Remove given handle

        :param handle: handle to remove
        :type handle: EffectHandle
        """
        self.effects.remove_effect_handle(handle)

    @log_info
    def cast(self, effects_factory):
        """
        Cast the spell

        :param effects_factory: factory for creating effects
        :type effects_factory: EffectsFactory
        """
        handles = self.effects.get_effect_handles('on spell hit')
        effects = []

        targets = (x.target for x in self.targets
                   if x.target)

        for target in targets:
            for handle in handles:
                effects.append(effects_factory(key=handle.effect,
                                               target=target))

        for effect in effects:
            if not effect.duration or effect.duration <= 0:
                effect.trigger()
            else:
                effect.target.add_effect(effect)
示例#2
0
class Spell():
    """
    Class to represent spells

    .. versionadded:: 0.9
    """
    @log_debug
    def __init__(self):
        """
        Default constructor
        """
        self.targets = []
        self.effects = EffectsCollection()
        self.spirit = 0

    @log_debug
    def add_effect_handle(self, handle):
        """
        Add effect handle

        :param handle: effect handle to add
        :type handle: EffectHandle
        """
        self.effects.add_effect_handle(handle)

    @log_debug
    def get_effect_handles(self, trigger=None):
        """
        Get effect handles

        :param trigger: optional trigger type
        :type trigger: string

        :returns: effect handles
        :rtype: [EffectHandle]
        """
        return self.effects.get_effect_handles(trigger)

    @log_debug
    def remove_effect_handle(self, handle):
        """
        Remove given handle

        :param handle: handle to remove
        :type handle: EffectHandle
        """
        self.effects.remove_effect_handle(handle)

    @log_info
    def cast(self, effects_factory):
        """
        Cast the spell

        :param effects_factory: factory for creating effects
        :type effects_factory: EffectsFactory
        """
        handles = self.effects.get_effect_handles('on spell hit')
        effects = []

        targets = (x.target for x in self.targets if x.target)

        for target in targets:
            for handle in handles:
                effects.append(
                    effects_factory(key=handle.effect, target=target))

        for effect in effects:
            if not effect.duration or effect.duration <= 0:
                effect.trigger()
            else:
                effect.target.add_effect(effect)