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)
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)