Added camera joystick bindings (#653)

master
krzys-h 2016-05-28 13:50:41 +02:00
parent 942f746a21
commit ebc2e6e26c
8 changed files with 140 additions and 136 deletions

View File

@ -170,10 +170,31 @@ void CInput::EventProcess(Event& event)
if (GetJoyAxisBinding(JOY_AXIS_SLOT_Z).invert) if (GetJoyAxisBinding(JOY_AXIS_SLOT_Z).invert)
m_joyMotion.z *= -1.0f; m_joyMotion.z *= -1.0f;
} }
if (data->axis == GetJoyAxisBinding(JOY_AXIS_SLOT_CAM_X).axis)
{
m_joyMotionCam.x = -Math::Neutral(data->value / 32768.0f, m_joystickDeadzone);
if (GetJoyAxisBinding(JOY_AXIS_SLOT_CAM_X).invert)
m_joyMotionCam.x *= -1.0f;
}
if (data->axis == GetJoyAxisBinding(JOY_AXIS_SLOT_CAM_Y).axis)
{
m_joyMotionCam.y = -Math::Neutral(data->value / 32768.0f, m_joystickDeadzone);
if (GetJoyAxisBinding(JOY_AXIS_SLOT_CAM_Y).invert)
m_joyMotionCam.y *= -1.0f;
}
if (data->axis == GetJoyAxisBinding(JOY_AXIS_SLOT_CAM_Z).axis)
{
m_joyMotionCam.z = -Math::Neutral(data->value / 32768.0f, m_joystickDeadzone);
if (GetJoyAxisBinding(JOY_AXIS_SLOT_CAM_Z).invert)
m_joyMotionCam.z *= -1.0f;
}
} }
event.motionInput = Math::Clamp(m_joyMotion + m_keyMotion, Math::Vector(-1.0f, -1.0f, -1.0f), Math::Vector(1.0f, 1.0f, 1.0f)); event.motionInput = Math::Clamp(m_joyMotion + m_keyMotion, Math::Vector(-1.0f, -1.0f, -1.0f), Math::Vector(1.0f, 1.0f, 1.0f));
event.cameraInput = m_cameraKeyMotion; event.cameraInput = Math::Clamp(m_joyMotionCam + m_cameraKeyMotion, Math::Vector(-1.0f, -1.0f, -1.0f), Math::Vector(1.0f, 1.0f, 1.0f));
} }
void CInput::MouseMove(Math::IntPoint pos) void CInput::MouseMove(Math::IntPoint pos)
@ -197,6 +218,7 @@ void CInput::ResetKeyStates()
m_keyMotion = Math::Vector(0.0f, 0.0f, 0.0f); m_keyMotion = Math::Vector(0.0f, 0.0f, 0.0f);
m_joyMotion = Math::Vector(0.0f, 0.0f, 0.0f); m_joyMotion = Math::Vector(0.0f, 0.0f, 0.0f);
m_cameraKeyMotion = Math::Vector(0.0f, 0.0f, 0.0f); m_cameraKeyMotion = Math::Vector(0.0f, 0.0f, 0.0f);
m_joyMotionCam = Math::Vector(0.0f, 0.0f, 0.0f);
for(int i=0; i<INPUT_SLOT_MAX; i++) for(int i=0; i<INPUT_SLOT_MAX; i++)
m_keyPresses[i] = false; m_keyPresses[i] = false;
} }
@ -255,6 +277,9 @@ void CInput::SetDefaultInputBindings()
m_joyAxisBindings[JOY_AXIS_SLOT_X].axis = 0; m_joyAxisBindings[JOY_AXIS_SLOT_X].axis = 0;
m_joyAxisBindings[JOY_AXIS_SLOT_Y].axis = 1; m_joyAxisBindings[JOY_AXIS_SLOT_Y].axis = 1;
m_joyAxisBindings[JOY_AXIS_SLOT_Z].axis = 2; m_joyAxisBindings[JOY_AXIS_SLOT_Z].axis = 2;
m_joyAxisBindings[JOY_AXIS_SLOT_CAM_X].axis = -1;
m_joyAxisBindings[JOY_AXIS_SLOT_CAM_Y].axis = -1;
m_joyAxisBindings[JOY_AXIS_SLOT_CAM_Z].axis = -1;
} }
void CInput::SetInputBinding(InputSlot slot, InputBinding binding) void CInput::SetInputBinding(InputSlot slot, InputBinding binding)

View File

@ -148,6 +148,8 @@ private:
Math::Vector m_keyMotion; Math::Vector m_keyMotion;
//! Motion vector set by joystick axes //! Motion vector set by joystick axes
Math::Vector m_joyMotion; Math::Vector m_joyMotion;
//! Camera motion vector set by joystick axes
Math::Vector m_joyMotionCam;
//! Camera controls on the numpad //! Camera controls on the numpad
Math::Vector m_cameraKeyMotion; Math::Vector m_cameraKeyMotion;

View File

@ -251,13 +251,19 @@ void InitializeEventTypeTexts()
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK]= "EVENT_INTERFACE_JOYSTICK"; EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK]= "EVENT_INTERFACE_JOYSTICK";
EVENT_TYPE_TEXT[EVENT_INTERFACE_SOLUCE] = "EVENT_INTERFACE_SOLUCE"; EVENT_TYPE_TEXT[EVENT_INTERFACE_SOLUCE] = "EVENT_INTERFACE_SOLUCE";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_DEADZONE]= "EVENT_INTERFACE_JOYSTICK_DEADZONE";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_X]= "EVENT_INTERFACE_JOYSTICK_X"; EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_X]= "EVENT_INTERFACE_JOYSTICK_X";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_Y]= "EVENT_INTERFACE_JOYSTICK_Y"; EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_Y]= "EVENT_INTERFACE_JOYSTICK_Y";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_Z]= "EVENT_INTERFACE_JOYSTICK_Z"; EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_Z]= "EVENT_INTERFACE_JOYSTICK_Z";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_CAM_X]= "EVENT_INTERFACE_JOYSTICK_CAM_X";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_CAM_Y]= "EVENT_INTERFACE_JOYSTICK_CAM_Y";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_CAM_Z]= "EVENT_INTERFACE_JOYSTICK_CAM_Z";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_X_INVERT]= "EVENT_INTERFACE_JOYSTICK_X_INVERT"; EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_X_INVERT]= "EVENT_INTERFACE_JOYSTICK_X_INVERT";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_Y_INVERT]= "EVENT_INTERFACE_JOYSTICK_Y_INVERT"; EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_Y_INVERT]= "EVENT_INTERFACE_JOYSTICK_Y_INVERT";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_Z_INVERT]= "EVENT_INTERFACE_JOYSTICK_Z_INVERT"; EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_Z_INVERT]= "EVENT_INTERFACE_JOYSTICK_Z_INVERT";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_DEADZONE]= "EVENT_INTERFACE_JOYSTICK_DEADZONE"; EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_CAM_X_INVERT]= "EVENT_INTERFACE_JOYSTICK_CAM_X_INVERT";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_CAM_Y_INVERT]= "EVENT_INTERFACE_JOYSTICK_CAM_Y_INVERT";
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK_CAM_Z_INVERT]= "EVENT_INTERFACE_JOYSTICK_CAM_Z_INVERT";
EVENT_TYPE_TEXT[EVENT_INTERFACE_GLINTl] = "EVENT_INTERFACE_GLINTl"; EVENT_TYPE_TEXT[EVENT_INTERFACE_GLINTl] = "EVENT_INTERFACE_GLINTl";
EVENT_TYPE_TEXT[EVENT_INTERFACE_GLINTr] = "EVENT_INTERFACE_GLINTr"; EVENT_TYPE_TEXT[EVENT_INTERFACE_GLINTr] = "EVENT_INTERFACE_GLINTr";

View File

@ -284,24 +284,30 @@ enum EventType
EVENT_INTERFACE_JOYSTICK= 560, EVENT_INTERFACE_JOYSTICK= 560,
EVENT_INTERFACE_SOLUCE = 561, EVENT_INTERFACE_SOLUCE = 561,
EVENT_INTERFACE_JOYSTICK_X = 562, EVENT_INTERFACE_JOYSTICK_DEADZONE = 562,
EVENT_INTERFACE_JOYSTICK_Y = 563, EVENT_INTERFACE_JOYSTICK_X = 563,
EVENT_INTERFACE_JOYSTICK_Z = 564, EVENT_INTERFACE_JOYSTICK_Y = 564,
EVENT_INTERFACE_JOYSTICK_X_INVERT = 565, EVENT_INTERFACE_JOYSTICK_Z = 565,
EVENT_INTERFACE_JOYSTICK_Y_INVERT = 566, EVENT_INTERFACE_JOYSTICK_CAM_X = 566,
EVENT_INTERFACE_JOYSTICK_Z_INVERT = 567, EVENT_INTERFACE_JOYSTICK_CAM_Y = 567,
EVENT_INTERFACE_JOYSTICK_DEADZONE = 568, EVENT_INTERFACE_JOYSTICK_CAM_Z = 568,
EVENT_INTERFACE_JOYSTICK_X_INVERT = 569,
EVENT_INTERFACE_JOYSTICK_Y_INVERT = 570,
EVENT_INTERFACE_JOYSTICK_Z_INVERT = 571,
EVENT_INTERFACE_JOYSTICK_CAM_X_INVERT = 572,
EVENT_INTERFACE_JOYSTICK_CAM_Y_INVERT = 573,
EVENT_INTERFACE_JOYSTICK_CAM_Z_INVERT = 574,
EVENT_INTERFACE_GLINTl = 570, EVENT_INTERFACE_GLINTl = 590,
EVENT_INTERFACE_GLINTr = 571, EVENT_INTERFACE_GLINTr = 591,
EVENT_INTERFACE_GLINTu = 572, EVENT_INTERFACE_GLINTu = 592,
EVENT_INTERFACE_GLINTb = 573, EVENT_INTERFACE_GLINTb = 593,
EVENT_INTERFACE_NEDIT = 580, EVENT_INTERFACE_NEDIT = 595,
EVENT_INTERFACE_NLIST = 581, EVENT_INTERFACE_NLIST = 596,
EVENT_INTERFACE_NOK = 582, EVENT_INTERFACE_NOK = 597,
EVENT_INTERFACE_NDELETE = 584, EVENT_INTERFACE_NDELETE = 598,
EVENT_INTERFACE_NLABEL = 585, EVENT_INTERFACE_NLABEL = 599,
EVENT_INTERFACE_IOWRITE = 600, EVENT_INTERFACE_IOWRITE = 600,
EVENT_INTERFACE_IOREAD = 601, EVENT_INTERFACE_IOREAD = 601,

View File

@ -117,6 +117,9 @@ enum JoyAxisSlot
JOY_AXIS_SLOT_X, JOY_AXIS_SLOT_X,
JOY_AXIS_SLOT_Y, JOY_AXIS_SLOT_Y,
JOY_AXIS_SLOT_Z, JOY_AXIS_SLOT_Z,
JOY_AXIS_SLOT_CAM_X,
JOY_AXIS_SLOT_CAM_Y,
JOY_AXIS_SLOT_CAM_Z,
JOY_AXIS_SLOT_MAX JOY_AXIS_SLOT_MAX
}; };

View File

@ -252,6 +252,9 @@ void InitializeRestext()
stringsEvent[EVENT_INTERFACE_JOYSTICK_X_INVERT] = TR("Invert\\Invert values on this axis"); stringsEvent[EVENT_INTERFACE_JOYSTICK_X_INVERT] = TR("Invert\\Invert values on this axis");
stringsEvent[EVENT_INTERFACE_JOYSTICK_Y_INVERT] = TR("Invert\\Invert values on this axis"); stringsEvent[EVENT_INTERFACE_JOYSTICK_Y_INVERT] = TR("Invert\\Invert values on this axis");
stringsEvent[EVENT_INTERFACE_JOYSTICK_Z_INVERT] = TR("Invert\\Invert values on this axis"); stringsEvent[EVENT_INTERFACE_JOYSTICK_Z_INVERT] = TR("Invert\\Invert values on this axis");
stringsEvent[EVENT_INTERFACE_JOYSTICK_CAM_X_INVERT] = TR("Invert\\Invert values on this axis");
stringsEvent[EVENT_INTERFACE_JOYSTICK_CAM_Y_INVERT] = TR("Invert\\Invert values on this axis");
stringsEvent[EVENT_INTERFACE_JOYSTICK_CAM_Z_INVERT] = TR("Invert\\Invert values on this axis");
stringsEvent[EVENT_INTERFACE_NEDIT] = TR("\\New player name"); stringsEvent[EVENT_INTERFACE_NEDIT] = TR("\\New player name");
stringsEvent[EVENT_INTERFACE_NOK] = TR("OK\\Choose the selected player"); stringsEvent[EVENT_INTERFACE_NOK] = TR("OK\\Choose the selected player");

View File

@ -1601,11 +1601,13 @@ Math::Vector CCamera::CalculateCameraMovement(const Event &event, bool keysAllow
{ {
delta.x += event.cameraInput.x * event.rTime * 0.5f * m_speed; delta.x += event.cameraInput.x * event.rTime * 0.5f * m_speed;
delta.y -= event.cameraInput.y * event.rTime * 0.5f * m_speed; delta.y -= event.cameraInput.y * event.rTime * 0.5f * m_speed;
delta.z -= event.cameraInput.z * event.rTime * 20.0f * m_speed;
if (m_cameraObj == nullptr) if (m_cameraObj == nullptr)
{ {
delta.x += event.motionInput.x * event.rTime * 0.5f * m_speed; delta.x += event.motionInput.x * event.rTime * 0.5f * m_speed;
delta.y -= event.motionInput.y * event.rTime * 0.5f * m_speed; delta.y -= event.motionInput.y * event.rTime * 0.5f * m_speed;
delta.z -= event.motionInput.z * event.rTime * 20.0f * m_speed;
} }
if (m_input->GetKeyState(INPUT_SLOT_NEAR)) if (m_input->GetKeyState(INPUT_SLOT_NEAR))

View File

@ -103,63 +103,40 @@ void CScreenSetupControls::CreateInterface()
ddim.x = 160.0f/640.0f; ddim.x = 160.0f/640.0f;
ddim.y = 80.0f/480.0f; ddim.y = 80.0f/480.0f;
pos.x = 400.0f/640.0f; pos.x = 400.0f/640.0f;
pos.y = 213.0f/480.0f; pos.y = 273.0f/480.0f;
pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_JOYSTICK); pli = pw->CreateList(pos, ddim, 0, EVENT_INTERFACE_JOYSTICK);
pli->SetState(STATE_SHADOW); pli->SetState(STATE_SHADOW);
ddim.x = dim.x*1.5f; ddim.x = dim.x*1.5f;
ddim.y = 18.0f/480.0f; ddim.y = 18.0f/480.0f;
pos.y = 180.0f/480.0f; pos.y = 240.0f/480.0f;
pos.y -= 5.0f/480.0f; auto CreateJoystickControls = [&](const std::string& label, EventType bindingControl, EventType invertControl)
pos.x = 390.0f/640.0f; {
pw->CreateLabel(pos, ddim, 0, EVENT_LABEL0, "X:"); pos.y -= 20.0f/480.0f;
pos.y += 5.0f/480.0f; pos.x = 390.0f/640.0f;
pos.x = 422.0f/640.0f; pos.y -= 5.0f/480.0f;
pev = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_JOYSTICK_X); pw->CreateLabel(pos, ddim, 0, EVENT_LABEL0, label);
pev->SetState(STATE_SHADOW); pos.y += 5.0f/480.0f;
pev->SetType(EVT_INT); pos.x = 442.0f/640.0f;
pev->SetMinValue(0); pev = pw->CreateEditValue(pos, ddim, 0, bindingControl);
pev->SetMaxValue(2); pev->SetState(STATE_SHADOW);
pev->SetStepValue(1); pev->SetType(EVT_INT);
pev->SetValue(0); pev->SetMinValue(-1);
pos.x = 480.0f/640.0f; pev->SetMaxValue(2);
pc = pw->CreateCheck(pos, ddim, 0, EVENT_INTERFACE_JOYSTICK_X_INVERT); pev->SetStepValue(1);
pc->SetState(STATE_SHADOW); pev->SetValue(1);
pos.x = 500.0f/640.0f;
pos.y -= 20.0f/480.0f; pc = pw->CreateCheck(pos, ddim, 0, invertControl);
pos.x = 390.0f/640.0f; pc->SetState(STATE_SHADOW);
pos.y -= 5.0f/480.0f; };
pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, "Y:"); pos.y += 15.0f/480.0f;
pos.y += 5.0f/480.0f; CreateJoystickControls("X:", EVENT_INTERFACE_JOYSTICK_X, EVENT_INTERFACE_JOYSTICK_X_INVERT);
pos.x = 422.0f/640.0f; CreateJoystickControls("Y:", EVENT_INTERFACE_JOYSTICK_Y, EVENT_INTERFACE_JOYSTICK_Y_INVERT);
pev = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_JOYSTICK_Y); CreateJoystickControls("Z:", EVENT_INTERFACE_JOYSTICK_Z, EVENT_INTERFACE_JOYSTICK_Z_INVERT);
pev->SetState(STATE_SHADOW); CreateJoystickControls("CamX:", EVENT_INTERFACE_JOYSTICK_CAM_X, EVENT_INTERFACE_JOYSTICK_CAM_X_INVERT);
pev->SetType(EVT_INT); CreateJoystickControls("CamY:", EVENT_INTERFACE_JOYSTICK_CAM_Y, EVENT_INTERFACE_JOYSTICK_CAM_Y_INVERT);
pev->SetMinValue(0); CreateJoystickControls("CamZ:", EVENT_INTERFACE_JOYSTICK_CAM_Z, EVENT_INTERFACE_JOYSTICK_CAM_Z_INVERT);
pev->SetMaxValue(2);
pev->SetStepValue(1);
pev->SetValue(1);
pos.x = 480.0f/640.0f;
pc = pw->CreateCheck(pos, ddim, 0, EVENT_INTERFACE_JOYSTICK_Y_INVERT);
pc->SetState(STATE_SHADOW);
pos.y -= 20.0f/480.0f;
pos.x = 390.0f/640.0f;
pos.y -= 5.0f/480.0f;
pw->CreateLabel(pos, ddim, 0, EVENT_LABEL2, "Z:");
pos.y += 5.0f/480.0f;
pos.x = 422.0f/640.0f;
pev = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_JOYSTICK_Z);
pev->SetState(STATE_SHADOW);
pev->SetType(EVT_INT);
pev->SetMinValue(0);
pev->SetMaxValue(2);
pev->SetStepValue(1);
pev->SetValue(2);
pos.x = 480.0f/640.0f;
pc = pw->CreateCheck(pos, ddim, 0, EVENT_INTERFACE_JOYSTICK_Z_INVERT);
pc->SetState(STATE_SHADOW);
pos.y -= 25.0f/480.0f; pos.y -= 25.0f/480.0f;
pos.x = 420.0f/640.0f; pos.x = 420.0f/640.0f;
@ -203,6 +180,9 @@ bool CScreenSetupControls::EventProcess(const Event &event)
case EVENT_INTERFACE_JOYSTICK_X_INVERT: case EVENT_INTERFACE_JOYSTICK_X_INVERT:
case EVENT_INTERFACE_JOYSTICK_Y_INVERT: case EVENT_INTERFACE_JOYSTICK_Y_INVERT:
case EVENT_INTERFACE_JOYSTICK_Z_INVERT: case EVENT_INTERFACE_JOYSTICK_Z_INVERT:
case EVENT_INTERFACE_JOYSTICK_CAM_X_INVERT:
case EVENT_INTERFACE_JOYSTICK_CAM_Y_INVERT:
case EVENT_INTERFACE_JOYSTICK_CAM_Z_INVERT:
ToggleJoystickInvert(event.type); ToggleJoystickInvert(event.type);
ChangeSetupButtons(); ChangeSetupButtons();
UpdateSetupButtons(); UpdateSetupButtons();
@ -212,6 +192,9 @@ bool CScreenSetupControls::EventProcess(const Event &event)
case EVENT_INTERFACE_JOYSTICK_X: case EVENT_INTERFACE_JOYSTICK_X:
case EVENT_INTERFACE_JOYSTICK_Y: case EVENT_INTERFACE_JOYSTICK_Y:
case EVENT_INTERFACE_JOYSTICK_Z: case EVENT_INTERFACE_JOYSTICK_Z:
case EVENT_INTERFACE_JOYSTICK_CAM_X:
case EVENT_INTERFACE_JOYSTICK_CAM_Y:
case EVENT_INTERFACE_JOYSTICK_CAM_Z:
case EVENT_INTERFACE_JOYSTICK_DEADZONE: case EVENT_INTERFACE_JOYSTICK_DEADZONE:
ChangeSetupButtons(); ChangeSetupButtons();
UpdateSetupButtons(); UpdateSetupButtons();
@ -254,42 +237,28 @@ void CScreenSetupControls::ChangeSetupButtons()
} }
} }
if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_X)))) auto HandleJoystickControls = [&](JoyAxisSlot joyAxis, EventType bindingControl, EventType invertControl)
{ {
JoyAxisBinding binding = m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_X); if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(bindingControl))))
binding.axis = static_cast<int>(round(pev->GetValue())); {
m_input->SetJoyAxisBinding(JOY_AXIS_SLOT_X, binding); JoyAxisBinding binding = m_input->GetJoyAxisBinding(joyAxis);
} binding.axis = static_cast<int>(round(pev->GetValue()));
if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_X_INVERT)))) m_input->SetJoyAxisBinding(joyAxis, binding);
{ }
JoyAxisBinding binding = m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_X); if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(invertControl))))
binding.invert = pc->TestState(STATE_CHECK); {
m_input->SetJoyAxisBinding(JOY_AXIS_SLOT_X, binding); JoyAxisBinding binding = m_input->GetJoyAxisBinding(joyAxis);
} binding.invert = pc->TestState(STATE_CHECK);
if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_Y)))) m_input->SetJoyAxisBinding(joyAxis, binding);
{ }
JoyAxisBinding binding = m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_Y); };
binding.axis = static_cast<int>(round(pev->GetValue())); HandleJoystickControls(JOY_AXIS_SLOT_X, EVENT_INTERFACE_JOYSTICK_X, EVENT_INTERFACE_JOYSTICK_X_INVERT);
m_input->SetJoyAxisBinding(JOY_AXIS_SLOT_Y, binding); HandleJoystickControls(JOY_AXIS_SLOT_Y, EVENT_INTERFACE_JOYSTICK_Y, EVENT_INTERFACE_JOYSTICK_Y_INVERT);
} HandleJoystickControls(JOY_AXIS_SLOT_Z, EVENT_INTERFACE_JOYSTICK_Z, EVENT_INTERFACE_JOYSTICK_Z_INVERT);
if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_Y_INVERT)))) HandleJoystickControls(JOY_AXIS_SLOT_CAM_X, EVENT_INTERFACE_JOYSTICK_CAM_X, EVENT_INTERFACE_JOYSTICK_CAM_X_INVERT);
{ HandleJoystickControls(JOY_AXIS_SLOT_CAM_Y, EVENT_INTERFACE_JOYSTICK_CAM_Y, EVENT_INTERFACE_JOYSTICK_CAM_Y_INVERT);
JoyAxisBinding binding = m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_Y); HandleJoystickControls(JOY_AXIS_SLOT_CAM_Z, EVENT_INTERFACE_JOYSTICK_CAM_Z, EVENT_INTERFACE_JOYSTICK_CAM_Z_INVERT);
binding.invert = pc->TestState(STATE_CHECK);
m_input->SetJoyAxisBinding(JOY_AXIS_SLOT_Y, binding);
}
if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_Z))))
{
JoyAxisBinding binding = m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_Z);
binding.axis = static_cast<int>(round(pev->GetValue()));
m_input->SetJoyAxisBinding(JOY_AXIS_SLOT_Z, binding);
}
if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_Z_INVERT))))
{
JoyAxisBinding binding = m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_Z);
binding.invert = pc->TestState(STATE_CHECK);
m_input->SetJoyAxisBinding(JOY_AXIS_SLOT_Z, binding);
}
if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_DEADZONE)))) if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_DEADZONE))))
{ {
m_input->SetJoystickDeadzone(pev->GetValue()); m_input->SetJoystickDeadzone(pev->GetValue());
@ -332,39 +301,27 @@ void CScreenSetupControls::UpdateSetupButtons()
pli->SetSelect(m_app->GetJoystickEnabled() ? m_app->GetJoystick().index + 1 : 0); pli->SetSelect(m_app->GetJoystickEnabled() ? m_app->GetJoystick().index + 1 : 0);
} }
if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_X)))) auto HandleJoystickControls = [&](JoyAxisSlot joyAxis, EventType bindingControl, EventType invertControl)
{ {
pev->SetState(STATE_ENABLE, m_app->GetJoystickEnabled()); if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(bindingControl))))
pev->SetMaxValue(m_app->GetJoystick().axisCount-1); {
pev->SetValue(m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_X).axis); pev->SetState(STATE_ENABLE, m_app->GetJoystickEnabled());
} pev->SetMaxValue(m_app->GetJoystick().axisCount-1);
if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_X_INVERT)))) pev->SetValue(m_input->GetJoyAxisBinding(joyAxis).axis);
{ }
pc->SetState(STATE_ENABLE, m_app->GetJoystickEnabled()); if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(invertControl))))
pc->SetState(STATE_CHECK, m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_X).invert); {
} pc->SetState(STATE_ENABLE, m_app->GetJoystickEnabled());
if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_Y)))) pc->SetState(STATE_CHECK, m_input->GetJoyAxisBinding(joyAxis).invert);
{ }
pev->SetState(STATE_ENABLE, m_app->GetJoystickEnabled()); };
pev->SetMaxValue(m_app->GetJoystick().axisCount-1); HandleJoystickControls(JOY_AXIS_SLOT_X, EVENT_INTERFACE_JOYSTICK_X, EVENT_INTERFACE_JOYSTICK_X_INVERT);
pev->SetValue(m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_Y).axis); HandleJoystickControls(JOY_AXIS_SLOT_Y, EVENT_INTERFACE_JOYSTICK_Y, EVENT_INTERFACE_JOYSTICK_Y_INVERT);
} HandleJoystickControls(JOY_AXIS_SLOT_Z, EVENT_INTERFACE_JOYSTICK_Z, EVENT_INTERFACE_JOYSTICK_Z_INVERT);
if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_Y_INVERT)))) HandleJoystickControls(JOY_AXIS_SLOT_CAM_X, EVENT_INTERFACE_JOYSTICK_CAM_X, EVENT_INTERFACE_JOYSTICK_CAM_X_INVERT);
{ HandleJoystickControls(JOY_AXIS_SLOT_CAM_Y, EVENT_INTERFACE_JOYSTICK_CAM_Y, EVENT_INTERFACE_JOYSTICK_CAM_Y_INVERT);
pc->SetState(STATE_ENABLE, m_app->GetJoystickEnabled()); HandleJoystickControls(JOY_AXIS_SLOT_CAM_Z, EVENT_INTERFACE_JOYSTICK_CAM_Z, EVENT_INTERFACE_JOYSTICK_CAM_Z_INVERT);
pc->SetState(STATE_CHECK, m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_Y).invert);
}
if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_Z))))
{
pev->SetState(STATE_ENABLE, m_app->GetJoystickEnabled());
pev->SetMaxValue(m_app->GetJoystick().axisCount-1);
pev->SetValue(m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_Z).axis);
}
if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_Z_INVERT))))
{
pc->SetState(STATE_ENABLE, m_app->GetJoystickEnabled());
pc->SetState(STATE_CHECK, m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_Z).invert);
}
if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_DEADZONE)))) if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_DEADZONE))))
{ {
pev->SetState(STATE_ENABLE, m_app->GetJoystickEnabled()); pev->SetState(STATE_ENABLE, m_app->GetJoystickEnabled());