lsnes/ui/input/snes.cpp
2013-05-03 17:47:34 +03:00

184 lines
5.3 KiB
C++
Executable file

int16_t SnesGamepad::poll(unsigned n) {
switch((SNES::Input::JoypadID)n) {
case SNES::Input::JoypadID::Up: return up.poll() & !down.poll();
case SNES::Input::JoypadID::Down: return down.poll() & !up.poll();
case SNES::Input::JoypadID::Left: return left.poll() & !right.poll();
case SNES::Input::JoypadID::Right: return right.poll() & !left.poll();
case SNES::Input::JoypadID::B: return b.poll() | bTurbo.poll();
case SNES::Input::JoypadID::A: return a.poll() | aTurbo.poll();
case SNES::Input::JoypadID::Y: return y.poll() | yTurbo.poll();
case SNES::Input::JoypadID::X: return x.poll() | xTurbo.poll();
case SNES::Input::JoypadID::L: return l.poll() | lTurbo.poll();
case SNES::Input::JoypadID::R: return r.poll() | rTurbo.poll();
case SNES::Input::JoypadID::Select: return select.poll();
case SNES::Input::JoypadID::Start: return start.poll();
}
return 0;
}
SnesGamepad::SnesGamepad(const string &name, bool defaultBindings) {
this->name = name;
up.name = "Up", down.name = "Down", left.name = "Left", right.name = "Right";
b.name = "B", a.name = "A", y.name = "Y", x.name = "X";
l.name = "L", r.name = "R", select.name = "Select", start.name = "Start";
bTurbo.name = "Turbo B", aTurbo.name = "Turbo A", yTurbo.name = "Turbo Y", xTurbo.name = "Turbo X";
lTurbo.name = "Turbo L", rTurbo.name = "Turbo R";
if(defaultBindings) {
up.mapping = "KB0::Up";
down.mapping = "KB0::Down";
left.mapping = "KB0::Left";
right.mapping = "KB0::Right";
b.mapping = "KB0::Z";
a.mapping = "KB0::X";
y.mapping = "KB0::A";
x.mapping = "KB0::S";
l.mapping = "KB0::D";
r.mapping = "KB0::C";
select.mapping = "KB0::Apostrophe";
start.mapping = "KB0::Return";
}
append(up, down, left, right, b, a, y, x, l, r, select, start);
append(bTurbo, aTurbo, yTurbo, xTurbo, lTurbo, rTurbo);
}
//
int16_t SnesMouse::poll(unsigned n) {
switch((SNES::Input::MouseID)n) {
case SNES::Input::MouseID::X: return xaxis.poll();
case SNES::Input::MouseID::Y: return yaxis.poll();
case SNES::Input::MouseID::Left: return left.poll();
case SNES::Input::MouseID::Right: return right.poll();
}
return 0;
}
SnesMouse::SnesMouse(const string &name, bool defaultBindings) {
this->name = name;
xaxis.name = "X-axis", yaxis.name = "Y-axis";
left.name = "Left button", right.name = "Right button";
if(defaultBindings) {
xaxis.mapping = "MS0::Xaxis";
yaxis.mapping = "MS0::Yaxis";
left.mapping = "MS0::Button0";
right.mapping = "MS0::Button2";
}
append(xaxis, yaxis, left, right);
}
//
int16_t SnesSuperScope::poll(unsigned n) {
switch((SNES::Input::SuperScopeID)n) {
case SNES::Input::SuperScopeID::X: return xaxis.poll();
case SNES::Input::SuperScopeID::Y: return yaxis.poll();
case SNES::Input::SuperScopeID::Trigger: return trigger.poll();
case SNES::Input::SuperScopeID::Cursor: return cursor.poll();
case SNES::Input::SuperScopeID::Turbo: return turbo.poll();
case SNES::Input::SuperScopeID::Pause: return pause.poll();
}
return 0;
}
SnesSuperScope::SnesSuperScope(const string &name, bool defaultBindings) {
this->name = name;
xaxis.name = "X-axis", yaxis.name = "Y-axis";
trigger.name = "Trigger", cursor.name = "Cursor", turbo.name = "Turbo", pause.name = "Pause";
if(defaultBindings) {
xaxis.mapping = "MS0::Xaxis";
yaxis.mapping = "MS0::Yaxis";
trigger.mapping = "MS0::Button0";
cursor.mapping = "MS0::Button2";
turbo.mapping = "KB0::T";
pause.mapping = "KB0::P";
}
append(xaxis, yaxis, trigger, cursor, turbo, pause);
}
//
int16_t SnesJustifier::poll(unsigned n) {
switch((SNES::Input::JustifierID)n) {
case SNES::Input::JustifierID::X: return xaxis.poll();
case SNES::Input::JustifierID::Y: return yaxis.poll();
case SNES::Input::JustifierID::Trigger: return trigger.poll();
case SNES::Input::JustifierID::Start: return start.poll();
}
return 0;
}
SnesJustifier::SnesJustifier(const string &name, bool defaultBindings) {
this->name = name;
xaxis.name = "X-axis", yaxis.name = "Y-axis";
trigger.name = "Trigger", start.name = "Start";
if(defaultBindings) {
xaxis.mapping = "MS0::Xaxis";
yaxis.mapping = "MS0::Yaxis";
trigger.mapping = "MS0::Button0";
start.mapping = "MS0::Button2";
}
append(xaxis, yaxis, trigger, start);
}
//
SnesPort1Input::SnesPort1Input():
gamepad("Gamepad", true),
multitap1("Multitap - Port 1", false),
multitap2("Multitap - Port 2", false),
multitap3("Multitap - Port 3", false),
multitap4("Multitap - Port 4", false),
mouse("Mouse", true)
{
name = "Controller Port 1";
append(gamepad);
append(multitap1);
append(multitap2);
append(multitap3);
append(multitap4);
append(mouse);
}
//
SnesPort2Input::SnesPort2Input():
gamepad("Gamepad", false),
multitap1("Multitap - Port 1", false),
multitap2("Multitap - Port 2", false),
multitap3("Multitap - Port 3", false),
multitap4("Multitap - Port 4", false),
mouse("Mouse", true),
superScope("Super Scope", true),
justifier1("Justifier - Port 1", true),
justifier2("Justifier - Port 2", false)
{
name = "Controller Port 2";
append(gamepad);
append(multitap1);
append(multitap2);
append(multitap3);
append(multitap4);
append(mouse);
append(superScope);
append(justifier1);
append(justifier2);
}
//
SnesInput::SnesInput() {
name = "SNES";
append(port1, port2);
}