Implemented time stepping

This commit is contained in:
Maximilian Giller 2025-09-20 12:14:11 +02:00
parent f704ae67e0
commit 5b5e6c697a
2 changed files with 18 additions and 10 deletions

View file

@ -45,7 +45,6 @@ class Engine:
def next(self, step_size: Decimal): def next(self, step_size: Decimal):
"""Calculate light values for next step in time. Step size in seconds.""" """Calculate light values for next step in time. Step size in seconds."""
prev_time = self.render_time
self.render_time += step_size self.render_time += step_size
for t in self.tracks: for t in self.tracks:
@ -53,9 +52,8 @@ class Engine:
continue continue
# Move keyframes forward # Move keyframes forward
while step_size > 0: t.step(step_size)
# TODO # TODO: Interpolate values
pass
def propagate(self): def propagate(self):
"""Forward new fixture states to APIs.""" """Forward new fixture states to APIs."""

View file

@ -104,17 +104,17 @@ class EngineFixture:
"""Set value of fixture based on parameter.""" """Set value of fixture based on parameter."""
match parameter: match parameter:
case Parameter.ON: case Parameter.ON:
self.on = value self.on = value # type: ignore
case Parameter.HUE: case Parameter.HUE:
self.hue = value self.hue = value # type: ignore
case Parameter.BRIGHTNESS: case Parameter.BRIGHTNESS:
self.brightness = value self.brightness = value # type: ignore
case Parameter.SATURATION: case Parameter.SATURATION:
self.saturation = value self.saturation = value # type: ignore
case Parameter.TEMPERATURE: case Parameter.TEMPERATURE:
self.temperature = value self.temperature = value # type: ignore
case Parameter.TOPIC: case Parameter.TOPIC:
self.topic = value self.topic = value # type: ignore
case _: case _:
logging.warning( logging.warning(
f"Unknown parameter [{parameter}] with value [{value}] for fixture id [{self.fixture.id}]." f"Unknown parameter [{parameter}] with value [{value}] for fixture id [{self.fixture.id}]."
@ -234,6 +234,16 @@ class EngineTrack:
prev_time = curr_time prev_time = curr_time
curr_time = next.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_json
@dataclass @dataclass