[colobot] 94/145: Added camera joystick bindings (#653)
Didier Raboud
odyx at moszumanska.debian.org
Mon Jul 11 12:56:21 UTC 2016
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch debian/master
in repository colobot.
commit ebc2e6e26cc13ac2dd347257710c9049f15b17be
Author: krzys-h <krzys_h at interia.pl>
Date: Sat May 28 13:50:41 2016 +0200
Added camera joystick bindings (#653)
---
src/app/input.cpp | 27 ++++-
src/app/input.h | 2 +
src/common/event.cpp | 8 +-
src/common/event.h | 42 ++++---
src/common/key.h | 3 +
src/common/restext.cpp | 3 +
src/graphics/engine/camera.cpp | 2 +
src/ui/screen/screen_setup_controls.cpp | 193 +++++++++++++-------------------
8 files changed, 142 insertions(+), 138 deletions(-)
diff --git a/src/app/input.cpp b/src/app/input.cpp
index 0a04915..62bad06 100644
--- a/src/app/input.cpp
+++ b/src/app/input.cpp
@@ -170,10 +170,31 @@ void CInput::EventProcess(Event& event)
if (GetJoyAxisBinding(JOY_AXIS_SLOT_Z).invert)
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.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)
@@ -197,6 +218,7 @@ void CInput::ResetKeyStates()
m_keyMotion = 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_joyMotionCam = Math::Vector(0.0f, 0.0f, 0.0f);
for(int i=0; i<INPUT_SLOT_MAX; i++)
m_keyPresses[i] = false;
}
@@ -255,6 +277,9 @@ void CInput::SetDefaultInputBindings()
m_joyAxisBindings[JOY_AXIS_SLOT_X].axis = 0;
m_joyAxisBindings[JOY_AXIS_SLOT_Y].axis = 1;
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)
diff --git a/src/app/input.h b/src/app/input.h
index d58bf2f..15cdc98 100644
--- a/src/app/input.h
+++ b/src/app/input.h
@@ -148,6 +148,8 @@ private:
Math::Vector m_keyMotion;
//! Motion vector set by joystick axes
Math::Vector m_joyMotion;
+ //! Camera motion vector set by joystick axes
+ Math::Vector m_joyMotionCam;
//! Camera controls on the numpad
Math::Vector m_cameraKeyMotion;
diff --git a/src/common/event.cpp b/src/common/event.cpp
index 49b5218..5ffe475 100644
--- a/src/common/event.cpp
+++ b/src/common/event.cpp
@@ -251,13 +251,19 @@ void InitializeEventTypeTexts()
EVENT_TYPE_TEXT[EVENT_INTERFACE_JOYSTICK]= "EVENT_INTERFACE_JOYSTICK";
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_Y]= "EVENT_INTERFACE_JOYSTICK_Y";
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_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_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_GLINTr] = "EVENT_INTERFACE_GLINTr";
diff --git a/src/common/event.h b/src/common/event.h
index d3f22b0..061cba6 100644
--- a/src/common/event.h
+++ b/src/common/event.h
@@ -284,24 +284,30 @@ enum EventType
EVENT_INTERFACE_JOYSTICK= 560,
EVENT_INTERFACE_SOLUCE = 561,
- EVENT_INTERFACE_JOYSTICK_X = 562,
- EVENT_INTERFACE_JOYSTICK_Y = 563,
- EVENT_INTERFACE_JOYSTICK_Z = 564,
- EVENT_INTERFACE_JOYSTICK_X_INVERT = 565,
- EVENT_INTERFACE_JOYSTICK_Y_INVERT = 566,
- EVENT_INTERFACE_JOYSTICK_Z_INVERT = 567,
- EVENT_INTERFACE_JOYSTICK_DEADZONE = 568,
-
- EVENT_INTERFACE_GLINTl = 570,
- EVENT_INTERFACE_GLINTr = 571,
- EVENT_INTERFACE_GLINTu = 572,
- EVENT_INTERFACE_GLINTb = 573,
-
- EVENT_INTERFACE_NEDIT = 580,
- EVENT_INTERFACE_NLIST = 581,
- EVENT_INTERFACE_NOK = 582,
- EVENT_INTERFACE_NDELETE = 584,
- EVENT_INTERFACE_NLABEL = 585,
+ EVENT_INTERFACE_JOYSTICK_DEADZONE = 562,
+ EVENT_INTERFACE_JOYSTICK_X = 563,
+ EVENT_INTERFACE_JOYSTICK_Y = 564,
+ EVENT_INTERFACE_JOYSTICK_Z = 565,
+ EVENT_INTERFACE_JOYSTICK_CAM_X = 566,
+ EVENT_INTERFACE_JOYSTICK_CAM_Y = 567,
+ 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 = 590,
+ EVENT_INTERFACE_GLINTr = 591,
+ EVENT_INTERFACE_GLINTu = 592,
+ EVENT_INTERFACE_GLINTb = 593,
+
+ EVENT_INTERFACE_NEDIT = 595,
+ EVENT_INTERFACE_NLIST = 596,
+ EVENT_INTERFACE_NOK = 597,
+ EVENT_INTERFACE_NDELETE = 598,
+ EVENT_INTERFACE_NLABEL = 599,
EVENT_INTERFACE_IOWRITE = 600,
EVENT_INTERFACE_IOREAD = 601,
diff --git a/src/common/key.h b/src/common/key.h
index d618c45..f1209ed 100644
--- a/src/common/key.h
+++ b/src/common/key.h
@@ -117,6 +117,9 @@ enum JoyAxisSlot
JOY_AXIS_SLOT_X,
JOY_AXIS_SLOT_Y,
JOY_AXIS_SLOT_Z,
+ JOY_AXIS_SLOT_CAM_X,
+ JOY_AXIS_SLOT_CAM_Y,
+ JOY_AXIS_SLOT_CAM_Z,
JOY_AXIS_SLOT_MAX
};
diff --git a/src/common/restext.cpp b/src/common/restext.cpp
index 24d515d..ec88dc4 100644
--- a/src/common/restext.cpp
+++ b/src/common/restext.cpp
@@ -252,6 +252,9 @@ void InitializeRestext()
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_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_NOK] = TR("OK\\Choose the selected player");
diff --git a/src/graphics/engine/camera.cpp b/src/graphics/engine/camera.cpp
index 96c4f00..0b6157b 100644
--- a/src/graphics/engine/camera.cpp
+++ b/src/graphics/engine/camera.cpp
@@ -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.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)
{
delta.x += event.motionInput.x * 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))
diff --git a/src/ui/screen/screen_setup_controls.cpp b/src/ui/screen/screen_setup_controls.cpp
index bdb2c5c..7aa39eb 100644
--- a/src/ui/screen/screen_setup_controls.cpp
+++ b/src/ui/screen/screen_setup_controls.cpp
@@ -103,63 +103,40 @@ void CScreenSetupControls::CreateInterface()
ddim.x = 160.0f/640.0f;
ddim.y = 80.0f/480.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->SetState(STATE_SHADOW);
ddim.x = dim.x*1.5f;
ddim.y = 18.0f/480.0f;
- pos.y = 180.0f/480.0f;
+ pos.y = 240.0f/480.0f;
- pos.y -= 5.0f/480.0f;
- pos.x = 390.0f/640.0f;
- pw->CreateLabel(pos, ddim, 0, EVENT_LABEL0, "X:");
- pos.y += 5.0f/480.0f;
- pos.x = 422.0f/640.0f;
- pev = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_JOYSTICK_X);
- pev->SetState(STATE_SHADOW);
- pev->SetType(EVT_INT);
- pev->SetMinValue(0);
- pev->SetMaxValue(2);
- pev->SetStepValue(1);
- pev->SetValue(0);
- pos.x = 480.0f/640.0f;
- pc = pw->CreateCheck(pos, ddim, 0, EVENT_INTERFACE_JOYSTICK_X_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_LABEL1, "Y:");
- pos.y += 5.0f/480.0f;
- pos.x = 422.0f/640.0f;
- pev = pw->CreateEditValue(pos, ddim, 0, EVENT_INTERFACE_JOYSTICK_Y);
- pev->SetState(STATE_SHADOW);
- pev->SetType(EVT_INT);
- pev->SetMinValue(0);
- 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);
+ auto CreateJoystickControls = [&](const std::string& label, EventType bindingControl, EventType invertControl)
+ {
+ pos.y -= 20.0f/480.0f;
+ pos.x = 390.0f/640.0f;
+ pos.y -= 5.0f/480.0f;
+ pw->CreateLabel(pos, ddim, 0, EVENT_LABEL0, label);
+ pos.y += 5.0f/480.0f;
+ pos.x = 442.0f/640.0f;
+ pev = pw->CreateEditValue(pos, ddim, 0, bindingControl);
+ pev->SetState(STATE_SHADOW);
+ pev->SetType(EVT_INT);
+ pev->SetMinValue(-1);
+ pev->SetMaxValue(2);
+ pev->SetStepValue(1);
+ pev->SetValue(1);
+ pos.x = 500.0f/640.0f;
+ pc = pw->CreateCheck(pos, ddim, 0, invertControl);
+ pc->SetState(STATE_SHADOW);
+ };
+ pos.y += 15.0f/480.0f;
+ CreateJoystickControls("X:", EVENT_INTERFACE_JOYSTICK_X, EVENT_INTERFACE_JOYSTICK_X_INVERT);
+ CreateJoystickControls("Y:", EVENT_INTERFACE_JOYSTICK_Y, EVENT_INTERFACE_JOYSTICK_Y_INVERT);
+ CreateJoystickControls("Z:", EVENT_INTERFACE_JOYSTICK_Z, EVENT_INTERFACE_JOYSTICK_Z_INVERT);
+ CreateJoystickControls("CamX:", EVENT_INTERFACE_JOYSTICK_CAM_X, EVENT_INTERFACE_JOYSTICK_CAM_X_INVERT);
+ CreateJoystickControls("CamY:", EVENT_INTERFACE_JOYSTICK_CAM_Y, EVENT_INTERFACE_JOYSTICK_CAM_Y_INVERT);
+ CreateJoystickControls("CamZ:", EVENT_INTERFACE_JOYSTICK_CAM_Z, EVENT_INTERFACE_JOYSTICK_CAM_Z_INVERT);
pos.y -= 25.0f/480.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_Y_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);
ChangeSetupButtons();
UpdateSetupButtons();
@@ -212,6 +192,9 @@ bool CScreenSetupControls::EventProcess(const Event &event)
case EVENT_INTERFACE_JOYSTICK_X:
case EVENT_INTERFACE_JOYSTICK_Y:
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:
ChangeSetupButtons();
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);
- binding.axis = static_cast<int>(round(pev->GetValue()));
- m_input->SetJoyAxisBinding(JOY_AXIS_SLOT_X, binding);
- }
- if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_X_INVERT))))
- {
- JoyAxisBinding binding = m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_X);
- binding.invert = pc->TestState(STATE_CHECK);
- m_input->SetJoyAxisBinding(JOY_AXIS_SLOT_X, binding);
- }
- if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_Y))))
- {
- JoyAxisBinding binding = m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_Y);
- binding.axis = static_cast<int>(round(pev->GetValue()));
- m_input->SetJoyAxisBinding(JOY_AXIS_SLOT_Y, binding);
- }
- if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_Y_INVERT))))
- {
- JoyAxisBinding binding = m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_Y);
- 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(bindingControl))))
+ {
+ JoyAxisBinding binding = m_input->GetJoyAxisBinding(joyAxis);
+ binding.axis = static_cast<int>(round(pev->GetValue()));
+ m_input->SetJoyAxisBinding(joyAxis, binding);
+ }
+ if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(invertControl))))
+ {
+ JoyAxisBinding binding = m_input->GetJoyAxisBinding(joyAxis);
+ binding.invert = pc->TestState(STATE_CHECK);
+ m_input->SetJoyAxisBinding(joyAxis, binding);
+ }
+ };
+ HandleJoystickControls(JOY_AXIS_SLOT_X, EVENT_INTERFACE_JOYSTICK_X, EVENT_INTERFACE_JOYSTICK_X_INVERT);
+ 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);
+ 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);
+ HandleJoystickControls(JOY_AXIS_SLOT_CAM_Z, EVENT_INTERFACE_JOYSTICK_CAM_Z, EVENT_INTERFACE_JOYSTICK_CAM_Z_INVERT);
+
if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_DEADZONE))))
{
m_input->SetJoystickDeadzone(pev->GetValue());
@@ -332,39 +301,27 @@ void CScreenSetupControls::UpdateSetupButtons()
pli->SetSelect(m_app->GetJoystickEnabled() ? m_app->GetJoystick().index + 1 : 0);
}
- if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_X))))
- {
- pev->SetState(STATE_ENABLE, m_app->GetJoystickEnabled());
- pev->SetMaxValue(m_app->GetJoystick().axisCount-1);
- pev->SetValue(m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_X).axis);
- }
- if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_X_INVERT))))
- {
- pc->SetState(STATE_ENABLE, m_app->GetJoystickEnabled());
- pc->SetState(STATE_CHECK, m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_X).invert);
- }
- if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_Y))))
- {
- pev->SetState(STATE_ENABLE, m_app->GetJoystickEnabled());
- pev->SetMaxValue(m_app->GetJoystick().axisCount-1);
- pev->SetValue(m_input->GetJoyAxisBinding(JOY_AXIS_SLOT_Y).axis);
- }
- if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_Y_INVERT))))
- {
- pc->SetState(STATE_ENABLE, m_app->GetJoystickEnabled());
- 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))))
+ auto HandleJoystickControls = [&](JoyAxisSlot joyAxis, EventType bindingControl, EventType invertControl)
{
- 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(bindingControl))))
+ {
+ pev->SetState(STATE_ENABLE, m_app->GetJoystickEnabled());
+ pev->SetMaxValue(m_app->GetJoystick().axisCount-1);
+ pev->SetValue(m_input->GetJoyAxisBinding(joyAxis).axis);
+ }
+ if (nullptr != (pc = static_cast<CCheck*>(pw->SearchControl(invertControl))))
+ {
+ pc->SetState(STATE_ENABLE, m_app->GetJoystickEnabled());
+ pc->SetState(STATE_CHECK, m_input->GetJoyAxisBinding(joyAxis).invert);
+ }
+ };
+ HandleJoystickControls(JOY_AXIS_SLOT_X, EVENT_INTERFACE_JOYSTICK_X, EVENT_INTERFACE_JOYSTICK_X_INVERT);
+ 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);
+ 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);
+ HandleJoystickControls(JOY_AXIS_SLOT_CAM_Z, EVENT_INTERFACE_JOYSTICK_CAM_Z, EVENT_INTERFACE_JOYSTICK_CAM_Z_INVERT);
+
if (nullptr != (pev = static_cast<CEditValue*>(pw->SearchControl(EVENT_INTERFACE_JOYSTICK_DEADZONE))))
{
pev->SetState(STATE_ENABLE, m_app->GetJoystickEnabled());
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git
More information about the Pkg-games-commits
mailing list