From: Joe Wreschnig Date: Wed, 17 Mar 2010 04:52:22 +0000 (-0700) Subject: INumberDef: Pre-int-round static values. X-Git-Url: https://git.yukkurigames.com/?p=python-bulletml.git;a=commitdiff_plain;h=506774e3940c9b890b41852e62d871b044e968c9;hp=5f93dc227463ac9a34bfe4d06b67b7d07bfb12cc INumberDef: Pre-int-round static values. --- diff --git a/bulletml/expr.py b/bulletml/expr.py index 3c80b06..fc71d0d 100644 --- a/bulletml/expr.py +++ b/bulletml/expr.py @@ -43,21 +43,21 @@ class NumberDef(object): self.__expr = expr.replace("$rand", "random()").replace("$rank", "rank") try: try: - self.__value = eval(self.__expr, dict(__builtins__={})) + self._value = eval(self.__expr, dict(__builtins__={})) except NameError: variables = dict(rank=1, params=[0] * 99) value = eval(self.__expr, self.GLOBALS, variables) if not isinstance(value, (int, float)): raise TypeError(expr) - self.__value = None + self._value = None except Exception: raise ExprError(expr) self.__expr = compile(self.__expr, __file__, "eval") def __call__(self, params, rank): """Evaluate the expression and return its value.""" - if self.__value is not None: - return self.__value + if self._value is not None: + return self._value variables = { 'rank': rank, 'params': params } return eval(self.__expr, self.GLOBALS, variables) @@ -66,5 +66,12 @@ class NumberDef(object): class INumberDef(NumberDef): """A NumberDef, but returns rounded integer results.""" + def __init__(self, expr): + super(INumberDef, self).__init__(expr) + if self._value is not None: + self._value = int(round(self._value)) + def __call__(self, params, rank): + if self._value is not None: + return self._value return int(round(super(INumberDef, self).__call__(params, rank)))