Add the ConstantRandom utility class
This commit is contained in:
parent
d119e71116
commit
5980329125
@ -226,3 +226,33 @@ init python early:
|
||||
Returns the value returned by the screen, if any.
|
||||
"""
|
||||
return renpy.call_in_new_context("call_screen", sc_name, *args, **kwargs)
|
||||
|
||||
class ConstantRandom(random.Random):
|
||||
"""
|
||||
The state of the object never changes when generative methods are called,
|
||||
meaning that successive calls of the same method with the same arguments
|
||||
produce the same results.
|
||||
|
||||
Populated in the block below.
|
||||
"""
|
||||
|
||||
def seed(self, a=None, *args, **kwargs):
|
||||
if a is None:
|
||||
a = renpy.random.random()
|
||||
super().seed(a, *args, **kwargs)
|
||||
self.state = self.getstate()
|
||||
|
||||
python early hide:
|
||||
service_randomobj = random.Random()
|
||||
|
||||
def random_wrap(func_name):
|
||||
def wrapped(self, *args, **kwargs):
|
||||
service_randomobj.setstate(self.getstate())
|
||||
rv = getattr(service_randomobj, func_name)(*args, **kwargs)
|
||||
return rv
|
||||
return wrapped
|
||||
|
||||
for fn in random.__all__:
|
||||
if fn in ("Random", "SystemRandom", "getstate", "setstate", "seed"):
|
||||
continue
|
||||
setattr(ConstantRandom, fn, random_wrap(fn))
|
||||
|
Loading…
Reference in New Issue
Block a user