SmoothControl::SmoothControl():
value(0),
- paired_ctrl(0)
+ paired_ctrl(0),
+ dead_zone(0.1),
+ threshold(0.9)
{ }
SmoothControl::SmoothControl(const ControlSource &s):
Control(s),
value(0),
- paired_ctrl(0)
+ paired_ctrl(0),
+ dead_zone(0.1),
+ threshold(0.9)
{ }
SmoothControl::SmoothControl(Device &d, ControlSrcType t, unsigned i):
Control(d, t, i),
value(0),
- paired_ctrl(0)
+ paired_ctrl(0),
+ dead_zone(0.1),
+ threshold(0.9)
{ }
-SmoothControl &SmoothControl::operator=(const SmoothControl &sc)
+SmoothControl::~SmoothControl()
{
- Control::operator=(sc);
+ pair(0);
+}
- return *this;
+void SmoothControl::set_dead_zone(float d)
+{
+ dead_zone=d;
}
-SmoothControl::~SmoothControl()
+void SmoothControl::set_threshold(float t)
{
- pair(0);
+ threshold=t;
}
void SmoothControl::pair(SmoothControl *ctrl)
on_motion(0, -value);
}
-void SmoothControl::on_motion(float v, float)
+void SmoothControl::on_motion(float v, float r)
{
- value=v;
+ if(v<-threshold)
+ value=-1;
+ else if(v>threshold)
+ value=1;
+ else if(v<-dead_zone)
+ value=(v+dead_zone)/(threshold-dead_zone);
+ else if(v>dead_zone)
+ value=(v-dead_zone)/(threshold-dead_zone);
+ else
+ value=0;
+
signal_motion.emit(value);
-
- if(paired_ctrl && paired_ctrl->get_value()!=-value)
- paired_ctrl->on_motion(-value, -value-paired_ctrl->get_value());
+
+ if(paired_ctrl && (v>0 || (v==0 && paired_ctrl->value!=0)))
+ paired_ctrl->on_motion(-v, -r);
}
} // namespace Input