Added Super Metroid support (#46)

Varia Randomizer based implementation
LttPClient -> SNIClient
This commit is contained in:
lordlou
2021-11-12 08:00:11 -05:00
committed by GitHub
parent 61ae51b30c
commit 77ec8d4141
141 changed files with 43859 additions and 106 deletions

View File

@@ -0,0 +1,63 @@
# the caching decorator for helpers functions
class VersionedCache(object):
__slots__ = ( 'cache', 'masterCache', 'nextSlot', 'size')
def __init__(self):
self.cache = []
self.masterCache = {}
self.nextSlot = 0
self.size = 0
def reset(self):
# reinit the whole cache
self.masterCache = {}
self.update(0)
def update(self, newKey):
cache = self.masterCache.get(newKey, None)
if cache is None:
cache = [ None ] * self.size
self.masterCache[newKey] = cache
self.cache = cache
def decorator(self, func):
return self._decorate(func.__name__, self._new_slot(), func)
# for lambdas
def ldeco(self, func):
return self._decorate(func.__code__, self._new_slot(), func)
def _new_slot(self):
slot = self.nextSlot
self.nextSlot += 1
self.size += 1
return slot
def _decorate(self, name, slot, func):
def _decorator(arg):
#ret = self.cache[slot]
#if ret is not None:
# return ret
#else:
ret = func(arg)
# self.cache[slot] = ret
return ret
return _decorator
Cache = VersionedCache()
class RequestCache(object):
def __init__(self):
self.results = {}
def request(self, request, *args):
return ''.join([request] + [str(arg) for arg in args])
def store(self, request, result):
self.results[request] = result
def get(self, request):
return self.results[request] if request in self.results else None
def reset(self):
self.results.clear()