From 5b5e6c697ab366905ecd3268cd391f253d2b30c0 Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 20 Sep 2025 12:14:11 +0200 Subject: [PATCH] Implemented time stepping --- src/engine.py | 6 ++---- src/models.py | 22 ++++++++++++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/engine.py b/src/engine.py index 32fe52c..e4cffaa 100644 --- a/src/engine.py +++ b/src/engine.py @@ -45,7 +45,6 @@ class Engine: def next(self, step_size: Decimal): """Calculate light values for next step in time. Step size in seconds.""" - prev_time = self.render_time self.render_time += step_size for t in self.tracks: @@ -53,9 +52,8 @@ class Engine: continue # Move keyframes forward - while step_size > 0: - # TODO - pass + t.step(step_size) + # TODO: Interpolate values def propagate(self): """Forward new fixture states to APIs.""" diff --git a/src/models.py b/src/models.py index c5a9ef2..7b61cef 100644 --- a/src/models.py +++ b/src/models.py @@ -104,17 +104,17 @@ class EngineFixture: """Set value of fixture based on parameter.""" match parameter: case Parameter.ON: - self.on = value + self.on = value # type: ignore case Parameter.HUE: - self.hue = value + self.hue = value # type: ignore case Parameter.BRIGHTNESS: - self.brightness = value + self.brightness = value # type: ignore case Parameter.SATURATION: - self.saturation = value + self.saturation = value # type: ignore case Parameter.TEMPERATURE: - self.temperature = value + self.temperature = value # type: ignore case Parameter.TOPIC: - self.topic = value + self.topic = value # type: ignore case _: logging.warning( f"Unknown parameter [{parameter}] with value [{value}] for fixture id [{self.fixture.id}]." @@ -234,6 +234,16 @@ class EngineTrack: prev_time = curr_time curr_time = next.time + def step(self, step_size: Decimal): + """Step keyframes forward by given step.""" + while self.next and step_size > 0: + self.next.delta -= step_size + if self.next.delta >= 0: + return + + self.previous = self.keyframes.pop(0) + step_size = self.previous.delta.copy_abs() + @dataclass_json @dataclass