void
FGInput::update (double dt)
{
- _update_keyboard(dt);
+ _update_keyboard();
_update_joystick(dt);
- _update_mouse(dt);
+ _update_mouse();
}
void
_init_button(axis_node->getChild("high"), a.high, "high");
a.high_threshold = axis_node->getDoubleValue("high-threshold", 0.9);
+ a.interval_sec = axis_node->getDoubleValue("interval-sec",0.0);
+ a.last_dt = 0.0;
}
//
_init_button(js_node->getChild("button", j),
_joystick_bindings[i].buttons[j],
buf);
-
+
+ // get interval-sec property
+ button &b = _joystick_bindings[i].buttons[j];
+ const SGPropertyNode * button_node = js_node->getChild("button", j);
+ if (button_node != 0) {
+ b.interval_sec = button_node->getDoubleValue("interval-sec",0.0);
+ b.last_dt = 0.0;
+ }
}
js->setMinRange(minRange);
void
-FGInput::_update_keyboard (double dt)
+FGInput::_update_keyboard ()
{
// no-op
}
void
FGInput::_update_joystick (double dt)
{
- static double _last_dt = 0.0;
int modifiers = FG_MOD_NONE; // FIXME: any way to get the real ones?
- int i, j, buttons;
+ int buttons;
// float js_val, diff;
float axis_values[MAX_JOYSTICK_AXES];
- _last_dt += dt;
+ int i;
+ int j;
for ( i = 0; i < MAX_JOYSTICKS; i++) {
}
// do we have to emulate axis buttons?
- if (_last_dt > 0.05) {
+ a.last_dt += dt;
+ if(a.last_dt >= a.interval_sec) {
if (a.low.bindings[modifiers].size())
_update_button(_joystick_bindings[i].axes[j].low,
modifiers,
axis_values[j] < a.low_threshold,
-1, -1);
-
+
if (a.high.bindings[modifiers].size())
_update_button(_joystick_bindings[i].axes[j].high,
modifiers,
axis_values[j] > a.high_threshold,
-1, -1);
+ a.last_dt -= a.interval_sec;
}
}
// Fire bindings for the buttons.
- if (_last_dt > 0.05) {
- for (j = 0; j < _joystick_bindings[i].nbuttons; j++) {
+ for (j = 0; j < _joystick_bindings[i].nbuttons; j++) {
+ button &b = _joystick_bindings[i].buttons[j];
+ b.last_dt += dt;
+ if(b.last_dt >= b.interval_sec) {
_update_button(_joystick_bindings[i].buttons[j],
modifiers,
(buttons & (1 << j)) > 0,
-1, -1);
+ b.last_dt -= b.interval_sec;
}
}
}
-
- if (_last_dt > 0.05) {
- while(_last_dt >= 0.05)
- _last_dt -= 0.05;
- }
}
void
-FGInput::_update_mouse (double dt)
+FGInput::_update_mouse ()
{
mouse &m = _mouse_bindings[0];
int mode = m.mode_node->getIntValue();
SG_LOG(SG_INPUT, SG_DEBUG, "Reading all bindings");
vector<SGPropertyNode_ptr> bindings = node->getChildren("binding");
for (unsigned int i = 0; i < bindings.size(); i++) {
- if (bindings[i]->nChildren() > 0) {
- SG_LOG(SG_INPUT, SG_DEBUG, "Reading binding "
- << bindings[i]->getStringValue("command"));
- binding_list[modifiers].push_back(new FGBinding(bindings[i]));
- }
+ SG_LOG(SG_INPUT, SG_DEBUG, "Reading binding "
+ << bindings[i]->getStringValue("command"));
+ binding_list[modifiers].push_back(new FGBinding(bindings[i]));
}
// Read nested bindings for modifiers