// This effect Copyright (C) 2004 and later Cockos Incorporated
// License: GPL - http://www.gnu.org/licenses/gpl.html
desc:slider controller
slider1:1<1,30,1>start/stop trigger
slider2:1.1<1,100,0.1>effect.slider to control
slider3:0<-1000,1000,1>,start value
slider4:1<-1000,1000,1>,end value
slider5:1000<1,10000,100>transition time (ms)
slider6:0<0,3,1{one shot,loop,pingpong,toggle (instant)}>transition mode
slider7:0<0,1,1{linear,sine}>transition motion

@init
pos=0;
active=0;
dir=1;

@slider
trigmask=2^(slider1|0);
control=slider2;
startv=slider3;
endv=slider4;
dpos=1000/(srate*slider5);
loopmode=slider6;
motion=slider7;

@serialize
file_var(0,active);

@block

trigger & trigmask ? (
  loopmode == 3 ? 
  (
     active=0;
     t=get_slider(control);
     set_slider(control,abs(t-endv) < abs(t-startv) ? startv : endv);
  ) 
  : 
  (
    loopmode ? active = !active : active=1;
  );
  pos=0;
);

active ? (  
  pos >=1 ? pos=1;
  pos <= 0 ? 
  (
    loopmode==2?dir=-dir;
    pos=0;
  );

  v=startv + (endv-startv)*(motion == 1 ? sin(pos*$pi*0.5) : pos);
  set_slider(control,v);

  pos >= 1 ? (
    loopmode == 1 ? pos=0 : (loopmode == 2 ? dir=-dir :  active=0);
  );
  loopmode == 2 ? 
    pos += samplesblock*dpos*dir
    :
    pos += samplesblock*dpos;
);
