class AttributeResolver(Resolver): """ Resolves an Attribute under a particular context, outputting a text description of where each modifier comes from. >>> attack = Attribute( "Attack Bonus", -4 ) >>> attResolver = AttributeResolver( 5 ) >>> print attResolver.resolve( attack, '\\n'.join ) Attack Bonus : -4 Base : -4 """ def __init__(self, context, cap=1, identity=0, filterfunction=None): super(AttributeResolver, self).__init__(context, (lambda self, target: target.function(self)), cap, identity, filterfunction) self.intResolver = IntResolver(context, cap, identity, filterfunction) def resolveBase(self, target, condense, level, name=None): fmt = "%-72s: %s% 4s" if IResolveable.providedBy(target.function): subvalue = [self.resolve(target.function, condense, level + 1)] else: subvalue = [] if IModifier.providedBy(target): subvalue = subvalue + [ self.resolve(IModifier(target).parent, condense, level + 1) ] value = self.evaluate(target) name = name or target.name base = [ fmt % (" " * level + name, { True: "+", False: " " }[value > -1], value) ] return condense(base + subvalue) resolveModifier = resolveBase def resolveTotal(self, target, condense, level, name=None): fmt = "%-72s: %s% 4s" value = self.intResolver.resolve(target, sum) name = name or target.name base = fmt % (" " * level + name, { True: "+", False: " " }[value > -1], value) return base def getRequiredResults(self, results): return results
class AttributeResolver( Resolver ): """ Resolves an Attribute under a particular context, outputting a text description of where each modifier comes from. >>> attack = Attribute( "Attack Bonus", -4 ) >>> attResolver = AttributeResolver( 5 ) >>> print attResolver.resolve( attack, '\\n'.join ) Attack Bonus : -4 Base : -4 """ def __init__( self, context, cap=1, identity=0, filterfunction=None ): super( AttributeResolver, self ).__init__( context, (lambda self, target: target.function(self)), cap, identity, filterfunction ) self.intResolver=IntResolver( context, cap, identity, filterfunction ) def resolveBase( self, target, condense, level, name=None ): fmt="%-72s: %s% 4s" if IResolveable.providedBy(target.function): subvalue=[self.resolve(target.function, condense, level+1)] else: subvalue=[] if IModifier.providedBy(target): subvalue = subvalue + [self.resolve(IModifier(target).parent, condense, level + 1)] value=self.evaluate(target) name=name or target.name base=[fmt % (" " * level + name, {True: "+", False: " "}[value > -1], value)] return condense(base+subvalue) resolveModifier=resolveBase def resolveTotal( self, target, condense, level, name=None ): fmt="%-72s: %s% 4s" value=self.intResolver.resolve(target, sum) name=name or target.name base=fmt % (" " * level + name, {True: "+", False: " "}[value > -1], value) return base def getRequiredResults( self, results ): return results
def __init__( self, context, cap=1, identity=0, filterfunction=None ): super( AttributeResolver, self ).__init__( context, (lambda self, target: target.function(self)), cap, identity, filterfunction ) self.intResolver=IntResolver( context, cap, identity, filterfunction )
def __init__(self, context, cap=1, identity=0, filterfunction=None): super(AttributeResolver, self).__init__(context, (lambda self, target: target.function(self)), cap, identity, filterfunction) self.intResolver = IntResolver(context, cap, identity, filterfunction)