[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