text: #pragma once
  #include <common.hpp>
  
  
  namespace rack {
  namespace engine {
  
  
  struct Light {
  	/** The square of the brightness.
  	Unstable API. Use set/getBrightness().
  	*/
  	float value = 0.f;
  
  	/** Sets the brightness immediately with no light decay. */
  	void setBrightness(float brightness) {
  		value = brightness;
  	}
  
  	float getBrightness() {
  		return value;
  	}
  
  	/** Emulates light decay with slow fall but immediate rise.
  	Default lambda set to roughly 2 screen frames.
  	*/
  	void setBrightnessSmooth(float brightness, float deltaTime, float lambda = 30.f) {
  		if (brightness < value) {
  			// Fade out light
  			value += (brightness - value) * lambda * deltaTime;
  		}
  		else {
  			// Immediately illuminate light
  			value = brightness;
  		}
  	}
  	/** DEPRECATED Alias for setBrightnessSmooth() */
  	void setSmoothBrightness(float brightness, float deltaTime) {
  		setBrightnessSmooth(brightness, deltaTime);
  	}
  
  	/** Use `setBrightnessSmooth(brightness, sampleTime * frames)` instead. */
  	DEPRECATED void setBrightnessSmooth(float brightness, int frames = 1) {
  		setBrightnessSmooth(brightness, frames / 44100.f);
  	}
  };
  
  
  } // namespace engine
  } // namespace rack
  