From 51e723e688a4bdead12bb56d5e6dc59c5d5aef88 Mon Sep 17 00:00:00 2001
From: Ben Connors <benconnors@outlook.com>
Date: Wed, 30 Oct 2019 21:29:03 -0400
Subject: Implement most of run mode

- Audio doesn't play the past the first time
- Advance is a bit late
---
 interface/render.py | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

(limited to 'interface/render.py')

diff --git a/interface/render.py b/interface/render.py
index be7d770..7f8d3f1 100644
--- a/interface/render.py
+++ b/interface/render.py
@@ -44,11 +44,11 @@ class Renderer:
         with self._lock:
             self._running = False
 
-    def set_functions(self, f):
+    def set_functions(self, *args):
         with self._lock:
             if self._running:
                 raise ValueError("Can't change while running")
-            self._functions, self._data = [i[0] for i in f], [i[1] for i in f]
+            self._functions, self._data = [i[0] for i in args], [i[1] for i in args]
 
     @property
     def time(self):
@@ -74,7 +74,7 @@ class Renderer:
                 next_ap = []
                 
                 if self._callback is not None:
-                    self._callback(t, self._values)
+                    self._callback(self._current, self._values)
 
                 ## FIXME: Cleanup finished audio players?
                 ## FIXME: Handle audio fades and jumps
@@ -118,6 +118,20 @@ class Renderer:
             ## END locked block
             time.sleep(max(0, next_t - time.monotonic()))
 
+    def advance(self, *args):
+        with self._lock:
+            if self._run_thread is None:
+                raise ValueError("Not running")
+            for a in args:
+                if isinstance(a, int):
+                    p = None
+                else: 
+                    a, p = a
+                f = self._functions[a]
+                t = int(1000*self._current)
+                d = f.advance(t, self._data[a], n=p)
+                _, _, self._data[a] = f.render(t, d)
+
     def __init__(self, w: Workspace, w_lock: threading.RLock, output, callback=None):
         self.output = output
         self.w = w
-- 
cgit v1.2.3