update: added 'stage' method to actionflow
This commit is contained in:
@@ -21,8 +21,7 @@ class ActionFlow:
|
||||
self.actions: list[type[Action]] = []
|
||||
self.on: list[bool] = []
|
||||
|
||||
def do(self, action: type[Action], force=False):
|
||||
try:
|
||||
def queue(self, action: type[Action]):
|
||||
name = action.__name__
|
||||
index = self.indices.get(name)
|
||||
assert index is not None, "Action '%s' is not registered" % name
|
||||
@@ -30,8 +29,12 @@ class ActionFlow:
|
||||
if self.on[index]: raise Unavailable(name)
|
||||
if self.on[index] is None: raise NotAllowed(name)
|
||||
self.on[index] = bool(self.actions[index].prepare())
|
||||
except Exception as e:
|
||||
if force: raise e
|
||||
|
||||
def stage(self, *actions: type[Action]):
|
||||
for Actor in actions:
|
||||
try: self.queue(Actor)
|
||||
except: pass
|
||||
self.react()
|
||||
|
||||
def react(self):
|
||||
while any(self.on):
|
||||
|
||||
Reference in New Issue
Block a user