#pragma once #include "common.hpp" #include "engine/Module.hpp" #include "engine/Cable.hpp" #include namespace rack { struct Engine { /** Plugins should not manipulate other modules or cables unless that is the entire purpose of the module. Your plugin needs to have a clear purpose for manipulating other modules and cables and must be done with a good UX. */ std::vector modules; std::vector cables; bool paused = false; int threadCount; struct Internal; Internal *internal; Engine(); ~Engine(); /** Starts engine thread */ void start(); /** Stops engine thread */ void stop(); /** Does not transfer pointer ownership */ void addModule(Module *module); void removeModule(Module *module); void resetModule(Module *module); void randomizeModule(Module *module); void bypassModule(Module *module, bool bypass); /** Does not transfer pointer ownership */ void addCable(Cable *cable); void removeCable(Cable *cable); void setParam(Module *module, int paramId, float value); float getParam(Module *module, int paramId); void setSmoothParam(Module *module, int paramId, float value); float getSmoothParam(Module *module, int paramId); int getNextModuleId(); void setSampleRate(float sampleRate); float getSampleRate(); /** Returns the inverse of the current sample rate */ float getSampleTime(); }; } // namespace rack