Added a bit syntactic suggar for connections
This commit is contained in:
parent
3b5d9df5fe
commit
7429b6ca09
5 changed files with 75 additions and 37 deletions
33
control.cpp
33
control.cpp
|
@ -139,4 +139,37 @@ Control::get_rel_port_out(int idx)
|
|||
}
|
||||
}
|
||||
|
||||
void connect_btn(Control* lhs_ctrl, int lhs_i, Control* rhs_ctrl, int rhs_i)
|
||||
{
|
||||
BtnPortOut* out = lhs_ctrl->get_btn_port_out(lhs_i);
|
||||
BtnPortIn* in = rhs_ctrl->get_btn_port_in(rhs_i);
|
||||
|
||||
if (in && out)
|
||||
out->connect(in);
|
||||
else
|
||||
LOG("Couldn't establish connection between " << lhs_ctrl << " and " << rhs_ctrl);
|
||||
}
|
||||
|
||||
void connect_abs(Control* lhs_ctrl, int lhs_i, Control* rhs_ctrl, int rhs_i)
|
||||
{
|
||||
AbsPortOut* out = lhs_ctrl->get_abs_port_out(lhs_i);
|
||||
AbsPortIn* in = rhs_ctrl->get_abs_port_in(rhs_i);
|
||||
|
||||
if (in && out)
|
||||
out->connect(in);
|
||||
else
|
||||
LOG("Couldn't establish connection between " << lhs_ctrl << " and " << rhs_ctrl);
|
||||
}
|
||||
|
||||
void connect_rel(Control* lhs_ctrl, int lhs_i, Control* rhs_ctrl, int rhs_i)
|
||||
{
|
||||
RelPortOut* out = lhs_ctrl->get_rel_port_out(lhs_i);
|
||||
RelPortIn* in = rhs_ctrl->get_rel_port_in(rhs_i);
|
||||
|
||||
if (in && out)
|
||||
out->connect(in);
|
||||
else
|
||||
LOG("Couldn't establish connection between " << lhs_ctrl << " and " << rhs_ctrl);
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -210,6 +210,10 @@ public:
|
|||
virtual void update(float delta) {}
|
||||
};
|
||||
|
||||
void connect_btn(Control* lhs_ctrl, int lhs_i, Control* rhs, int rhs_i);
|
||||
void connect_abs(Control* lhs_ctrl, int lhs_i, Control* rhs, int rhs_i);
|
||||
void connect_rel(Control* lhs_ctrl, int lhs_i, Control* rhs, int rhs_i);
|
||||
|
||||
#endif
|
||||
|
||||
/* EOF */
|
||||
|
|
64
inputdrv.cpp
64
inputdrv.cpp
|
@ -36,6 +36,7 @@
|
|||
#include "autofire_button.hpp"
|
||||
#include "join_axis.hpp"
|
||||
#include "btn_to_abs.hpp"
|
||||
#include "throttle.hpp"
|
||||
#include "evdev_driver.hpp"
|
||||
#include "control.hpp"
|
||||
#include "inputdrv.hpp"
|
||||
|
@ -76,6 +77,7 @@ int main()
|
|||
uinput->add_abs(ABS_RX, -32767, 32767);
|
||||
uinput->add_abs(ABS_RY, -32767, 32767);
|
||||
uinput->add_abs(ABS_Z, -255, 255);
|
||||
uinput->add_abs(ABS_THROTTLE, 0, 32767);
|
||||
|
||||
uinput->finish();
|
||||
|
||||
|
@ -91,6 +93,7 @@ int main()
|
|||
JoinAxis* join_axis = new JoinAxis();
|
||||
BtnToAbs* btn_to_abs_x = new BtnToAbs();
|
||||
BtnToAbs* btn_to_abs_y = new BtnToAbs();
|
||||
Throttle* throttle = new Throttle();
|
||||
|
||||
controls.push_back(xbox360);
|
||||
controls.push_back(evdev);
|
||||
|
@ -104,36 +107,31 @@ int main()
|
|||
controls.push_back(join_axis);
|
||||
controls.push_back(btn_to_abs_x);
|
||||
controls.push_back(btn_to_abs_y);
|
||||
controls.push_back(throttle);
|
||||
|
||||
// ----------------------------
|
||||
|
||||
xbox360->get_abs_port_out(Xbox360Driver::XBOX360_AXIS_X1)
|
||||
->connect(abs_to_rel_x->get_abs_port_in(0));
|
||||
xbox360->get_abs_port_out(Xbox360Driver::XBOX360_AXIS_Y1)
|
||||
->connect(abs_to_rel_y->get_abs_port_in(0));
|
||||
connect_abs(xbox360, Xbox360Driver::XBOX360_AXIS_X1, abs_to_rel_x, 0);
|
||||
connect_abs(xbox360, Xbox360Driver::XBOX360_AXIS_Y1, abs_to_rel_y, 0);
|
||||
|
||||
xbox360->get_abs_port_out(Xbox360Driver::XBOX360_AXIS_X2)
|
||||
->connect(abs_to_rel_x2->get_abs_port_in(0));
|
||||
xbox360->get_abs_port_out(Xbox360Driver::XBOX360_AXIS_Y2)
|
||||
->connect(abs_to_rel_y2->get_abs_port_in(0));
|
||||
connect_abs(xbox360, Xbox360Driver::XBOX360_AXIS_X2, abs_to_rel_x2, 0);
|
||||
connect_abs(xbox360, Xbox360Driver::XBOX360_AXIS_Y2, abs_to_rel_y2, 0);
|
||||
|
||||
abs_to_rel_x->get_rel_port_out(0)
|
||||
->connect(uinput->get_rel_port_in(0));
|
||||
abs_to_rel_y->get_rel_port_out(0)
|
||||
->connect(uinput->get_rel_port_in(1));
|
||||
abs_to_rel_x2->get_rel_port_out(0)
|
||||
->connect(uinput->get_rel_port_in(2));
|
||||
abs_to_rel_y2->get_rel_port_out(0)
|
||||
->connect(uinput->get_rel_port_in(3));
|
||||
connect_rel(abs_to_rel_x, 0, uinput, 0);
|
||||
connect_rel(abs_to_rel_y, 0, uinput, 1);
|
||||
connect_rel(abs_to_rel_x2, 0, uinput, 2);
|
||||
connect_rel(abs_to_rel_y2, 0, uinput, 3);
|
||||
|
||||
connect_abs(evdev, 0, uinput, 3);
|
||||
connect_abs(evdev, 1, uinput, 4);
|
||||
|
||||
evdev->get_abs_port_out(0)
|
||||
->connect(uinput->get_abs_port_in(4));
|
||||
evdev->get_abs_port_out(0)
|
||||
evdev->get_abs_port_out(3)
|
||||
->connect(throttle->get_abs_port_in(0));
|
||||
throttle->get_abs_port_out(0)
|
||||
->connect(uinput->get_abs_port_in(5));
|
||||
|
||||
xbox360->get_btn_port_out(Xbox360Driver::XBOX360_BTN_A)
|
||||
->connect(uinput->get_btn_port_in(0));
|
||||
connect_btn(xbox360, Xbox360Driver::XBOX360_BTN_A,
|
||||
uinput, 0);
|
||||
xbox360->get_btn_port_out(Xbox360Driver::XBOX360_BTN_B)
|
||||
->connect(uinput->get_btn_port_in(1));
|
||||
xbox360->get_btn_port_out(Xbox360Driver::XBOX360_BTN_X)
|
||||
|
@ -153,19 +151,19 @@ int main()
|
|||
->connect(uinput->get_abs_port_in(2));
|
||||
|
||||
|
||||
xbox360->get_btn_port_out(Xbox360Driver::XBOX360_DPAD_LEFT)
|
||||
->connect(btn_to_abs_x->get_btn_port_in(0));
|
||||
xbox360->get_btn_port_out(Xbox360Driver::XBOX360_DPAD_RIGHT)
|
||||
->connect(btn_to_abs_x->get_btn_port_in(1));
|
||||
btn_to_abs_x->get_abs_port_out(0)
|
||||
->connect(uinput->get_abs_port_in(0));
|
||||
connect_btn(xbox360, Xbox360Driver::XBOX360_DPAD_LEFT,
|
||||
btn_to_abs_x, 0);
|
||||
connect_btn(xbox360, Xbox360Driver::XBOX360_DPAD_RIGHT,
|
||||
btn_to_abs_x, 1);
|
||||
connect_abs(btn_to_abs_x, 0, uinput, 0);
|
||||
|
||||
xbox360->get_btn_port_out(Xbox360Driver::XBOX360_DPAD_UP)
|
||||
->connect(btn_to_abs_y->get_btn_port_in(0));
|
||||
xbox360->get_btn_port_out(Xbox360Driver::XBOX360_DPAD_DOWN)
|
||||
->connect(btn_to_abs_y->get_btn_port_in(1));
|
||||
btn_to_abs_y->get_abs_port_out(0)
|
||||
->connect(uinput->get_abs_port_in(1));
|
||||
connect_btn(xbox360, Xbox360Driver::XBOX360_DPAD_UP,
|
||||
btn_to_abs_y, 0);
|
||||
|
||||
connect_btn(xbox360, Xbox360Driver::XBOX360_DPAD_DOWN,
|
||||
btn_to_abs_y, 1);
|
||||
connect_btn(btn_to_abs_y, 0,
|
||||
uinput, 1);
|
||||
|
||||
// ----------------------------
|
||||
|
||||
|
|
10
throttle.cpp
10
throttle.cpp
|
@ -42,13 +42,15 @@ Throttle::on_abs(AbsPortOut* port)
|
|||
|
||||
void
|
||||
Throttle::update(float delta)
|
||||
{
|
||||
value += abs_port_in[0]->out_port->get_state() * delta;
|
||||
{ // FIXME: crashes when nothing is connected
|
||||
value += abs_port_in[0]->out_port->get_state() * delta * 100.0f;
|
||||
|
||||
if (value < 0)
|
||||
value = 0;
|
||||
if (value < abs_port_out[0]->min_value)
|
||||
value = abs_port_out[0]->min_value;
|
||||
else if (value > abs_port_out[0]->max_value)
|
||||
value = abs_port_out[0]->max_value;
|
||||
|
||||
std::cout << "value: " << value << " -> " << abs_port_in[0]->out_port->get_state() << std::endl;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -36,6 +36,7 @@ private:
|
|||
|
||||
public:
|
||||
Throttle();
|
||||
std::string get_name() const { return "Throttle"; }
|
||||
|
||||
void update(float delta);
|
||||
void on_abs(AbsPortOut* port);
|
||||
|
|
Loading…
Add table
Reference in a new issue