Add simulation decorator

This commit is contained in:
Carson Katri 2022-12-01 09:07:07 -05:00
commit 86023a2bb5
4 changed files with 53 additions and 0 deletions

25
api/static/simulation.py Normal file
View file

@ -0,0 +1,25 @@
import inspect
import typing
class SimulationInput:
class DeltaTime: pass
class ElapsedTime: pass
def simulation(block: typing.Callable[typing.Any, 'Geometry']):
"""
Create a simulation input/output block.
> Only available in the `geometry-node-simulation` branch of Blender 3.5.
"""
def wrapped(geometry: 'Geometry', *args, **kwargs):
from geometry_script import simulation_input, simulation_output
simulation_in = simulation_input(geometry=geometry)
signature = inspect.signature(block)
for key, value in signature.parameters.items():
match value.annotation:
case SimulationInput.DeltaTime:
kwargs[key] = simulation_in.delta_time
case SimulationInput.ElapsedTime:
kwargs[key] = simulation_in.elapsed_time
return simulation_output(geometry=block(simulation_in.geometry, *args, **kwargs)).geometry
return wrapped