lighttroupe/luz

View on GitHub
engine/plugins/variable_inputs/button-pair-spring.luz.rb

Summary

Maintainability
A
1 hr
Test Coverage
class VariableInputButtonPairSpring < VariableInput
    title                "Button Pair Spring"
    description "Activation rises when one button is pressed, lowers when a different button is pressed, and otherwise returns to chosen spring value."

    categories :button

    setting 'button_on', :button, :summary => '% on'
    setting :on_time, :timespan
    setting 'button_off', :button, :summary => '% off'
    setting :off_time, :timespan

    setting 'spring_value', :float, :simple => true, :range => 0.0..1.0, :default => 0.5..1.0

    def value
        return spring_value if first_frame?

        on = $engine.button_down?(button_on)
        off = $engine.button_down?(button_off)

        if on && off
            last_value
        elsif on
            return 1.0 if on_time.instant?
            last_value + ($env[:frame_time_delta] / on_time.to_seconds)
        elsif off
            return 0.0 if off_time.instant?
            last_value - ($env[:frame_time_delta] / off_time.to_seconds)
        else
            delta = (spring_value - last_value)
            return spring_value if delta < 0.001

            last_value + (delta * 0.9)
        end
    end
end