From 152ce1e4c493c0cd124316424567c42715a044da Mon Sep 17 00:00:00 2001 From: Rye Mutt <rye@alchemyviewer.org> Date: Sun, 16 Jun 2024 01:49:06 -0400 Subject: [PATCH] Butcher in BD joystick control scheme --- .../newview/app_settings/settings_alchemy.xml | 154 ++ indra/newview/llfloaterjoystick.cpp | 15 + indra/newview/llfloaterjoystick.h | 2 + indra/newview/llviewerjoystick.cpp | 1113 +++++++---- indra/newview/llviewerjoystick.h | 62 + .../skins/default/textures/textures.xml | 21 + .../skins/default/textures/xbox/button_a.png | Bin 0 -> 1365 bytes .../skins/default/textures/xbox/button_b.png | Bin 0 -> 1363 bytes .../default/textures/xbox/button_back.png | Bin 0 -> 1330 bytes .../default/textures/xbox/button_start.png | Bin 0 -> 1210 bytes .../skins/default/textures/xbox/button_x.png | Bin 0 -> 1380 bytes .../skins/default/textures/xbox/button_y.png | Bin 0 -> 1336 bytes .../default/textures/xbox/left_button.png | Bin 0 -> 1123 bytes .../default/textures/xbox/left_thumb.png | Bin 0 -> 1383 bytes .../textures/xbox/left_thumb_press.png | Bin 0 -> 1484 bytes .../default/textures/xbox/left_thumb_x.png | Bin 0 -> 13303 bytes .../default/textures/xbox/left_thumb_y.png | Bin 0 -> 13103 bytes .../default/textures/xbox/left_trigger.png | Bin 0 -> 1134 bytes .../skins/default/textures/xbox/none.png | Bin 0 -> 1301 bytes .../default/textures/xbox/right_button.png | Bin 0 -> 1139 bytes .../default/textures/xbox/right_thumb.png | Bin 0 -> 1374 bytes .../textures/xbox/right_thumb_press.png | Bin 0 -> 1493 bytes .../default/textures/xbox/right_thumb_x.png | Bin 0 -> 13509 bytes .../default/textures/xbox/right_thumb_y.png | Bin 0 -> 13166 bytes .../default/textures/xbox/right_trigger.png | Bin 0 -> 1228 bytes .../skins/default/textures/xbox/triggers.png | Bin 0 -> 6006 bytes .../skins/default/xui/en/floater_joystick.xml | 1662 ++++++++++++++++- 27 files changed, 2694 insertions(+), 335 deletions(-) create mode 100644 indra/newview/skins/default/textures/xbox/button_a.png create mode 100644 indra/newview/skins/default/textures/xbox/button_b.png create mode 100644 indra/newview/skins/default/textures/xbox/button_back.png create mode 100644 indra/newview/skins/default/textures/xbox/button_start.png create mode 100644 indra/newview/skins/default/textures/xbox/button_x.png create mode 100644 indra/newview/skins/default/textures/xbox/button_y.png create mode 100644 indra/newview/skins/default/textures/xbox/left_button.png create mode 100644 indra/newview/skins/default/textures/xbox/left_thumb.png create mode 100644 indra/newview/skins/default/textures/xbox/left_thumb_press.png create mode 100644 indra/newview/skins/default/textures/xbox/left_thumb_x.png create mode 100644 indra/newview/skins/default/textures/xbox/left_thumb_y.png create mode 100644 indra/newview/skins/default/textures/xbox/left_trigger.png create mode 100644 indra/newview/skins/default/textures/xbox/none.png create mode 100644 indra/newview/skins/default/textures/xbox/right_button.png create mode 100644 indra/newview/skins/default/textures/xbox/right_thumb.png create mode 100644 indra/newview/skins/default/textures/xbox/right_thumb_press.png create mode 100644 indra/newview/skins/default/textures/xbox/right_thumb_x.png create mode 100644 indra/newview/skins/default/textures/xbox/right_thumb_y.png create mode 100644 indra/newview/skins/default/textures/xbox/right_trigger.png create mode 100644 indra/newview/skins/default/textures/xbox/triggers.png diff --git a/indra/newview/app_settings/settings_alchemy.xml b/indra/newview/app_settings/settings_alchemy.xml index b1414c4f3f6..acf2676b966 100644 --- a/indra/newview/app_settings/settings_alchemy.xml +++ b/indra/newview/app_settings/settings_alchemy.xml @@ -2066,5 +2066,159 @@ <key>Value</key> <integer>2</integer> </map> + <key>BlackDragonControls</key> + <map> + <key>Comment</key> + <string>Use BlackDragon style joystick controls</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> + <key>JoystickButtonFlycam</key> + <map> + <key>Comment</key> + <string>Test</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>7</integer> + </map> + <key>JoystickButtonJump</key> + <map> + <key>Comment</key> + <string>Test</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>0</integer> + </map> + <key>JoystickButtonFly</key> + <map> + <key>Comment</key> + <string>Test</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>2</integer> + </map> + <key>JoystickButtonCrouch</key> + <map> + <key>Comment</key> + <string>Test</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>JoystickButtonRunToggle</key> + <map> + <key>Comment</key> + <string>Test</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>8</integer> + </map> + <key>JoystickButtonMouselook</key> + <map> + <key>Comment</key> + <string>Test</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>9</integer> + </map> + <key>JoystickButtonZoomIn</key> + <map> + <key>Comment</key> + <string>Test</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>4</integer> + </map> + <key>JoystickButtonZoomOut</key> + <map> + <key>Comment</key> + <string>Test</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>5</integer> + </map> + <key>JoystickButtonZoomDefault</key> + <map> + <key>Comment</key> + <string>Test</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>6</integer> + </map> + <key>JoystickButtonRollLeft</key> + <map> + <key>Comment</key> + <string>Test</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>-1</integer> + </map> + <key>JoystickButtonRollRight</key> + <map> + <key>Comment</key> + <string>Test</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>-1</integer> + </map> + <key>JoystickButtonRollDefault</key> + <map> + <key>Comment</key> + <string>Test</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>-1</integer> + </map> + <key>JoystickInvertPitch</key> + <map> + <key>Comment</key> + <string>Invert pitch axis in all joystick modes.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> </map> </llsd> diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp index 09763b7bb5a..03e587e38ee 100644 --- a/indra/newview/llfloaterjoystick.cpp +++ b/indra/newview/llfloaterjoystick.cpp @@ -134,6 +134,15 @@ void LLFloaterJoystick::draw() } } + for (U32 i = 0; i < 16; i++) + { + U32 value = joystick->getJoystickButton(i); + if (!mAxisButton[i]->getEnabled() && value) + { + mAxisButton[i]->setEnabled(TRUE); + } + mAxisButton[i]->setToggleState(value); + } LLFloater::draw(); } @@ -154,6 +163,12 @@ BOOL LLFloaterJoystick::postBuild() } } + for (U32 i = 0; i < 16; i++) + { + std::string btn_name = llformat("btn%d", i); + mAxisButton[i] = getChild<LLButton>(btn_name); + } + mJoysticksCombo = getChild<LLComboBox>("joystick_combo"); childSetCommitCallback("joystick_combo",onCommitJoystickEnabled,this); mCheckFlycamEnabled = getChild<LLCheckBoxCtrl>("JoystickFlycamEnabled"); diff --git a/indra/newview/llfloaterjoystick.h b/indra/newview/llfloaterjoystick.h index 6a804239dbf..5aa0dbd0104 100644 --- a/indra/newview/llfloaterjoystick.h +++ b/indra/newview/llfloaterjoystick.h @@ -100,6 +100,8 @@ class LLFloaterJoystick final : public LLFloater // stats view LLStatBar* mAxisStatsBar[6]; + + LLButton* mAxisButton[16]; }; #endif diff --git a/indra/newview/llviewerjoystick.cpp b/indra/newview/llviewerjoystick.cpp index 739234534a9..dcccd244013 100644 --- a/indra/newview/llviewerjoystick.cpp +++ b/indra/newview/llviewerjoystick.cpp @@ -402,6 +402,19 @@ LLViewerJoystick::LLViewerJoystick() gSavedSettings.getControl("JoystickInvertPitch")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + gSavedSettings.getControl("JoystickButtonRollLeft")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + gSavedSettings.getControl("JoystickButtonRollRight")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + gSavedSettings.getControl("JoystickButtonRollDefault")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + gSavedSettings.getControl("JoystickButtonZoomOut")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + gSavedSettings.getControl("JoystickButtonZoomIn")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + gSavedSettings.getControl("JoystickButtonZoomDefault")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + gSavedSettings.getControl("JoystickButtonJump")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + gSavedSettings.getControl("JoystickButtonCrouch")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + gSavedSettings.getControl("JoystickButtonFly")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + gSavedSettings.getControl("JoystickButtonMouselook")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + gSavedSettings.getControl("JoystickButtonFlycam")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + gSavedSettings.getControl("JoystickButtonRunToggle")->getCommitSignal()->connect([this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) { refreshFromSettings(); }); + refreshFromSettings(); } @@ -607,6 +620,19 @@ void LLViewerJoystick::refreshFromSettings() mFlycamFeathering = gSavedSettings.getF32("FlycamFeathering"); mInvertPitch = gSavedSettings.getBOOL("JoystickInvertPitch"); + + mMappedButtons[ROLL_LEFT] = gSavedSettings.getS32("JoystickButtonRollLeft"); + mMappedButtons[ROLL_RIGHT] = gSavedSettings.getS32("JoystickButtonRollRight"); + mMappedButtons[ROLL_DEFAULT] = gSavedSettings.getS32("JoystickButtonRollDefault"); + mMappedButtons[ZOOM_OUT] = gSavedSettings.getS32("JoystickButtonZoomOut"); + mMappedButtons[ZOOM_IN] = gSavedSettings.getS32("JoystickButtonZoomIn"); + mMappedButtons[ZOOM_DEFAULT] = gSavedSettings.getS32("JoystickButtonZoomDefault"); + mMappedButtons[JUMP] = gSavedSettings.getS32("JoystickButtonJump"); + mMappedButtons[CROUCH] = gSavedSettings.getS32("JoystickButtonCrouch"); + mMappedButtons[FLY] = gSavedSettings.getS32("JoystickButtonFly"); + mMappedButtons[MOUSELOOK] = gSavedSettings.getS32("JoystickButtonMouselook"); + mMappedButtons[FLYCAM] = gSavedSettings.getS32("JoystickButtonFlycam"); + mMappedButtons[TOGGLE_RUN] = gSavedSettings.getS32("JoystickButtonRunToggle"); } void LLViewerJoystick::initDevice(LLSD &guid) @@ -958,49 +984,115 @@ void LLViewerJoystick::moveObjects(bool reset) F32 cur_delta[6]; F32 time = gFrameIntervalSeconds.value(); + bool is_zero = true; - // avoid making ridicously big movements if there's a big drop in fps - if (time > .2f) - { - time = .2f; - } + static LLCachedControl<bool> blackdragon(gSavedSettings, "BlackDragonControls", false); + if(blackdragon) + { + //BD - Avoid making ridicously big movements if there's a big drop in fps + time = llclamp(time, 0.016f, 0.033f); - // max feather is 32 - F32 feather = mBuildFeathering; - bool is_zero = true, absolute = m3DCursor; + // //BD - Remappable Joystick Controls - for (U32 i = 0; i < 6; i++) - { - cur_delta[i] = -mAxes[mJoystickAxis[i]]; -// //BD - Invertable Pitch Controls - if (!mInvertPitch && i == 4) - cur_delta[i] = -cur_delta[i]; + + for (U32 i = 0; i < 6; i++) + { + cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]); - F32 tmp = cur_delta[i]; - if (absolute) - { - cur_delta[i] = cur_delta[i] - sLastDelta[i]; - } - sLastDelta[i] = tmp; - is_zero = is_zero && (cur_delta[i] == 0.f); - - if (cur_delta[i] > 0) - { - cur_delta[i] = llmax(cur_delta[i]- mBuildAxisDeadZone[i], 0.f); - } - else - { - cur_delta[i] = llmin(cur_delta[i]+ mBuildAxisDeadZone[i], 0.f); - } - cur_delta[i] *= mBuildAxisScale[i]; - - if (!absolute) - { - cur_delta[i] *= time; - } + if (i == CAM_X_AXIS) + { + cur_delta[i] -= (F32)getJoystickButton(mMappedButtons[ROLL_LEFT]); + cur_delta[i] += (F32)getJoystickButton(mMappedButtons[ROLL_RIGHT]); + } + if (i == Z_AXIS) + { + cur_delta[i] += (F32)getJoystickButton(mMappedButtons[JUMP]); + cur_delta[i] -= (F32)getJoystickButton(mMappedButtons[CROUCH]); + } - sDelta[i] = sDelta[i] + (cur_delta[i]-sDelta[i])*time*feather; - } + // //BD - Invertable Pitch Controls + if (mInvertPitch && i == 4) + cur_delta[4] *= -1.f; + + F32 tmp = cur_delta[i]; + F32 axis_deadzone = mBuildAxisDeadZone[i]; + if (m3DCursor || llabs(cur_delta[i]) < axis_deadzone) + { + cur_delta[i] = cur_delta[i] - sLastDelta[i]; + } + sLastDelta[i] = tmp; + is_zero = is_zero && (cur_delta[i] == 0.f); + + //BD - We assume that delta 1.0 is the maximum. + if (llabs(cur_delta[i]) > axis_deadzone) + { + //BD - Clamp the delta between 1 and -1 while taking the deadzone into account. + if (cur_delta[i] > 0) + { + cur_delta[i] = llclamp(cur_delta[i] - axis_deadzone, 0.f, 1.f - axis_deadzone); + } + else + { + cur_delta[i] = llclamp(cur_delta[i] + axis_deadzone, -1.f + axis_deadzone, 0.f); + } + //BD - Rescale the remaining delta to match the maximum to get a new clean 0 to 1 range. + cur_delta[i] = cur_delta[i] / (1.f - axis_deadzone); + } + cur_delta[i] *= mBuildAxisScale[i]; + + if (!m3DCursor) + { + cur_delta[i] *= time; + } + + sDelta[i] = sDelta[i] + (cur_delta[i] - sDelta[i]) * time * mBuildFeathering; + } + } + else + { + // avoid making ridicously big movements if there's a big drop in fps + if (time > .2f) + { + time = .2f; + } + + // max feather is 32 + F32 feather = mBuildFeathering; + bool absolute = m3DCursor; + + for (U32 i = 0; i < 6; i++) + { + cur_delta[i] = -mAxes[mJoystickAxis[i]]; + // //BD - Invertable Pitch Controls + if (!mInvertPitch && i == 4) + cur_delta[i] = -cur_delta[i]; + + F32 tmp = cur_delta[i]; + if (absolute) + { + cur_delta[i] = cur_delta[i] - sLastDelta[i]; + } + sLastDelta[i] = tmp; + is_zero = is_zero && (cur_delta[i] == 0.f); + + if (cur_delta[i] > 0) + { + cur_delta[i] = llmax(cur_delta[i]- mBuildAxisDeadZone[i], 0.f); + } + else + { + cur_delta[i] = llmin(cur_delta[i]+ mBuildAxisDeadZone[i], 0.f); + } + cur_delta[i] *= mBuildAxisScale[i]; + + if (!absolute) + { + cur_delta[i] *= time; + } + + sDelta[i] = sDelta[i] + (cur_delta[i]-sDelta[i])*time*feather; + } + } U32 upd_type = UPD_NONE; LLVector3 v; @@ -1058,198 +1150,373 @@ void LLViewerJoystick::moveAvatar(bool reset) return; } - bool is_zero = true; - static bool button_held = false; - - if (mBtn[1] == 1) - { - // If AutomaticFly is enabled, then button1 merely causes a - // jump (as the up/down axis already controls flying) if on the - // ground, or cease flight if already flying. - // If AutomaticFly is disabled, then button1 toggles flying. - if (ALControlCache::AutomaticFly) - { - if (!gAgent.getFlying()) - { - gAgent.moveUp(1); - } - else if (!button_held) - { - button_held = true; - gAgent.setFlying(FALSE); - } - } - else if (!button_held) - { - button_held = true; - gAgent.setFlying(!gAgent.getFlying()); - } - - is_zero = false; - } - else - { - button_held = false; - } - - // time interval in seconds between this frame and the previous - F32 time = gFrameIntervalSeconds.value(); - - // avoid making ridicously big movements if there's a big drop in fps - if (time > .2f) - { - time = .2f; - } - - // note: max feather is 32.0 - F32 feather = mAvatarFeathering; - - F32 cur_delta[6]; - F32 val, dom_mov = 0.f; - U32 dom_axis = Z_I; -#if LIB_NDOF - bool absolute = (m3DCursor && mNdofDev->absolute); -#else - bool absolute = false; -#endif - // remove dead zones and determine biggest movement on the joystick - for (U32 i = 0; i < 6; i++) - { - cur_delta[i] = -mAxes[mJoystickAxis[i]]; - - if (!mInvertPitch && i == 4) - cur_delta[i] = -cur_delta[i]; - - if (absolute) - { - F32 tmp = cur_delta[i]; - cur_delta[i] = cur_delta[i] - sLastDelta[i]; - sLastDelta[i] = tmp; - } - - if (cur_delta[i] > 0) - { - cur_delta[i] = llmax(cur_delta[i]- mAvatarAxisDeadZone[i], 0.f); - } - else - { - cur_delta[i] = llmin(cur_delta[i]+ mAvatarAxisDeadZone[i], 0.f); - } - - // we don't care about Roll (RZ) and Z is calculated after the loop - if (i != Z_I && i != RZ_I) - { - // find out the axis with the biggest joystick motion - val = fabs(cur_delta[i]); - if (val > dom_mov) + static LLCachedControl<bool> blackdragon(gSavedSettings, "BlackDragonControls", false); + if (blackdragon) + { + bool is_zero = true; + static bool button_held = false; + //BD + static bool w_button_held = false; + static bool m_button_held = false; + + // //BD - Remappable Joystick Controls + if (getJoystickButton(mMappedButtons[FLY]) == 1 && !button_held) + { + button_held = true; + if (gAgent.getFlying()) + { + gAgent.setFlying(FALSE); + } + else + { + gAgent.setFlying(TRUE); + } + } + else if (getJoystickButton(mMappedButtons[FLY]) == 0 && button_held) + { + button_held = false; + } + + if (getJoystickButton(mMappedButtons[TOGGLE_RUN]) == 1 && !w_button_held) + { + w_button_held = true; + if (gAgent.getAlwaysRun()) + { + gAgent.clearAlwaysRun(); + } + else + { + gAgent.setAlwaysRun(); + } + } + else if (getJoystickButton(mMappedButtons[TOGGLE_RUN]) == 0 && w_button_held) + { + w_button_held = false; + } + + if (getJoystickButton(mMappedButtons[MOUSELOOK]) == 1 && !m_button_held) + { + m_button_held = true; + if (gAgentCamera.cameraMouselook()) + { + gAgentCamera.changeCameraToDefault(); + } + else + { + gAgentCamera.changeCameraToMouselook(); + } + } + else if (getJoystickButton(mMappedButtons[MOUSELOOK]) == 0 && m_button_held) + { + m_button_held = false; + } + + // time interval in seconds between this frame and the previous + F32 time = gFrameIntervalSeconds.value(); + + //BD - Avoid making ridicously big movements if there's a big drop in fps + time = llclamp(time, 0.016f, 0.033f); + + // note: max feather is 32.0 + + F32 cur_delta[6] = {}; + F32 val, dom_mov = 0.f; + U32 dom_axis = Z_I; + + // remove dead zones and determine biggest movement on the joystick + for (U32 i = 0; i < 6; i++) + { + cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]); + + if(i == Z_AXIS) { - dom_axis = i; - dom_mov = val; + cur_delta[i] += (F32)getJoystickButton(mMappedButtons[JUMP]); + cur_delta[i] -= (F32)getJoystickButton(mMappedButtons[CROUCH]); } - } - - is_zero = is_zero && (cur_delta[i] == 0.f); - } - - if (!is_zero) - { - // Clear AFK state if moved beyond the deadzone - if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME) - { - gAgent.clearAFK(); - } - - setCameraNeedsUpdate(true); - } - - // forward|backward movements overrule the real dominant movement if - // they're bigger than its 20%. This is what you want 'cos moving forward - // is what you do most. We also added a special (even more lenient) case - // for RX|RY to allow walking while pitching and turning - if (fabs(cur_delta[Z_I]) > .2f * dom_mov - || ((dom_axis == RX_I || dom_axis == RY_I) - && fabs(cur_delta[Z_I]) > .05f * dom_mov)) - { - dom_axis = Z_I; - } - - sDelta[X_I] = -cur_delta[X_I] * mAvatarAxisScale[X_I]; - sDelta[Y_I] = -cur_delta[Y_I] * mAvatarAxisScale[Y_I]; - sDelta[Z_I] = -cur_delta[Z_I] * mAvatarAxisScale[Z_I]; - cur_delta[RX_I] *= -mAvatarAxisScale[RX_I] * mPerfScale; - cur_delta[RY_I] *= -mAvatarAxisScale[RY_I] * mPerfScale; - - if (!absolute) - { - cur_delta[RX_I] *= time; - cur_delta[RY_I] *= time; - } - sDelta[RX_I] += (cur_delta[RX_I] - sDelta[RX_I]) * time * feather; - sDelta[RY_I] += (cur_delta[RY_I] - sDelta[RY_I]) * time * feather; - - handleRun((F32) sqrt(sDelta[Z_I]*sDelta[Z_I] + sDelta[X_I]*sDelta[X_I])); - // Allow forward/backward movement some priority - if (dom_axis == Z_I) - { - agentPush(sDelta[Z_I]); // forward/back - - if (fabs(sDelta[X_I]) > .1f) - { - agentSlide(sDelta[X_I]); // move sideways - } - - if (fabs(sDelta[Y_I]) > .1f) - { - agentFly(sDelta[Y_I]); // up/down & crouch - } - - // too many rotations during walking can be confusing, so apply - // the deadzones one more time (quick & dirty), at 50%|30% power - F32 eff_rx = .3f * mAvatarAxisDeadZone[RX_I]; - F32 eff_ry = .3f * mAvatarAxisDeadZone[RY_I]; - - if (sDelta[RX_I] > 0) - { - eff_rx = llmax(sDelta[RX_I] - eff_rx, 0.f); - } - else - { - eff_rx = llmin(sDelta[RX_I] + eff_rx, 0.f); - } - - if (sDelta[RY_I] > 0) - { - eff_ry = llmax(sDelta[RY_I] - eff_ry, 0.f); - } - else - { - eff_ry = llmin(sDelta[RY_I] + eff_ry, 0.f); - } - - - if (fabs(eff_rx) > 0.f || fabs(eff_ry) > 0.f) - { - if (gAgent.getFlying()) - { - agentPitch(eff_rx); - agentYaw(eff_ry); - } - else - { - agentPitch(eff_rx); - agentYaw(2.f * eff_ry); - } - } - } - else - { - agentSlide(sDelta[X_I]); // move sideways - agentFly(sDelta[Y_I]); // up/down & crouch - agentPush(sDelta[Z_I]); // forward/back - agentPitch(sDelta[RX_I]); // pitch - agentYaw(sDelta[RY_I]); // turn - } + F32 axis_deadzone = mAvatarAxisDeadZone[i]; + + //BD - We assume that delta 1.0 is the maximum. + if (llabs(cur_delta[i]) > axis_deadzone) + { + //BD - Clamp the delta between 1 and -1 while taking the deadzone into account. + if (cur_delta[i] > 0) + { + cur_delta[i] = llclamp(cur_delta[i] - axis_deadzone, 0.f, 1.f - axis_deadzone); + } + else + { + cur_delta[i] = llclamp(cur_delta[i] + axis_deadzone, -1.f + axis_deadzone, 0.f); + } + //BD - Rescale the remaining delta to match the maximum to get a new clean 0 to 1 range. + cur_delta[i] = cur_delta[i] / (1.f - axis_deadzone); + } + else + { + cur_delta[i] = 0.f; + } + + // we don't care about Roll (RZ) and Z is calculated after the loop + if (i != Z_I && i != RZ_I) + { + // find out the axis with the biggest joystick motion + val = fabs(cur_delta[i]); + if (val > dom_mov) + { + dom_axis = i; + dom_mov = val; + } + } + + cur_delta[i] *= mAvatarAxisScale[i] * time; + + //sDelta[i] = sDelta[i] + (cur_delta[i] - sDelta[i]) * time; + is_zero = is_zero && (cur_delta[i] == 0.f); + } + + if (!is_zero) + { + // Clear AFK state if moved beyond the deadzone + if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME) + { + gAgent.clearAFK(); + } + + setCameraNeedsUpdate(true); + } + + // //BD - Invertable Pitch Controls + if (!mInvertPitch) + cur_delta[RX_I] = -cur_delta[RX_I]; + + // forward|backward movements overrule the real dominant movement if + // they're bigger than its 20%. This is what you want 'cos moving forward + // is what you do most. We also added a special (even more lenient) case + // for RX|RY to allow walking while pitching and turning + if (fabs(cur_delta[Z_I]) > .2f * dom_mov + || ((dom_axis == RX_I || dom_axis == RY_I) + && fabs(cur_delta[Z_I]) > .05f * dom_mov)) + { + dom_axis = Z_I; + } + + sDelta[X_I] = -cur_delta[X_I]; + sDelta[Y_I] = -cur_delta[Y_I]; + sDelta[Z_I] = -cur_delta[Z_I]; + cur_delta[RX_I] *= -mAvatarAxisScale[RX_I]; + cur_delta[RY_I] *= -mAvatarAxisScale[RY_I]; + + sDelta[RX_I] += (cur_delta[RX_I] - sDelta[RX_I]) * time * mAvatarFeathering; + sDelta[RY_I] += (cur_delta[RY_I] - sDelta[RY_I]) * time * mAvatarFeathering; + + handleRun((F32) sqrt(sDelta[Z_I]*sDelta[Z_I] + sDelta[X_I]*sDelta[X_I])); + + // //BD - Xbox360 Controller Support + // Use raw deltas, do not add any stupid limitations or extra dead zones + // otherwise alot controllers will cry and camera movement will bug out + // or be completely ignored on some controllers. Especially fixes Xbox 360 + // controller avatar movement. + agentSlide(sDelta[X_I]); // move sideways + agentFly(sDelta[Y_I]); // up/down & crouch + agentPush(sDelta[Z_I]); // forward/back + agentPitch(sDelta[RX_I]); // pitch + agentYaw(sDelta[RY_I]); // turn + } + else + { + bool is_zero = true; + static bool button_held = false; + + if (mBtn[1] == 1) + { + // If AutomaticFly is enabled, then button1 merely causes a + // jump (as the up/down axis already controls flying) if on the + // ground, or cease flight if already flying. + // If AutomaticFly is disabled, then button1 toggles flying. + if (ALControlCache::AutomaticFly) + { + if (!gAgent.getFlying()) + { + gAgent.moveUp(1); + } + else if (!button_held) + { + button_held = true; + gAgent.setFlying(FALSE); + } + } + else if (!button_held) + { + button_held = true; + gAgent.setFlying(!gAgent.getFlying()); + } + + is_zero = false; + } + else + { + button_held = false; + } + + // time interval in seconds between this frame and the previous + F32 time = gFrameIntervalSeconds.value(); + + // avoid making ridicously big movements if there's a big drop in fps + if (time > .2f) + { + time = .2f; + } + + // note: max feather is 32.0 + F32 feather = mAvatarFeathering; + + F32 cur_delta[6]; + F32 val, dom_mov = 0.f; + U32 dom_axis = Z_I; + #if LIB_NDOF + bool absolute = (m3DCursor && mNdofDev->absolute); + #else + bool absolute = false; + #endif + // remove dead zones and determine biggest movement on the joystick + for (U32 i = 0; i < 6; i++) + { + cur_delta[i] = -mAxes[mJoystickAxis[i]]; + + if (!mInvertPitch && i == 4) + cur_delta[i] = -cur_delta[i]; + + if (absolute) + { + F32 tmp = cur_delta[i]; + cur_delta[i] = cur_delta[i] - sLastDelta[i]; + sLastDelta[i] = tmp; + } + + if (cur_delta[i] > 0) + { + cur_delta[i] = llmax(cur_delta[i]- mAvatarAxisDeadZone[i], 0.f); + } + else + { + cur_delta[i] = llmin(cur_delta[i]+ mAvatarAxisDeadZone[i], 0.f); + } + + // we don't care about Roll (RZ) and Z is calculated after the loop + if (i != Z_I && i != RZ_I) + { + // find out the axis with the biggest joystick motion + val = fabs(cur_delta[i]); + if (val > dom_mov) + { + dom_axis = i; + dom_mov = val; + } + } + + is_zero = is_zero && (cur_delta[i] == 0.f); + } + + if (!is_zero) + { + // Clear AFK state if moved beyond the deadzone + if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME) + { + gAgent.clearAFK(); + } + + setCameraNeedsUpdate(true); + } + + // forward|backward movements overrule the real dominant movement if + // they're bigger than its 20%. This is what you want 'cos moving forward + // is what you do most. We also added a special (even more lenient) case + // for RX|RY to allow walking while pitching and turning + if (fabs(cur_delta[Z_I]) > .2f * dom_mov + || ((dom_axis == RX_I || dom_axis == RY_I) + && fabs(cur_delta[Z_I]) > .05f * dom_mov)) + { + dom_axis = Z_I; + } + + sDelta[X_I] = -cur_delta[X_I] * mAvatarAxisScale[X_I]; + sDelta[Y_I] = -cur_delta[Y_I] * mAvatarAxisScale[Y_I]; + sDelta[Z_I] = -cur_delta[Z_I] * mAvatarAxisScale[Z_I]; + cur_delta[RX_I] *= -mAvatarAxisScale[RX_I] * mPerfScale; + cur_delta[RY_I] *= -mAvatarAxisScale[RY_I] * mPerfScale; + + if (!absolute) + { + cur_delta[RX_I] *= time; + cur_delta[RY_I] *= time; + } + sDelta[RX_I] += (cur_delta[RX_I] - sDelta[RX_I]) * time * feather; + sDelta[RY_I] += (cur_delta[RY_I] - sDelta[RY_I]) * time * feather; + + handleRun((F32) sqrt(sDelta[Z_I]*sDelta[Z_I] + sDelta[X_I]*sDelta[X_I])); + + // Allow forward/backward movement some priority + if (dom_axis == Z_I) + { + agentPush(sDelta[Z_I]); // forward/back + + if (fabs(sDelta[X_I]) > .1f) + { + agentSlide(sDelta[X_I]); // move sideways + } + + if (fabs(sDelta[Y_I]) > .1f) + { + agentFly(sDelta[Y_I]); // up/down & crouch + } + + // too many rotations during walking can be confusing, so apply + // the deadzones one more time (quick & dirty), at 50%|30% power + F32 eff_rx = .3f * mAvatarAxisDeadZone[RX_I]; + F32 eff_ry = .3f * mAvatarAxisDeadZone[RY_I]; + + if (sDelta[RX_I] > 0) + { + eff_rx = llmax(sDelta[RX_I] - eff_rx, 0.f); + } + else + { + eff_rx = llmin(sDelta[RX_I] + eff_rx, 0.f); + } + + if (sDelta[RY_I] > 0) + { + eff_ry = llmax(sDelta[RY_I] - eff_ry, 0.f); + } + else + { + eff_ry = llmin(sDelta[RY_I] + eff_ry, 0.f); + } + + + if (fabs(eff_rx) > 0.f || fabs(eff_ry) > 0.f) + { + if (gAgent.getFlying()) + { + agentPitch(eff_rx); + agentYaw(eff_ry); + } + else + { + agentPitch(eff_rx); + agentYaw(2.f * eff_ry); + } + } + } + else + { + agentSlide(sDelta[X_I]); // move sideways + agentFly(sDelta[Y_I]); // up/down & crouch + agentPush(sDelta[Z_I]); // forward/back + agentPitch(sDelta[RX_I]); // pitch + agentYaw(sDelta[RY_I]); // turn + } + } } // ----------------------------------------------------------------------------- @@ -1277,106 +1544,250 @@ void LLViewerJoystick::moveFlycam(bool reset) return; } - F32 time = gFrameIntervalSeconds.value(); + static LLCachedControl<F32> build_mode_scale(gSavedSettings, "FlycamBuildModeScale", 1.0); - // avoid making ridiculously big movements if there's a big drop in fps - if (time > .2f) - { - time = .2f; - } + static LLCachedControl<bool> blackdragon(gSavedSettings, "BlackDragonControls", false); + if (blackdragon) + { + F32 time = gFrameIntervalSeconds.value(); - F32 cur_delta[7]; - F32 feather = mFlycamFeathering; - bool absolute = m3DCursor; - bool is_zero = true; + //BD - Avoid making ridiculously big movements if there's a big drop in fps + time = llclamp(time, 0.016f, 0.033f); - for (U32 i = 0; i < 7; i++) - { - cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]); + F32 flycam_feather = mFlycamFeathering; + F32 cur_delta[MAX_AXES]; + F32 max_angle = LLViewerCamera::getInstance()->getMaxView(); + F32 min_angle = LLViewerCamera::getInstance()->getMinView(); - if (!mInvertPitch && i == 4) - cur_delta[i] = -cur_delta[i]; + //BD - Slam zoom back to default and kill any delta we might have. + if (getJoystickButton(mMappedButtons[ZOOM_DEFAULT]) == 1) + { + sFlycamZoom = gSavedSettings.getF32("CameraAngle"); + sDelta[CAM_W_AXIS] = 0.0f; + } - F32 tmp = cur_delta[i]; - if (absolute) - { - cur_delta[i] = cur_delta[i] - sLastDelta[i]; - } - sLastDelta[i] = tmp; + //BD - Only smooth flycam zoom if we are not capping at the min/max otherwise the feathering + // ends up working against previous input, delaying zoom in movement when we just zoomed + // out beyond capped max for a bit and vise versa. + if ((sFlycamZoom <= min_angle + || sFlycamZoom >= max_angle)) + { + flycam_feather = 3.0f; + } - if (cur_delta[i] > 0) - { - cur_delta[i] = llmax(cur_delta[i]- mFlycamAxisDeadZone[i], 0.f); - } - else - { - cur_delta[i] = llmin(cur_delta[i]+ mFlycamAxisDeadZone[i], 0.f); - } + bool is_zero = true; + for (U32 i = 0; i < 7; i++) + { + cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]); - // We may want to scale camera movements up or down in build mode. - // NOTE: this needs to remain after the deadzone calculation, otherwise - // we have issues with flycam "jumping" when the build dialog is opened/closed -Nyx - if (in_build_mode) - { - if (i == X_I || i == Y_I || i == Z_I) + if (i == CAM_W_AXIS) { - static LLCachedControl<F32> build_mode_scale(gSavedSettings,"FlycamBuildModeScale", 1.0); - cur_delta[i] *= build_mode_scale; + cur_delta[i] -= (F32)getJoystickButton(mMappedButtons[ZOOM_OUT]); + cur_delta[i] += (F32)getJoystickButton(mMappedButtons[ZOOM_IN]); + } + if (i == Z_AXIS) + { + cur_delta[i] += (F32)getJoystickButton(mMappedButtons[JUMP]); + cur_delta[i] -= (F32)getJoystickButton(mMappedButtons[CROUCH]); + } + if (i == CAM_X_AXIS) + { + cur_delta[i] -= (F32)getJoystickButton(mMappedButtons[ROLL_LEFT]); + cur_delta[i] += (F32)getJoystickButton(mMappedButtons[ROLL_RIGHT]); } - } - - cur_delta[i] *= mFlycamAxisScale[i]; - - if (!absolute) - { - cur_delta[i] *= time; - } - - sDelta[i] = sDelta[i] + (cur_delta[i]-sDelta[i])*time*feather; - - is_zero = is_zero && (cur_delta[i] == 0.f); - - } - - // Clear AFK state if moved beyond the deadzone - if (!is_zero && gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME) - { - gAgent.clearAFK(); - } - - sFlycamPosition += LLVector3(sDelta.data()) * sFlycamRotation; - - LLMatrix3 rot_mat(sDelta[3], sDelta[4], sDelta[5]); - sFlycamRotation = LLQuaternion(rot_mat)*sFlycamRotation; - - if (mAutoLeveling) - { - LLMatrix3 level(sFlycamRotation); - - LLVector3 x = LLVector3(level.mMatrix[0]); - LLVector3 y = LLVector3(level.mMatrix[1]); - LLVector3 z = LLVector3(level.mMatrix[2]); - - y.mV[2] = 0.f; - y.normVec(); - - level.setRows(x,y,z); - level.orthogonalize(); - - LLQuaternion quat(level); - sFlycamRotation = nlerp(llmin(feather*time,1.f), sFlycamRotation, quat); - } - if (mZoomDirect) - { - sFlycamZoom = sLastDelta[6]* mFlycamAxisScale[6]+ mFlycamAxisDeadZone[6]; - } - else - { - //BD - We need to cap zoom otherwise it internally counts higher causing - // the zoom level to not react until that extra has been removed first. - sFlycamZoom = llclamp(sFlycamZoom + sDelta[6], LLViewerCamera::getInstance()->getMinView(), LLViewerCamera::getInstance()->getMaxView()); - } + F32 tmp = cur_delta[i]; + F32 axis_deadzone = mFlycamAxisDeadZone[i]; + if (m3DCursor || llabs(cur_delta[i]) < axis_deadzone) + { + cur_delta[i] = cur_delta[i] - sLastDelta[i]; + } + sLastDelta[i] = tmp; + + //BD - We assume that delta 1.0 is the maximum. + if (llabs(cur_delta[i]) > axis_deadzone) + { + //BD - Clamp the delta between 1 and -1 while taking the deadzone into account. + if (cur_delta[i] > 0) + { + cur_delta[i] = llclamp(cur_delta[i] - axis_deadzone, 0.f, 1.f - axis_deadzone); + } + else + { + cur_delta[i] = llclamp(cur_delta[i] + axis_deadzone, -1.f + axis_deadzone, 0.f); + } + //BD - Rescale the remaining delta to match the maximum to get a new clean 0 to 1 range. + cur_delta[i] = cur_delta[i] / (1.f - axis_deadzone); + } + + // We may want to scale camera movements up or down in build mode. + // NOTE: this needs to remain after the deadzone calculation, otherwise + // we have issues with flycam "jumping" when the build dialog is opened/closed -Nyx + if (LLToolMgr::getInstance()->inBuildMode()) + { + if (i == X_I || i == Y_I || i == Z_I) + { + cur_delta[i] *= build_mode_scale; + } + } + + cur_delta[i] *= mFlycamAxisScale[i]; + + if (!m3DCursor) + { + cur_delta[i] *= time; + } + + sDelta[i] = sDelta[i] + (cur_delta[i] - sDelta[i]) * time * flycam_feather; + is_zero = is_zero && (cur_delta[i] == 0.f); + } + + // //BD - Invertable Pitch Controls + if (mInvertPitch) + cur_delta[CAM_Y_AXIS] = -cur_delta[CAM_Y_AXIS]; + + // Clear AFK state if moved beyond the deadzone + if (!is_zero && gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME) + { + gAgent.clearAFK(); + } + + sFlycamPosition += LLVector3(sDelta.data()) * sFlycamRotation; + LLMatrix3 rot_mat(sDelta[CAM_X_AXIS], sDelta[CAM_Y_AXIS], sDelta[CAM_Z_AXIS]); + sFlycamRotation = LLQuaternion(rot_mat)*sFlycamRotation; + + if (mAutoLeveling || getJoystickButton(mMappedButtons[ROLL_DEFAULT]) == 1) + { + LLMatrix3 level(sFlycamRotation); + + LLVector3 x = LLVector3(level.mMatrix[0]); + LLVector3 y = LLVector3(level.mMatrix[1]); + LLVector3 z = LLVector3(level.mMatrix[2]); + + y.mV[2] = 0.f; + y.normVec(); + + level.setRows(x,y,z); + level.orthogonalize(); + + LLQuaternion quat(level); + LLQuaternion lerp = nlerp(llmin(flycam_feather * time, 1.f), sFlycamRotation, quat); + sFlycamRotation = getJoystickButton(mMappedButtons[ROLL_DEFAULT]) == 1 ? quat : lerp; + } + + if (mZoomDirect) + { + sFlycamZoom = sLastDelta[CAM_W_AXIS] * mFlycamAxisScale[FLYCAM_AXIS_6] + mFlycamAxisScale[FLYCAM_AXIS_6]; + } + else + { + //BD - We need to cap zoom otherwise it internally counts higher causing + // the zoom level to not react until that extra has been removed first. + sFlycamZoom = llclamp(sFlycamZoom + sDelta[CAM_W_AXIS], LLViewerCamera::getInstance()->getMinView(), LLViewerCamera::getInstance()->getMaxView()); + } + } + else + { + F32 time = gFrameIntervalSeconds.value(); + + // avoid making ridiculously big movements if there's a big drop in fps + if (time > .2f) + { + time = .2f; + } + + F32 cur_delta[7]; + F32 feather = mFlycamFeathering; + bool absolute = m3DCursor; + bool is_zero = true; + + for (U32 i = 0; i < 7; i++) + { + cur_delta[i] = -getJoystickAxis(mJoystickAxis[i]); + + if (!mInvertPitch && i == 4) + cur_delta[i] = -cur_delta[i]; + + F32 tmp = cur_delta[i]; + if (absolute) + { + cur_delta[i] = cur_delta[i] - sLastDelta[i]; + } + sLastDelta[i] = tmp; + + if (cur_delta[i] > 0) + { + cur_delta[i] = llmax(cur_delta[i]- mFlycamAxisDeadZone[i], 0.f); + } + else + { + cur_delta[i] = llmin(cur_delta[i]+ mFlycamAxisDeadZone[i], 0.f); + } + + // We may want to scale camera movements up or down in build mode. + // NOTE: this needs to remain after the deadzone calculation, otherwise + // we have issues with flycam "jumping" when the build dialog is opened/closed -Nyx + if (in_build_mode) + { + if (i == X_I || i == Y_I || i == Z_I) + { + cur_delta[i] *= build_mode_scale; + } + } + + cur_delta[i] *= mFlycamAxisScale[i]; + + if (!absolute) + { + cur_delta[i] *= time; + } + + sDelta[i] = sDelta[i] + (cur_delta[i]-sDelta[i])*time*feather; + + is_zero = is_zero && (cur_delta[i] == 0.f); + + } + + // Clear AFK state if moved beyond the deadzone + if (!is_zero && gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME) + { + gAgent.clearAFK(); + } + + sFlycamPosition += LLVector3(sDelta.data()) * sFlycamRotation; + + LLMatrix3 rot_mat(sDelta[3], sDelta[4], sDelta[5]); + sFlycamRotation = LLQuaternion(rot_mat)*sFlycamRotation; + + if (mAutoLeveling) + { + LLMatrix3 level(sFlycamRotation); + + LLVector3 x = LLVector3(level.mMatrix[0]); + LLVector3 y = LLVector3(level.mMatrix[1]); + LLVector3 z = LLVector3(level.mMatrix[2]); + + y.mV[2] = 0.f; + y.normVec(); + + level.setRows(x,y,z); + level.orthogonalize(); + + LLQuaternion quat(level); + sFlycamRotation = nlerp(llmin(feather*time,1.f), sFlycamRotation, quat); + } + + if (mZoomDirect) + { + sFlycamZoom = sLastDelta[6]* mFlycamAxisScale[6]+ mFlycamAxisDeadZone[6]; + } + else + { + //BD - We need to cap zoom otherwise it internally counts higher causing + // the zoom level to not react until that extra has been removed first. + sFlycamZoom = llclamp(sFlycamZoom + sDelta[6], LLViewerCamera::getInstance()->getMinView(), LLViewerCamera::getInstance()->getMaxView()); + } + } LLMatrix3 mat(sFlycamRotation); @@ -1445,17 +1856,35 @@ void LLViewerJoystick::scanJoystick() static long toggle_flycam = 0; - if (mBtn[0] == 1) - { - if (mBtn[0] != toggle_flycam) - { - toggle_flycam = toggleFlycam() ? 1 : 0; - } - } - else - { - toggle_flycam = 0; - } + static LLCachedControl<bool> blackdragon(gSavedSettings, "BlackDragonControls", false); + if (blackdragon) + { + if (getJoystickButton(mMappedButtons[FLYCAM]) == 1) + { + if (getJoystickButton(mMappedButtons[FLYCAM]) != toggle_flycam) + { + toggle_flycam = toggleFlycam() ? 1 : 0; + } + } + else + { + toggle_flycam = 0; + } + } + else + { + if (mBtn[0] == 1) + { + if (mBtn[0] != toggle_flycam) + { + toggle_flycam = toggleFlycam() ? 1 : 0; + } + } + else + { + toggle_flycam = 0; + } + } if (!mOverrideCamera && !(LLToolMgr::getInstance()->inBuildMode() && mBuildEnabled)) { @@ -1617,6 +2046,7 @@ void LLViewerJoystick::setSNDefaults() //gViewerWindow->alertXml("CacheWillClear"); LL_INFOS("Joystick") << "restoring SpaceNavigator defaults..." << LL_ENDL; + gSavedSettings.setBOOL("BlackDragonControls", FALSE); gSavedSettings.setS32("JoystickAxis0", 1); // z (at) gSavedSettings.setS32("JoystickAxis1", 0); // x (slide) @@ -1626,6 +2056,19 @@ void LLViewerJoystick::setSNDefaults() gSavedSettings.setS32("JoystickAxis5", 5); // yaw gSavedSettings.setS32("JoystickAxis6", -1); + gSavedSettings.setS32("JoystickButtonJump", -1); + gSavedSettings.setS32("JoystickButtonCrouch", -1); + gSavedSettings.setS32("JoystickButtonFly", -1); + gSavedSettings.setS32("JoystickButtonRunToggle", -1); + gSavedSettings.setS32("JoystickButtonMouselook", -1); + gSavedSettings.setS32("JoystickButtonZoomDefault", -1); + gSavedSettings.setS32("JoystickButtonFlycam", 0); + gSavedSettings.setS32("JoystickButtonZoomOut", -1); + gSavedSettings.setS32("JoystickButtonZoomIn", -1); + gSavedSettings.setS32("JoystickButtonRollLeft", -1); + gSavedSettings.setS32("JoystickButtonRollRight", -1); + gSavedSettings.setS32("JoystickButtonRollDefault", -1); + gSavedSettings.setBOOL("Cursor3D", is_3d_cursor); gSavedSettings.setBOOL("AutoLeveling", true); gSavedSettings.setBOOL("ZoomDirect", false); @@ -1680,6 +2123,7 @@ void LLViewerJoystick::setSNDefaults() void LLViewerJoystick::setXboxDefaults() { LL_INFOS() << "restoring Xbox Controller defaults..." << LL_ENDL; + gSavedSettings.setBOOL("BlackDragonControls", TRUE); gSavedSettings.setS32("JoystickAxis0", 1); // Z gSavedSettings.setS32("JoystickAxis1", 0); // X @@ -1689,6 +2133,19 @@ void LLViewerJoystick::setXboxDefaults() gSavedSettings.setS32("JoystickAxis5", 3); // Yaw gSavedSettings.setS32("JoystickAxis6", -1); // Zoom + gSavedSettings.setS32("JoystickButtonJump", 0); + gSavedSettings.setS32("JoystickButtonCrouch", 1); + gSavedSettings.setS32("JoystickButtonFly", 2); + gSavedSettings.setS32("JoystickButtonRunToggle", 8); + gSavedSettings.setS32("JoystickButtonMouselook", 9); + gSavedSettings.setS32("JoystickButtonZoomDefault", 6); + gSavedSettings.setS32("JoystickButtonFlycam", 7); + gSavedSettings.setS32("JoystickButtonZoomOut", 5); + gSavedSettings.setS32("JoystickButtonZoomIn", 4); + gSavedSettings.setS32("JoystickButtonRollLeft", -1); + gSavedSettings.setS32("JoystickButtonRollRight", -1); + gSavedSettings.setS32("JoystickButtonRollDefault", -1); + gSavedSettings.setBOOL("Cursor3D", false); // Xbox Gamepad, not 3D Mouse gSavedSettings.setBOOL("AutoLeveling", false); gSavedSettings.setBOOL("ZoomDirect", false); diff --git a/indra/newview/llviewerjoystick.h b/indra/newview/llviewerjoystick.h index 51a1c26d8b1..19e544f7da7 100644 --- a/indra/newview/llviewerjoystick.h +++ b/indra/newview/llviewerjoystick.h @@ -46,6 +46,67 @@ typedef enum e_joystick_driver_state JDS_INITIALIZING } EJoystickDriverState; +typedef enum E_Buttons +{ + ROLL_LEFT = 0, + ROLL_RIGHT, + ROLL_DEFAULT , + ZOOM_IN, + ZOOM_OUT, + ZOOM_DEFAULT, + JUMP, + CROUCH, + FLY, + MOUSELOOK, + FLYCAM, + TOGGLE_RUN, + MAX_BUTTONS +} E_buttons; + +typedef enum E_Axes +{ + X_AXIS = 0, + Y_AXIS = 1, + Z_AXIS = 2, + CAM_X_AXIS = 3, + CAM_Y_AXIS = 4, + CAM_Z_AXIS = 5, + CAM_W_AXIS = 6, + MAX_AXES = 7 +} E_Axes; + +typedef enum E_AVScalings +{ + AV_AXIS_0 = 0, + AV_AXIS_1, + AV_AXIS_2, + AV_AXIS_3, + AV_AXIS_4, + AV_AXIS_5, +} E_AVScalings; + +typedef enum E_BuildScalings +{ + BUILD_AXIS_0 = 0, + BUILD_AXIS_1, + BUILD_AXIS_2, + BUILD_AXIS_3, + BUILD_AXIS_4, + BUILD_AXIS_5, +} E_BuildScalings; + +typedef enum E_FlycamScalings +{ + FLYCAM_AXIS_0 = 0, + FLYCAM_AXIS_1, + FLYCAM_AXIS_2, + FLYCAM_AXIS_3, + FLYCAM_AXIS_4, + FLYCAM_AXIS_5, + FLYCAM_AXIS_6, +} E_FlycamScalings; + + class LLViewerJoystick final : public LLSingleton<LLViewerJoystick> { LLSINGLETON(LLViewerJoystick); @@ -132,6 +193,7 @@ class LLViewerJoystick final : public LLSingleton<LLViewerJoystick> bool mAvatarEnabled; bool mBuildEnabled; bool mFlycamEnabled; + S32 mMappedButtons[MAX_BUTTONS]; F32 mAvatarAxisScale[6]; F32 mBuildAxisScale[6]; F32 mFlycamAxisScale[7]; diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index eab371f8b27..36ba00251e5 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -967,4 +967,25 @@ with the same filename but different name <texture name="Cam_Recall" file_name="icons/Cam_Recall.png"/> <texture name="Cam_Save" file_name="icons/Cam_Save.png"/> + + <texture name="Button_A" file_name="xbox/button_a.png" preload="false" /> + <texture name="Button_B" file_name="xbox/button_b.png" preload="false" /> + <texture name="Button_Y" file_name="xbox/button_y.png" preload="false" /> + <texture name="Button_X" file_name="xbox/button_x.png" preload="false" /> + <texture name="Button_Back" file_name="xbox/button_back.png" preload="false" /> + <texture name="Button_Start" file_name="xbox/button_start.png" preload="false" /> + <texture name="Left_Button" file_name="xbox/left_button.png" preload="false" /> + <texture name="Right_Button" file_name="xbox/right_button.png" preload="false" /> + <texture name="Left_Thumb" file_name="xbox/left_thumb.png" preload="false" /> + <texture name="Right_Thumb" file_name="xbox/right_thumb.png" preload="false" /> + <texture name="Left_Thumb_Press" file_name="xbox/left_thumb_press.png" preload="false" /> + <texture name="Right_Thumb_Press" file_name="xbox/right_thumb_press.png" preload="false" /> + <texture name="Left_Thumb_X" file_name="xbox/left_thumb_x.png" preload="false" /> + <texture name="Right_Thumb_X" file_name="xbox/right_thumb_x.png" preload="false" /> + <texture name="Left_Thumb_Y" file_name="xbox/left_thumb_y.png" preload="false" /> + <texture name="Right_Thumb_Y" file_name="xbox/right_thumb_y.png" preload="false" /> + <texture name="Left_Trigger" file_name="xbox/left_trigger.png" preload="false" /> + <texture name="Right_Trigger" file_name="xbox/right_trigger.png" preload="false" /> + <texture name="Triggers" file_name="xbox/triggers.png" preload="false" /> + <texture name="None" file_name="xbox/none.png" preload="false" /> </textures> diff --git a/indra/newview/skins/default/textures/xbox/button_a.png b/indra/newview/skins/default/textures/xbox/button_a.png new file mode 100644 index 0000000000000000000000000000000000000000..09d2fc5623110512e54e18704f48000bccd1c4cc GIT binary patch literal 1365 zcmV-b1*-aqP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P62Prp|6k-4X000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0009lNkl<ZILl3tOH5;B7>1w!|IayiN>f6C2@xd&ZAv?0 zAvDB|j6^3Ib-~8{1fnr9F>z%Vtk|)1CCH|Uvz(1P!I_wdgal2<h+NXvHcgdGg)sEO z?etuJ7Z{jt`+j*Zk7zcV_`Z*6nmCSwQcBFt&7}?x5ARDU$F$a-*7}chI{ov?%1XIj zuVWYnuIpl&CZgGF0^qtXv$L~rR4SEk3x&e{WHL!45<zRt>FFt@Qb~`DjQlV@KK@lM zm#el~Ewt8%Mx#L_5@C9J`s1CQoyX~P+8%su5M@e003Z-JZHIEXOrcOXj>qE<wzjr* z>h(HODaFjp%;fg=_T#CkDSK#W2x&<K0`Ef~|J^p40L!vSCX-|`nZ9zl{Pf|&hl7@7 zA*<D@%;)nflarHnG#b55)B<nN!%bb_yy+nA>m~pL0|UfjvA%<YgKt8i5UN-#zE>`n zzs_Vb2yy!uyyfFX+eitx0(q!zw63l$*4NjQM@L7GR5%>|tiQki?Y_P~ZclUd-~!{w zM6?BTgZk6FQI%3$TwI9b<KtcFy6$K=9R42`XavEqMu&Z@vWfcJ!oL&XM}368jfh60 z7>03A`o4c-9UxFz;N5dDeT9Dl;$MLf9(vS+mnI4!a9!7wwr%fTUS0wq3Ghu1{kq0g zKJ8ChI3JzkOCRs9$4dohG#VI&u_t?bdw(gFN@%UoNP<Lw8*=H`3t_KD=vWQYQRyV; z^$70x0C=89KA$HRi>=G~`S~^5wkx$-?V3Q3z&^GxezTB!3bn6L&n&DH3;F8xgle@) zDwSGaSXela6B85dL?ZF|=H_N_)@mYuHIR>9LA(&4uc6AnB=Y+Z;u)NroUp&Yf0;-m zzUc1m)=~&THk<t^l}dg3<jK?E`SU|W02+-JAkb)`!Skq8{$XQd<1(2{&SbOMJs||5 z)oKw00jsO4<Z`+9i^bx1=jZ2l<MBAQZ3ED1wI~z{M5EEIv9Yl)mzI`(w=4^#6rx_Q zV_6ngS675WA=cK`tmWn94{EjAJD%r_0&Zt#=Wb6=&yS0XiyOnk!-3;C*tX5t*%|)< X<6~@rq?&<c00000NkvXXu0mjf%A9>e literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/button_b.png b/indra/newview/skins/default/textures/xbox/button_b.png new file mode 100644 index 0000000000000000000000000000000000000000..d88699f8884c7f34b3e8c4d0364bc38b3a5b5366 GIT binary patch literal 1363 zcmV-Z1+4msP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P61Qr6BKQcxD000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0009jNkl<ZILl3w%}Zlv6vlt&-rS^;FJ&CCHMVwwMmw2w zq!dddQqt0e&~{UB<rfqNoJETk`~zm?rqE3(g;H?gDw{!=z?4o$OInK}BTg|jBEdF_ z)HLMN<i`8HT||dI%fsP3A3R42g#sRrhgPeFX`1-`er9H7ZXF#ReQ4YEZ4q%PrFNsy z=*H60(taou(zb15Sr(4tAf-|X5y9{GGd(>W-r3ptDx1xI6p2Knv$GR`a=A<<lVNyx zcq1GR&reNF{gFr{0FY|6ir4F9a&q#6R4TQ4=T7uy|LeE#SQeT#1dV;^aD05s^S!-` zSS<F*{QUfn6B83ip-^CPaWR}sCVz{^<2OUEyv(4u0F4H;z?q{cYmH+-;h%HT>GZ|; z`1rdkD=W`LYfU5)dDz|E{qf-7Abu1N+%I8hja;!i2u~cvL!|*lE|(*h%WZ6LZ@*{e za=ACs>Gap}cw9`=#Ep<JP5#pGSUDVMMXw>e>M~isY@x35+TGoKZEI`mkt>_cjt>nD ziDg-Bzq;+bBJhiH0O2iDxPf3?Wn!8pkw}D6sWjngG#YOPgF&vL5wvIqweZ00#?%@= zn#Zk6T4KOew1Gf?)6>&o!!%7q1pa?QLmkD5qd8H~#H8Pl7wWDdBDgHe%2q0s7sG3g zycWK7S_qnZD27ZIonr7W3V>RzhR5SMGJ1P^pJXx_9LE8`z7o@oCMv>h3~m@EN<h)x zQA&}`W(fv^Kgs#|xr~jCJ?-h~8Sn4!M+<ymT7->u4@83&;khGxf7wEbCZEr9aB#4< zy1IJT<?(p*$jHc-Yin!k!C<hXtE-D|S~gL`h0kcqDLa=u6NMo{xm;#*b5kV}iTklw zOi86uA)n8)u(0sy`uh6H=sTkwq23UNVE}?$cT#EoK0D#}UpG}e9{((rO8ro+R*_<{ zh}-R^*=#a9JNx$j{{DBxV)5?4zyLm<4}f~T&f(!9mSydYj*fnwOeTM>)oSf;ytufa zUa!;9(SdE-*tTuV&CMmw&d%O%Hk(ncH9nv3&p;sXba{FCQD0x5@_M~A8VxMV;y)GV VY>2Ua5;6b)002ovPDHLkV1jF|ebxW~ literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/button_back.png b/indra/newview/skins/default/textures/xbox/button_back.png new file mode 100644 index 0000000000000000000000000000000000000000..af2ca91ede0f35c00e8306354c68ba400f7467ee GIT binary patch literal 1330 zcmV-21<m@2P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P62Pq=>$%g9y000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0009CNkl<ZILmF5%}XP97{|Xezu(WGGZ~S=P%v6F8uCI| z5nY19BDPhikSYjXy!Nnqun2-41aAt8)I;09Km<LkdvFh~P3VG>vK3RYI&m~G)PoSC zjEQ7q-g@e^Tl>8|56|a$;dvhJ@$nI+X@ci@0Dxs#+~nls3r*7oOw;VJEDMB?-`m>S zKCG^;p8NfNmoWy%abVjvI9=Dl^E`679F~@r;)O!tM@`dSMWa#p{eA#|uItF>^N2(u z=~yf_H8C-v^!4=t04UG%P*oK(Gc#XZTwJ{E?Ch-V>FEI>1pih%9*3rB1L<`7H^VSS zd7gitOeR4AV0n4DM^Tiw{r&y5vMl5O#27<+dpjga5)Ka!-!R6ylgXq)P1EF#j*h<X z?(VJ)1OjMmZ2SZ?O%tV3$+H82079XVkk99TxV^pok{cQtdYR2;e@&%Q7#$tO@bEC6 zo}N5F5Clw3O~Eh>&u3W{wzs!2GBOgUrBdnZNF)M62nZoKJ3GVr`Z@rhuC5O8cpQu| zFvj4zE-IA@D5Z$SVz|7#d_~LU^5?-|@Y&2QEiG7FT!d+wo{v(B&CN~h@9#sBBvh-_ z7nBgfIF17V*tU&mG>WygHSFx{K-YClPfr5?IF7^I+#G6ZYP^JoVSviA{AZ<70RZgo z?&AFX9JXzP5CV?lyaW5M%H=WyK~SkANk3<^*|~5y3;<A76#&rM+6qw=v9hw_L82%k zm&?JjEGUYCR4SF`PESwyv9YmSQ&Ur-xw-k1Dxpvalv2-jT^EHy0jjFv=H}+Z!NEa4 z4F-cwB9VB#x3~9;BuS*czTN|_uCAW7es_0=<KyFMZ*T9U&*yV_N-4Iswhjgd2fxi^ zGWPZLH5|uz20D%dP1BIcWUAqC_?v}=g+Cm}0r&9m008j&{TLq~?>jj;`KeeeCOSGg zAc~^5dqq(o%kp7YSJ!v5v$G$g(I{Nk{pTB9*98D*n#Rx1&kx++-+xgo7C&Q*F+mV6 o8yXtkZES3O^!a@5-?0Gj7bDO_wmKYVr~m)}07*qoM6N<$f`8y**Z=?k literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/button_start.png b/indra/newview/skins/default/textures/xbox/button_start.png new file mode 100644 index 0000000000000000000000000000000000000000..11db7f3de1dd4e1567e04f7448f987e18570a0fb GIT binary patch literal 1210 zcmV;r1V#IaP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P62PrFo6+TY@000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0007!Nkl<ZILnPwO-mb56g}^a#OOo_xEK|KAc;~mlqv%W z{Sab6vyj@2LN-<?D($YD{sT95+wNSr5d>E$lt2P4E>!5Ii8kiLFe@uMXq-uAMl;TP zU5IHZvGu@(1NWZG;eL=xrGnPhR+y#<kH>>jsYI5Sm*rBa^n@`MAcTNYni(D*-dbH< z%~_U(%gal&x3@#rb&zVc3dR_0+s6F-yqwKu-=CeGJsTVxgva9n0BD+qgM$O!*Vp%H zbaeFX`uciV(=-Tz0HW(UEX%^;;^NC>GWjta4!8C8_CgQ@{0ZB(p(qOW_V(0REEeC` z*hp)dcGF;PZtih1nM_SgOtg8uUi=Hk$H&;&*->X^X2L5gD`lc63XMb}-~0RfgFc@R z_d%ghK&@6wWV6}lBpQuIGnq^(7K=d;1WZj$K@`QNLRD3fPNz|?*Ri>|$>Z_3zvcY= zd^`{cfKm$1IV4GfD2gD2-08sOa$#U#fE0_xNQ-4zk2*U$8_7zgf~%{mrb12A8r<vk z!f~93Eq_nj?RLZEay4z>cDoy#5CYD*O(~`OrfD`3jIledJC4)f7Z(@coENDiNngw5 zGC1drBF5OAaeEVmLV=HrjBJr~I!zZA7WM;yz=Q7Y?t88A@bC~PCnt$wvG|;ZLLoLZ zH1uYBdz<OH{$H`Gs>tW_hAhkPOw$B)90!R+;!7wLdX-A0*wN8Z(>XYf14U7=ySr=2 zvixFfY%E`|*KbZ406IE4Fg-o}G?U4EFbpH;_xmA=A~@%$R;$S6a_H&l*$M`OuO}xb zf6UI#f^+`+8wEkY_4PGQPfzL6(o&>WtBo6m;WG@wlqBhAS6A2PwY9Zxgb;pPD+mI9 Y0pjdedh4ZYc>n+a07*qoM6N<$f}!Uo*8l(j literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/button_x.png b/indra/newview/skins/default/textures/xbox/button_x.png new file mode 100644 index 0000000000000000000000000000000000000000..d6fb980b78bb03ff7158a4444234b4b8b82f4cfa GIT binary patch literal 1380 zcmV-q1)KVbP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P62P*&{pQVie000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0009!Nkl<ZILlp=-%Dg=7{@>FJI8VKFlV&!M<X%W%BbnC zM($evSb~kxn~3yku^^<{qN^^&{)Fg8D!PaeS-ME{!ZnN;5{j8|L4s{kbW+^)2U{lY zoO5P&CY|%XU1+;Y-`nT;@_czde1+pUD5VfWAcP<o3^G1G-nzE7c1<bOSy@?WNGb0$ zH#h%0Jw3f{+cr{4fHR-tH~>sePI7c~)Uvv|`uXne?i;PGt)ix;1_0Z(+1S|7ZEbBo zc6WDwGB!50F)%OyfT5IPW@d){{r%ULmzTfq=<Enx>3s=*g~4M9x-NBzySsOX6N$vt zLZR@M>$>sb;b9EJFi5A<?Wt61zOS#(j9hpTUm%26{2N_3!joWBK1HCep4QqZRxo5H zlgW9l_2r?Vp$(~&5}8cqi&!jXHa0e*t1Re!AK&F0XsI!@#JF+;(fc7PP)B2Z1MThY z=JxjX*N2CP!nd=t(~(N0KI`xAM@or)c!aEKMAXN?6HwcNY<dBG@GI=Z(L!Tc7RhAt z*}c8JAAHr-)$fGE;h{(*0)Pa(2iq7;J&15KzS`$d<%g74zd@^$vmGhXTH`p*wmdyO zjaioU=v^8Rr+H4-Z-KuWDgt=xx1gLqpPtFGENt6umZee&Aq4-ItOy|V83ExppRk^D z5rR^wgbatn`}utSi39>FYpG}-LY=tqkBe-39iQI<9v{l*^E5Ox{3V0IV0?3P6VLO` ziGy+RI;z4%W#g3pNZ>O9$gZ~$=Q)&8WV2bq;c(oyu&{7Hkx0DhdEV2ZPzc%dGQO5q z@a%o`@85xQ4^j6#qV58^m`6K%92^`_E|)X2v$LPdNF<`7(dY;1bh?<!<q+i}Ix~;D za}zBD8bLX86aCv9;v|n_KVW5L#p~?s{3sL(DPh|-mSr(AGV<=y($bfG1A|r1G)0h7 zoI^c}trZ;H|C8IdQ|jvA;CqXUi{HAgi*Q{Rtu?`5kkQf6flMazRW6si6pO_$O%s4Z zp}^MG7J)z@)6>)Q@!Z_pFaP<(@$oT!zaOO(T5Gb|telvbxMth-tHomRqEZUeG&e2F mTAG@g`Y9TXD$nyC)&F1A=yJv9cyB}i0000<MNUMnLSTYZ`IB=1 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/button_y.png b/indra/newview/skins/default/textures/xbox/button_y.png new file mode 100644 index 0000000000000000000000000000000000000000..774dbb4a67771a57377bac723e922e9b70987e89 GIT binary patch literal 1336 zcmV-81;_e{P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P62P!ltFkpEA000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0009INkl<ZILmF5Pe_}07{@=q_f4WPO<ql`8nbkjMtz-Z zhq6wCtcSvwScdHEpwx?Wu*=Rl4naKZAnvk(I}cID3LTbta7ql>R8k$mV0CqIYcA$} z6OA!>f4?0ZcB}gyp3C=nzF(ey!m=!sQs}x)tyZI@rG>Gvv9}Hm4(>XR(=Vk&*YzFK zG?(Y*=5{U1Len%H$HC=tA#B?QU}<TI#l=N4lgWI!ySw{gZ*Q+K3<ChmvdCt$s;jH( zhj={xd0SiCULuhIxDeRd+G2Wo`h#>jz1ZE|?YnW~P26r5AOHmj>gQGVe}BRL{_~S~ zJpS>}(9qNI@o`*22xezz`%|gZ_jm5x_V&i2yb*Hq*YP=p;~F4n4{CHY`)LcB`2E*> zYinzZUa$AviHV7<Rwxw2&d$zPrfGVwUk{^G<H1K74@O)lbU-nFzmZSwdjN-yjt*k6 zm~VS~dsa#*^uxo$_ck^*z8D-FMAP8(OefqTFmLL-_*2puQrx}W$gjUuNoN(H2m}JG ztgLkH?d^T18;0?)wYBwLdwV;eflwU1tPy{wkzfFBb~bXYQS$ZUD%EoUF1JuBm7Z(I z$H$RCAaKE;04S6+wsy~nMO@s9NPfvm?6SJ#0Sv>SR;zVul}d%zAy7PCbErF#YE9!w z@@fvi+1VMcNF-7ym&;ekV%g!OBB(2{PqqKJ1Du?k5DJC<(4x`k&$(O<DdqoosDH&* za2$thHj7~xPqmqundM+G`0VKD=xVvRIHlJm^7%aBa5yzNIhod)nwq3(nvYVclw(=e zt0@S{lceIuWF7I33_!71B$-TB`uh4li$<eL*tU(|?`LFW<l*Y->Nf)e16riB6HVwK zB#MjvrIh6JdDhq0E5pOXpU%(Ee{0(|qEsrOl)~@#Gdeo@{^sW9Y_(c_I~I%K^Z5WM zm&@dGIfB99v;O}6M+*xJYqo8p>pH@+tjkw!XlNjl$!Lj0;$E>>96mig?e%y(ZnxXL u+1%Xx)6~?|a!*f>tk>&!JRT~Q3V#D(kX^#ZbPM?a0000<MNUMnLSTYZUx4`l literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/left_button.png b/indra/newview/skins/default/textures/xbox/left_button.png new file mode 100644 index 0000000000000000000000000000000000000000..b2a84340e63c9cf3bed53df36ad71ac318c4ee9f GIT binary patch literal 1123 zcmV-p1f2VcP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P62P!NyT=*{l000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0006yNkl<ZILnQbJxg3c6o#LfJNMHCR~OO3g$uSy5S3sV z6wEKMv<UeD60pl3*e;c+(nuPALBM7~5Uc`Q2`Q375oAGhzwXZ7nYn3lFKRZB)0|<> zJI@&o?-BR+_XI(J)|x1a&|2gBKE@cNlmHY(fs_(!ElMdSlL=82F&>W*y<QI?1VvF) z`F}zPfpZR7l0DDET8osjf|bJZT-Hjh=Xt0+&vDK%J3Gr{G9d_pl03C@S?l$BXsuCU z7>e!f?T=ZOy)(x6N-2ync%FxIuIgUS;m_S@d3pIuyWMVy-QC@{olfW5*4EZPyS@x- zE$8Rw#opfDYn5eLV}5>~xw*Ni;{E-7PESvX<Cw$4L$ubMoSblVbtUfZ?wYbztNpmW zz5VC(S5{U4@O_^oNl;3WrYS-QwARR0tMz?xaq(BT+now1!DSweM#OOpKp2L|X0vJ6 z*492;US7I>zyBAY)9G+@bj14lI**T!)M_=Zude~f^Bgf6jW|0y<M{aa{l&$_=hf9! zwXm>27=}~L17M7y-EOn9v-5_BhX;nkAw^MeaB%QyV`JlMnx;SN_4*`95|<>2i{toN zZZsOh&CShEMNtSb7z`>`8Dq$@jHRU|Zf<UZnVA`3t;IP<5CjZ|L+bT9-EP;VX_^lP z14O^y$2s@R%B9=N!9CrTms;tZLn%d`=P0GB-@J6;)5pdbO2<my_Zg4JBuPS+WrSf^ p!Agh_0&6Y4?^mmwWf@Tv@f(I}Jo;HQh!6k(002ovPDHLkV1kCz1eO2* literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/left_thumb.png b/indra/newview/skins/default/textures/xbox/left_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..75cbfd30956152fdf4af609439de3e72fb0cbdec GIT binary patch literal 1383 zcmV-t1(^DYP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P61P>7LhUyjo000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0009%Nkl<ZILmF3O-L(O0EN%Jb8jYLlADatpox-DVh}<U zf)d0+tv(SRT}U@wyK2G31MziNsFmlc&?2}l(n6ONEJCGPP>LlQL=htxB(Z8YCQfdC z%p{piS5J`kY|mMIoR3H;HPbYklu`hIVHj*>W#wbTFjBQzt)Ef~r_*_>>-wMX-n~2E zoVOK4fo<EcEXzTP#UkgNw>%yXW@cvQbGh6~tyT+#!(phZ3IH%o6Zw1|jIn$ok@#k3 zXXl4Xr2^ZwIVqRRTnNz`A0PidpU=NZCX;YFok*oph(sdT*w_Fe1gfgy>FEiXOa|d_ z_}g?k{r2(kky8Meo16PIm&?7GoSXz>3;+-e1`&xw5C{aI>pB2{bB?L0DO_J)FHKKR zzp`x`wB2r_P$+zoNF=}*gJoF|Lg4);0Kgc75CWEEfpd;{JdSd?{25~m)ai5rfRj=R z#uzB2kW!*vufy;6V`5?gx~@Y?2}&sxMS-Fy0HBzr30kdI(bd(poy}&^ZnvLtH#awN ze0+@l{(dmVKnQ`Z>u9xFxVX505MoQyG!WA?`N_#iXJKJsw^S;9luRb!@pxd{HaeXS z0Dw{oLI|Xk$Ye6`dcD6bFE77NrBVvHySwA_^Yfn{9v*%dkH=Xyn?+Ag4}!rU91h2` z#{2twlu9MUVliA^UbaR@N59zK-u_W(Hk;#HTU$TR&d%~sD1=xn1|b9rg#x6MD3{A< zG#VHh8p6oP2m*lsLZOgyaB%RtTCM)B2qC`o`~Bm6eSOckE|&|9MgzUQz3_UyP*oMd zU=V~50D!8hpp+_7N`oni;=uoeQi_L%2Xs0exZUpm^n?&tmPKeZ8vW_?^t4^6R9*}Q z1_q#M8iWuCg+ebnDJ9O%&f3Gn!@nrIySx9S(`jRGZ|{}c?WUThJ^S|geDL{v@4chd zYT@?w7W@1A?Xj`3g|)S{Ux{HDyi_W+78e&kJU>7G`sU_lIvS0lySw{^g<`RYtE($3 z5{djVI5_y#>gwuW;c%FfVzH>XT&`xb*#sektgo+saCCGu*=RI|YqeT8W2~ttiWEYe pC6mdWrKP36>-9P~=df+t@h`$mR0t|aP7(kB002ovPDHLkV1lT1ayS40 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/left_thumb_press.png b/indra/newview/skins/default/textures/xbox/left_thumb_press.png new file mode 100644 index 0000000000000000000000000000000000000000..4e710f9ff9ef80deb6ca7d7f54363e56b611af3c GIT binary patch literal 1484 zcmV;-1vC1IP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P62Php^w3?Ry000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}000A{Nkl<ZILkecUr1|p0LQ<-bIvx)GY9AFpMTKU%bZYJ zVl;KE5bn^2#Uu*cn~2_!aKQ*edPwlW?cuVFsH^Cc2wu8K^B+c*2)kZKjlw&avNopE z?O}R$cG%pho%NKT*AIN)1Ha#IDV0j3TCHMrb(L&vY^V!`0whU-AP5je5v5WIcXxMK zTwGK~qfv5ye~)xJO?*Dz8_f0fb(7oeUUfR1pL)ICe<mj<f4I1~_*|`4D+Yr>93LOY z?Ck98l}bf@c6JsV8ylONpPy$Vk;u1AO-)~udcBUdwY8sgI$i6|&W^|Ba)s1tb;tVp z`hnSOekDngDv?OMHa9mnSu7S`9UL5d<?(oa%;j=_PfbmYQj#Pg91cIR+wJd6OicV9 z4u`899UX7WviwD*Qh7>I)YI11)}^+#wzsyow>8t#(=U5_d*9sL+?<yr2}BSC=yW=S z!{J{W8XDgB`~8q43C+#TpePCepePEm*(`XTM<5V@APB#Wj*fmH2m(mCT*lts9=))z zuzP!Z`>4CS8x%#s>2$(kv0!<58MRss8jS|ES`D#S3_Q<o#$vHgs?{o}N~MB8An;)> zmwPlYFaSkSK+`nzdOeIrBY2*NUatpD)2P?$a5x;exw-jxczD<&iXteU=TWItKC;<t zAcR0s6tFA{LJ0ncqA0K|`w+L;Y{+J_BOJ$ps@Ln#XfzFqqJUu-&@_!=u?SHV(bCca zx7!Vq$pk?V9=xI`P^nZ6hlhutW3kw~kw|1w6h*4Ny&WveqE@RR9*=_%0+mXIR4RpX zxeTpVi)yus7cX8QpU>NJx!g0-)6?@!V`JlI0FX>3(bv}pj^iG72q7SZpkA+|P$=N^ z^c0<)oseZ2vMeuB48ssY2s|DSwzjrF2*LjTKH~8>GMNn0=``Z;IQI7TpwVcsySodQ z%LM?SX&Q{lWLiHtIeEOYvcjm<Y8Z`19334Y5{aN#EP|$KXti3{?REr%LFn~*xZQ4q zLZN?$hK8Qe=jZ2FG)+4>j<d|n%%H!&A4a1Qp->1c%c4*y;Q06$gM)*}=kr)vT7tvj zfL^a(x7+RC5wF*4Vi@LmCX;z`b#?XFYPAj}5(#h|2bN_40For3P$;0Qs|(3w@)x7g z_`Stq`I6`P5r(3u4y)BV5(<TirBdm+&*yv3U@&ybvfO=ndD%n=flj9r&1UnT6h-|N mjYj{FWmyRZgFmNIDa(I1IijWdcq9@40000<MNUMnLSTaT-l&fN literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/left_thumb_x.png b/indra/newview/skins/default/textures/xbox/left_thumb_x.png new file mode 100644 index 0000000000000000000000000000000000000000..5d6711a6979e2a2a97368397587992b494f5f2e2 GIT binary patch literal 13303 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 WugtXaj9$dR1t`m_%T>u(hW;NSoTbG8 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/left_thumb_y.png b/indra/newview/skins/default/textures/xbox/left_thumb_y.png new file mode 100644 index 0000000000000000000000000000000000000000..3384a50c7a05c5de81e6c685afb4f1a88764a7d2 GIT binary patch literal 13103 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 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/left_trigger.png b/indra/newview/skins/default/textures/xbox/left_trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..aa68944df8f41d50cbafe024c56a1a180a91e2ad GIT binary patch literal 1134 zcmV-!1d;oRP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P62PzaCUO=$`000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0006-Nkl<ZILmcXu}<7T5Pdt|-NW`BCs1VWq$`j>N=4`p zU6hhEG)PE%!FAC!@CW%1sM3%wP((s>M&};B;E04k7kma`uXiU+ya5HCw3=dO-n@A` zVmh6Ih#-W3wH8uJ7-OKdMjXdDI5<eMEc-A&Kc62R9c2Jm2m$9Df*=6y@9&Z4`HMFk z4zabh^?q$_?WdHoT3TA-cDv0R8yjDl+1JfxGl)FT(Le}+D2lMXz5Q`K9{*TbS&0XO z0kqaAiUL`d{Z7;L-NM3xZB$6-+=~_V_xHOO7Z=~w*Vp4-ujk2wAb@kOtF@Lw2<x1K zloAvK0RX@`2c;C!G#w>L(tF<AfQZm;xBdQARe_8#enJ#QxVgFcG#Cu<8k}=zOt0%2 zb8~Z`R;vXe1nRm*S(aetRju`_1Vn@+Nxa&JhX>Hp(-W8(N-6v$V<E(w3a+oOz5Gt6 z^G|^>231v|u4}vnB0|64hqc!K3>jm<%#cz-YYi#on*`1|+}_@Th+vFC7>1BiN-#65 zwEzHXEjBkdvAn#DlamvSMk6dPF5>L$3~8F8+wJ;+Wm$rnMk4YtiXwD69RR@L;US8m z!0G8J0O0ZQ5zP@Pr9e$1GyCYALl}k#!|=Z~lu}@3PeQL4#pCf9N-6B_?xHM9TwPtk zS_@__;yAX?>tCGm-Q6Af{r>U!`T3X2%S&IBrfHM=-fFe##&{xvn9XM1VJRghlL-xn z!_UT;RjoCus)AAqLWo~`dwa(_J3DoAxyBg$0RbK{oGeiuumAu607*qoM6N<$f}j-n ArT_o{ literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/none.png b/indra/newview/skins/default/textures/xbox/none.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6ec1c74c0ef84c267f5043ca5284ab2a82a6b9 GIT binary patch literal 1301 zcmV+w1?u{VP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P70t^8RDuVC;000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0008)Nkl<ZILlp=%}Zlf7{-6+<mO`xIWfJO5GldV5KX78 zmfErPqjY6;t*c^JLYe*x;-BHV3z5=|*o7kq6LFR3fOL~OXsS3>LyHaSy*HVpCik2! zlFkf$w(tA!KD<93;kqtbYlIL8A&A9dEG;c@baaH)ns7Lbl#;>0LDtsRa2y9IB|yjL zx-I}KD=Sp1RSpjixwyDsXlRJu-d+G4$Km++nBn1JMn^|kTwG*oY6<{LYt8!lI#*X$ z?CtIG_@l=>8UKP%(BiEGBcF`$>f#moe4cu}j^}yI&COw1mc{=5KE+~@iHQl)4?iOi ziQ_l^#?-6$60GohMEd#}N@P&6IE6w1V+^yivq-HqrBaD(HcKj%!aPtg{yl-upJJrJ zG7{^_Q^fcW=tv)_{v^3vj<d5fuCK2NoS&alEEbuZoJ2~Ad0j<5NFn;O;0s7RLJoY2 zsr(A(&oRQFl%h~5aCv!2pr@w?+qOxk(*Q`ozdgem7(>{D1QH*h+plRK{)o}{ogFDL z#^Aaxvejy#lzQ_n1Bh0Q*2`xQ>VaSc|K&4i*Sgb=lu{j}&1MrJ1pk)|Mi8b$K!l?2 zSi4+=pxJC9ZQG_+tG$yzKsZ4#H;caa;2#e;{0)JS0^S~~)oLV@Nn|V*<K*N7-}k%3 z!TR`HbTEo8Kd1eBo`4lWj(msc=FnPGE|;-wo50rA7WsT0-}i~f<H&(82|W55-?_s4 z_A|JDAo@N;^gYBhY8dyDN~J=(-DYEB11p_QlgVV*-Q7hgg`I3*O243Q%NQX5LA&%5 zfkX~*U&D27IXF0AW@d(XJdSW22c;DA^YiTN>@YDk&HDpsq!eAKo!CZ0<<Gx(@uJ9A z)6;BkZ{v9$!t*?gF~njq78VvLl}g;*-I2{^iAJLU)a!LlPfv+NB8-iVvAMa)e?D<@ zb3-T;LTimNhH|;g^71l{<Ird{&{`9XMo~(!y1Ggxlfn1>H}(G)e!xc`?0M2%00000 LNkvXXu0mjfSZ-Q} literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/right_button.png b/indra/newview/skins/default/textures/xbox/right_button.png new file mode 100644 index 0000000000000000000000000000000000000000..094349661cb1e76d8c2e3363b3a0468c5aa4d0d2 GIT binary patch literal 1139 zcmV-(1dRKMP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P62Pz|^<K?~p000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0006?Nkl<ZILm#Lze^lJ7>1vjoxQzX@3=$JDA<S~F^CYw zD{TA=VkiCqR)I8W(go~O*=iS3rnFORQdt}}R|pbP<OG$4+q*T~{<xV*wHwb%@>Ns3 z&pR(4?<WR>0a|Mu$H7_)fDi($HA*S+Jje4qk|e?NJn}q8DTUS=Aq1k|?<0iZe<Oq_ z&7Y4n#vr9Eh0h@=Wtp(hT5C(Ks#GcrheH~T21=<h_d=MaX&K*jT>$$1K91ucthH=! zZ@<02zke^K44x(^ek}Ge8jWxq2Pvg(G#Z~zPEJ0Gy}i9xr>Cc#ot+)=Ji))l7(=_= zW@TmNjp}y0FK1?E#Ky)3`}_Oc-rjO`b;a)PE>RS5e0+>CX2N88dKzQQ3t6dD09ajJ z<>uyw<>h7O=jTb1goT9#eBYmdt+m|U-BGL6zRN7j%8jnCuVaj1G#X*8CCf6Z)#`*n z7>3mA^&dw^N8hCDx>#$8qKLDzGr};W+wJ1}K53c~$MG2a`1r`><)v9$Tl=uMxTsaV zUhhUx#QFI-N+~WbE&w<@JRAelG$jl}I-QQ*+S+>8YPG&<t>OCmT5N7^ewv$``{nz- z34*``L12ov@B60NY-USKOFvt!)|Z2WgV)wt27>`{93y(Y9?fQxBuU&jj-?O+$8kv0 zlv=Guuh(OCcGf;TJY>~sm8q#IwAOzb8AVZfNKZTev`EGn9LE_4i>enL{~KID#Z@Y$ zChkF|X^QK*rF#J@rO2`j&+`}#hXg@Dk|emUOP=RtvfmO-Kzv*oX<z^V002ovPDHLk FV1iwt1V;b> literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/right_thumb.png b/indra/newview/skins/default/textures/xbox/right_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d254f7847927720eef28aeb74c0f510f1f711711 GIT binary patch literal 1374 zcmV-k1)=(hP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P62Ph`yzjLzy000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0009uNkl<ZILmF5Pe@}|7{$-M_q~^A%!`S-F#bg+(P)H$ zAcMA}qqP#OqSB4)?mBcMw%rH=g1VY6#6_2bi)Pi03u!5_2*!Vi0gJ>CA|f`f3?aFR zc_w-9-EJn+3O(E3=A83=hvafOFvd`+R8Ut}hgdAeR##WYN~O|ghGDdurU|FhnP!X~ zZ)|KF3=9mIrfEV^6qHIOkV2sVAp|r{!`Rr^H#avoYn4i+t*fgGHk%CqP%f8odwUC; z&34=0-~TQWiTuJj2V)F`a}G_@FgiN=^Y!)h+h8yVRaG%HHHC?Z32@G_xw(m_rzhyT zj`Q<#_<X*fj*gCg<eY;7!0hbo*U4n^?fCdOBuN4QjEs!n`1lw?2+YmR0RUuK#^mHA zlF8%`p-|{cAq42z*%|Kc?q&xE2O&ukK4u0X1k=;g=<e=DB9VZmX)sL_k|ZGz2q2ry zE=rOFy1TmzS(a5wDHvm*l%m$l&dv@1;PLShg+c+0F-VdGN+}G(5an_ibZu=7PN(y? ztE(%RrU|#(4FEVjJw-eoM>rgY+wBG+1TL2g)oQio=y$u_4wBF35sgOK%F4>0g+k#? zFc^fUX%IrdvMc}qr4)n^aLy5n#n9N;_{Y}P)>pl~y%rHdU}k1!DH@Hw4+H{IB9TCI zb2Hl7+Mp;30H9K-Ae~Mlo6W-S_ah#USBHj%zFk~g{6H2K7GCY`?Hz?eA*ohWE|)_p zmHOmDmSuRoUbtK?P)d={=MjlSs`K;nubIte`@XZY^K*~K^U1E=ZilYx@OV6EXlQ_< zC}?eM1tA0gpsFe;r7V-lWF<<eTm%0Vr4$bj53no?4u=E(C&Ms6TUuJe7Z(>su~>Wt zJ32aGx7(p<8rs|2pE1rk;_<lQ_xpcksZ=U`aB!gS@9%%%a5!jveLZSF;dZ;>a=E}5 z0{~R3Rix8t93CDT!^6YhEiEnW63#g;FE6pazWzFyOs?MF-%onIUNki|J-b3ClR+w# zGJAS@_WSz!-i5>AQz68^Yb1m~RaGo6FTXfBIeBB6=1X1IogbIV6-D{W=krCjx3~W; g7K^Yf3zSm)11?%`o6$zvs{jB107*qoM6N<$g8kiU;{X5v literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/right_thumb_press.png b/indra/newview/skins/default/textures/xbox/right_thumb_press.png new file mode 100644 index 0000000000000000000000000000000000000000..fbeba206dc0cf21ed11c8712ada9a57ed02f89a7 GIT binary patch literal 1493 zcmV;`1uFW9P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P62PhM;47ZQ~000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}000B5Nkl<ZILkedT}X0w0Ed5n&(YV?6txd)Y0*t(4WS^G zR$~kt6-7(vVi!R-`4TOH1*?l77H&jQ%V-y^Mi5&t*lSo5y6A%i*=jL%F}0{6I{Fx$ z?EFp3W5=_LvG?w|dw3oU4GmQ!5(&a_9M;#@v9q%yqm&|%NFW}MBbiKs<2XD&Kf~>I zD`K%2xx2eVDwQIGgM;Nvd3kx+%F4=DJkM|U^z=vr0|Vb)UtjNsLZMfb(sXTYEoNqB zayK?MR7XcgU%Onct%ZdJ_2lH_($mw^FGP|gtgf#5G#br2o12?mZEbBHg+fuXwzjrw zGMR#uQh7KW&KVmU8>E!}zPGnG-qF$V)6LDzU;X|4-7=o%;q&?CY&Kh+%jG)W+}uo? z&E^I{5I(1rE&*67DJfYnnM_qapYN5+<@&X*uI^p0*ZT#f6eO8UA~!b|KA-PEsZ=(N zjEo?aO2KF}f?*f{fGCQ%y1IhFV8GPW6yovtzSHUaAdyIbO{G%U-Q8uz$H!BYQdq54 z5JJ%1-HqnvW+anI%*@Q7u&@xKD59^g4_dAEAE(oaY&Hv-R;$JA?Cd9ZcXtk(%?42v z!Llr@RxA8|KX{%;YilbQhJhqWXliQ0?d@%k!{PXtWm(AFZZ~+IZ>_Gb1|bBJBtflK zgAjtQt}awoR^s&Z6e^YKKch?ri^YO?Jl-Y<0%Q{t6Ci|WBuRo?E(gOf;CUXBB*E+T z;^pN9a=9El&x2)Iuq=ygHj8vRt&GKDU;=?a!^z3Xmy}XjSy>rWDiuUggdhkA27|b` zxPT-{xWB(gUS1y3=`;d?0631TzPh^dlKT33k5Z}p6aX$SFVWD@0G&?vHV434<~R<= z$H%Cus)8U005B!XWHRLc>t3%Hgb-|RZzB{6Argro5{V!f48rgCL#b54@At#uZ~y=@ znGD#{($epbj*eb0FE6tSg#!8c`Pkpz$Kl~29v&XRFbuR>EgBmeF+Dwvf`S5cc6P$! z@w_xPHvYhzpP&CNm&@PR>-81G!^5!K?I<iP#Qgj`)M_<2j>Eyh0qk}=Zf<Vi@p#bE z(gK6Q@MC*>`!}Swx3`E8@+K0A%*A4{*A|QA!?Uw9==FN!<>f(=Bs@Mog5x;U)YKpx z4)2&urti#V^JhgxMQto0#B4MgKU!Q|d<=y`Z|3Ia-qY!HRhdl28jVIZ48tHNCx;pg vhCehK&7WIaTfY?-7mK5#qd!NZ(TaZo>=C`OdrJIj00000NkvXXu0mjfwd1aw literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/right_thumb_x.png b/indra/newview/skins/default/textures/xbox/right_thumb_x.png new file mode 100644 index 0000000000000000000000000000000000000000..e5c1ce2c975a40025053bc53727816c333d62ce9 GIT binary patch literal 13509 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 Z`Fu`IS0YGs`e|SR6lK+9Dy7~8{vY_#GDrXb literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/right_thumb_y.png b/indra/newview/skins/default/textures/xbox/right_thumb_y.png new file mode 100644 index 0000000000000000000000000000000000000000..9cfdebd85dba9257e1db97c76b16f59c2876fdab GIT binary patch literal 13166 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 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/right_trigger.png b/indra/newview/skins/default/textures/xbox/right_trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..0afa104f6e09fc736ae82259c64fd56f40c6e575 GIT binary patch literal 1228 zcmV;-1T*`IP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Kj}6zm}4kfG{gK~%(1s#pXIrLEAagUO{ILX(Ch z#l=x@EjakGSaoo5*44pP5ClI!9G#pLU8KbSC509-9vt`M-Mz=%J3weum}&;b0ade% zbRsV1@+)HS6(RH?fFMRCX6nhzLKdFm>mEM7-o<#9_qjhuk5Vuh;1h{wnQmCb>%`NW zmd<&fIKs-3LVQj<X3zzRAGt2O{KmQDu)s4TMm9Z193d7<9V~Y+D;p~D6me8hHOd!q zE-Re3IIEQ!Yu%H-FkH}<GhC-Rgaj6mL<%Bg)UbgHEW~KlNHLM7{kVsJ(DA3pC6j9d zj2!c*LWSh`!T;cQw`Os2!c7Xtfvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig%qQvf zwiZ1Cdbfd#>$WEE0hc?#z>_W+k|X(P3dJJuen#Jv2l{V;?p3$9);>-jfGl;jbORh5 z0wX2LUh{Z&sI#|!&$Rmc0Z1NlmS3U&_5c6?24YJ`L;wH)0002_L%V+f000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j&P62PzB?GT7$;000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0007`Nkl<ZILmdC%}OI_6o#Lw`l>2b6;p~yI)oN=BT81v zC<x{jrWfKp^elw&0%j-P!t`EnBMox{V}lz(T&SzKaG@<RNMb5g6)W}gRc6(p)6@OJ zS)G@M_xvdRejgzOX_{i1CJzq}%F)r$=HugIso8Aa9UdNj^?e_J@pz1;X=GW3uIt2c z48HGADhL9a&E{W@<BV&y+E~|h*=RJr?CtISc5!j>Kd<lmD8BDc$hK{>va<4Zb#?W< z>$;?AO1s_W_V)H|V`Jm@e!u_k`T6-&3N_F3$p|kmFN{VbMF;_auInr=F0#G7ZQtG9 z{j<5b`R<$7Fbqbc5vmY^IF7L_3&(L#Rh1uAE|;lRtHtZ<>p!C?qEIOC_Vz}xSVT?J z6x+55!w}E&kW%t9)$4VFAowspKhJPDq*N;5c^;}^7z9Cp>$;T7WxmD#QKo6)d0y%A z@{&@iM6cJQQmLTEag6J_yuQBD>2yfb^rrw-RVPdJJdbL%%JcIx!Zb|=g8_4MbIi=l zpzAunl9UqP_i<g9ZnsOVRzoC7La|sR2m+!gBFnO00#sGSaU8-hWOjCzUayDHb)6`R zux%S%*U>bM-Q8W**Vk#c+oWmA+S(d7H#eM}oiQ4Xuq=x(3~^l-RZ59r7{qZ*6h-8D z&hqjytyYVrr6o>IP6)%0<Ktr#MZqu(k|dd&QYeaoloBBXd7h&v3IGcW3p_nNO^q-f zkC9SNf8zH|$8pd!jaIA0>FFs^6amm`wUAO`Sr&~(V+yJa27?LFbzOFLcK*J<zyDaN zRHlsGZkKw!{^{!K>JQ)d5kin82}%$IWLZX`P+&M5(&=>6{r&w9ilQuLS%#)*<av%| qS<eRt2cNgLwldQ+iJ}O{arh4&CR!mZnD4a!0000<MNUMnLSTYLE;eTX literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/xbox/triggers.png b/indra/newview/skins/default/textures/xbox/triggers.png new file mode 100644 index 0000000000000000000000000000000000000000..462f2deacb5c51b63783f4da6acf35c4a8bf2684 GIT binary patch literal 6006 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 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/xui/en/floater_joystick.xml b/indra/newview/skins/default/xui/en/floater_joystick.xml index a84fe28cf79..05f0fbbcae5 100644 --- a/indra/newview/skins/default/xui/en/floater_joystick.xml +++ b/indra/newview/skins/default/xui/en/floater_joystick.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater legacy_header_height="18" - height="500" + height="700" layout="topleft" name="Joystick" help_topic="Viewerhelp:Joystick_Configuration" title="JOYSTICK CONFIGURATION" - width="569"> + width="565"> <floater.string name="JoystickDisabled"> None @@ -175,7 +175,7 @@ bottom="134" height="10" control_name="JoystickAvatarEnabled" - halign="center" + halign="left" label="Avatar" layout="topleft" left="150" @@ -185,7 +185,7 @@ bottom_delta="0" height="10" control_name="JoystickBuildEnabled" - halign="center" + halign="left" label="Build" layout="topleft" left="219" @@ -195,7 +195,7 @@ bottom_delta="0" height="10" control_name="JoystickFlycamEnabled" - halign="center" + halign="left" label="Flycam" layout="topleft" left="289" @@ -892,6 +892,1654 @@ left="290" name="FlycamAxisDeadZone6" width="56" /> + <text + name="general_label" + follows="left|top" + layout="topleft" + top_pad="5" + left="30" + height="12" + width="94"> + Button Mapping: + </text> + <text + top_pad="7" + height="18" + label_width="125" + layout="topleft" + left_delta="0" + name="JoystickButtonJump" + width="90" > + Jump + </text> + <icons_combo_box + follows="left|top|right" + control_name="JoystickButtonJump" + height="23" + layout="topleft" + left_pad="0" + name="JoystickButtonJump" + top_delta="0" + width="170"> + <icons_combo_box.drop_down_button + image_overlay="None" + image_overlay_alignment="left" + imgoverlay_label_space="3" + pad_left="3"/> + <icons_combo_box.item + name="none" + value="-1"> + <item.columns + halign="left" + type="icontext" + label="None" + value="None" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_a" + value="0"> + <item.columns + halign="left" + type="icontext" + label="Button A" + value="Button_A" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_b" + value="1"> + <item.columns + halign="left" + type="icontext" + label="Button B" + value="Button_B" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_y" + value="3"> + <item.columns + halign="left" + type="icontext" + label="Button Y" + value="Button_Y" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_x" + value="2"> + <item.columns + halign="left" + type="icontext" + label="Button X" + value="Button_X" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="back" + value="6"> + <item.columns + halign="left" + type="icontext" + label="Back" + value="Button_Back" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="start" + value="7"> + <item.columns + halign="left" + type="icontext" + label="Start" + value="Button_Start" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_left" + value="4"> + <item.columns + halign="left" + type="icontext" + label="Left Shoulder Button" + value="Left_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_right" + value="5"> + <item.columns + halign="left" + type="icontext" + label="Right Shoulder Button" + value="Right_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_l" + value="8"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Left" + value="Left_Thumb_Press" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_r" + value="9"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Right" + value="Right_Thumb_Press" + width="20"/> + </icons_combo_box.item> + </icons_combo_box> + <text + top_pad="5" + layout="topleft" + left_delta="-90" + name="JoystickButtonCrouch" + width="90" + height="18" > + Crouch + </text> + <icons_combo_box + follows="left|top|right" + control_name="JoystickButtonCrouch" + height="23" + layout="topleft" + left_pad="0" + name="JoystickButtonCrouch" + top_delta="0" + width="170"> + <icons_combo_box.commit_callback + function="Joystick.Refresh"/> + <icons_combo_box.drop_down_button + image_overlay="None" + image_overlay_alignment="left" + imgoverlay_label_space="3" + pad_left="3"/> + <icons_combo_box.item + name="none" + value="-1"> + <item.columns + halign="left" + type="icontext" + label="None" + value="None" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_a" + value="0"> + <item.columns + halign="left" + type="icontext" + label="Button A" + value="Button_A" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_b" + value="1"> + <item.columns + halign="left" + type="icontext" + label="Button B" + value="Button_B" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_y" + value="3"> + <item.columns + halign="left" + type="icontext" + label="Button Y" + value="Button_Y" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_x" + value="2"> + <item.columns + halign="left" + type="icontext" + label="Button X" + value="Button_X" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="back" + value="6"> + <item.columns + halign="left" + type="icontext" + label="Back" + value="Button_Back" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="start" + value="7"> + <item.columns + halign="left" + type="icontext" + label="Start" + value="Button_Start" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_left" + value="4"> + <item.columns + halign="left" + type="icontext" + label="Left Shoulder Button" + value="Left_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_right" + value="5"> + <item.columns + halign="left" + type="icontext" + label="Right Shoulder Button" + value="Right_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_l" + value="8"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Left" + value="Left_Thumb_Press" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_r" + value="9"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Right" + value="Right_Thumb_Press" + width="20"/> + </icons_combo_box.item> + </icons_combo_box> + <text + top_pad="5" + layout="topleft" + left_delta="-90" + name="JoystickButtonFly" + width="90" + height="18"> + Toggle Fly + </text> + <icons_combo_box + follows="left|top|right" + control_name="JoystickButtonFly" + height="23" + layout="topleft" + left_pad="0" + name="JoystickButtonFly" + top_delta="0" + width="170"> + <icons_combo_box.commit_callback + function="Joystick.Refresh"/> + <icons_combo_box.drop_down_button + image_overlay="None" + image_overlay_alignment="left" + imgoverlay_label_space="3" + pad_left="3"/> + <icons_combo_box.item + name="none" + value="-1"> + <item.columns + halign="left" + type="icontext" + label="None" + value="None" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_a" + value="0"> + <item.columns + halign="left" + type="icontext" + label="Button A" + value="Button_A" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_b" + value="1"> + <item.columns + halign="left" + type="icontext" + label="Button B" + value="Button_B" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_y" + value="3"> + <item.columns + halign="left" + type="icontext" + label="Button Y" + value="Button_Y" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_x" + value="2"> + <item.columns + halign="left" + type="icontext" + label="Button X" + value="Button_X" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="back" + value="6"> + <item.columns + halign="left" + type="icontext" + label="Back" + value="Button_Back" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="start" + value="7"> + <item.columns + halign="left" + type="icontext" + label="Start" + value="Button_Start" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_left" + value="4"> + <item.columns + halign="left" + type="icontext" + label="Left Shoulder Button" + value="Left_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_right" + value="5"> + <item.columns + halign="left" + type="icontext" + label="Right Shoulder Button" + value="Right_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_l" + value="8"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Left" + value="Left_Thumb_Press" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_r" + value="9"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Right" + value="Right_Thumb_Press" + width="20"/> + </icons_combo_box.item> + </icons_combo_box> + <text + height="18" + top_pad="5" + layout="topleft" + left_delta="-90" + name="JoystickButtonRunToggle" + width="90" > + Toggle Run + </text> + <icons_combo_box + follows="left|top|right" + control_name="JoystickButtonRunToggle" + height="23" + layout="topleft" + left_pad="0" + name="JoystickButtonRunToggle" + top_delta="0" + width="170"> + <icons_combo_box.commit_callback + function="Joystick.Refresh"/> + <icons_combo_box.drop_down_button + image_overlay="None" + image_overlay_alignment="left" + imgoverlay_label_space="3" + pad_left="3"/> + <icons_combo_box.item + name="none" + value="-1"> + <item.columns + halign="left" + type="icontext" + label="None" + value="None" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_a" + value="0"> + <item.columns + halign="left" + type="icontext" + label="Button A" + value="Button_A" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_b" + value="1"> + <item.columns + halign="left" + type="icontext" + label="Button B" + value="Button_B" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_y" + value="3"> + <item.columns + halign="left" + type="icontext" + label="Button Y" + value="Button_Y" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_x" + value="2"> + <item.columns + halign="left" + type="icontext" + label="Button X" + value="Button_X" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="back" + value="6"> + <item.columns + halign="left" + type="icontext" + label="Back" + value="Button_Back" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="start" + value="7"> + <item.columns + halign="left" + type="icontext" + label="Start" + value="Button_Start" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_left" + value="4"> + <item.columns + halign="left" + type="icontext" + label="Left Shoulder Button" + value="Left_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_right" + value="5"> + <item.columns + halign="left" + type="icontext" + label="Right Shoulder Button" + value="Right_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_l" + value="8"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Left" + value="Left_Thumb_Press" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_r" + value="9"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Right" + value="Right_Thumb_Press" + width="20"/> + </icons_combo_box.item> + </icons_combo_box> + <text + height="18" + top_pad="5" + layout="topleft" + left_delta="-90" + name="JoystickButtonMouselook" + width="90" > + Mouselook + </text> + <icons_combo_box + follows="left|top|right" + control_name="JoystickButtonMouselook" + height="23" + layout="topleft" + left_pad="0" + name="JoystickButtonMouselook" + top_delta="0" + width="170"> + <icons_combo_box.commit_callback + function="Joystick.Refresh"/> + <icons_combo_box.drop_down_button + image_overlay="None" + image_overlay_alignment="left" + imgoverlay_label_space="3" + pad_left="3"/> + <icons_combo_box.item + name="none" + value="-1"> + <item.columns + halign="left" + type="icontext" + label="None" + value="None" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_a" + value="0"> + <item.columns + halign="left" + type="icontext" + label="Button A" + value="Button_A" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_b" + value="1"> + <item.columns + halign="left" + type="icontext" + label="Button B" + value="Button_B" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_y" + value="3"> + <item.columns + halign="left" + type="icontext" + label="Button Y" + value="Button_Y" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_x" + value="2"> + <item.columns + halign="left" + type="icontext" + label="Button X" + value="Button_X" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="back" + value="6"> + <item.columns + halign="left" + type="icontext" + label="Back" + value="Button_Back" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="start" + value="7"> + <item.columns + halign="left" + type="icontext" + label="Start" + value="Button_Start" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_left" + value="4"> + <item.columns + halign="left" + type="icontext" + label="Left Shoulder Button" + value="Left_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_right" + value="5"> + <item.columns + halign="left" + type="icontext" + label="Right Shoulder Button" + value="Right_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_l" + value="8"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Left" + value="Left_Thumb_Press" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_r" + value="9"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Right" + value="Right_Thumb_Press" + width="20"/> + </icons_combo_box.item> + </icons_combo_box> + <text + height="18" + top_pad="5" + layout="topleft" + left_delta="-90" + name="JoystickButtonFlycam" + width="90" > + Toggle Flycam + </text> + <icons_combo_box + follows="left|top|right" + control_name="JoystickButtonFlycam" + height="23" + layout="topleft" + left_pad="0" + name="JoystickButtonFlycam" + top_delta="0" + width="170"> + <icons_combo_box.commit_callback + function="Joystick.Refresh"/> + <icons_combo_box.drop_down_button + image_overlay="None" + image_overlay_alignment="left" + imgoverlay_label_space="3" + pad_left="3"/> + <icons_combo_box.item + name="none" + value="-1"> + <item.columns + halign="left" + type="icontext" + label="None" + value="None" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_a" + value="0"> + <item.columns + halign="left" + type="icontext" + label="Button A" + value="Button_A" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_b" + value="1"> + <item.columns + halign="left" + type="icontext" + label="Button B" + value="Button_B" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_y" + value="3"> + <item.columns + halign="left" + type="icontext" + label="Button Y" + value="Button_Y" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_x" + value="2"> + <item.columns + halign="left" + type="icontext" + label="Button X" + value="Button_X" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="back" + value="6"> + <item.columns + halign="left" + type="icontext" + label="Back" + value="Button_Back" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="start" + value="7"> + <item.columns + halign="left" + type="icontext" + label="Start" + value="Button_Start" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_left" + value="4"> + <item.columns + halign="left" + type="icontext" + label="Left Shoulder Button" + value="Left_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_right" + value="5"> + <item.columns + halign="left" + type="icontext" + label="Right Shoulder Button" + value="Right_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_l" + value="8"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Left" + value="Left_Thumb_Press" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_r" + value="9"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Right" + value="Right_Thumb_Press" + width="20"/> + </icons_combo_box.item> + </icons_combo_box> + <text + height="18" + top_delta="-140" + label_width="125" + layout="topleft" + left_pad="10" + name="JoystickButtonZoomOut" + width="90" > + Zoom Out + </text> + <icons_combo_box + follows="left|top|right" + control_name="JoystickButtonZoomOut" + height="23" + layout="topleft" + left_pad="0" + name="JoystickButtonZoomOut" + top_delta="0" + width="170"> + <icons_combo_box.commit_callback + function="Joystick.Refresh"/> + <icons_combo_box.drop_down_button + image_overlay="None" + image_overlay_alignment="left" + imgoverlay_label_space="3" + pad_left="3"/> + <icons_combo_box.item + name="none" + value="-1"> + <item.columns + halign="left" + type="icontext" + label="None" + value="None" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_a" + value="0"> + <item.columns + halign="left" + type="icontext" + label="Button A" + value="Button_A" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_b" + value="1"> + <item.columns + halign="left" + type="icontext" + label="Button B" + value="Button_B" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_y" + value="3"> + <item.columns + halign="left" + type="icontext" + label="Button Y" + value="Button_Y" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_x" + value="2"> + <item.columns + halign="left" + type="icontext" + label="Button X" + value="Button_X" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="back" + value="6"> + <item.columns + halign="left" + type="icontext" + label="Back" + value="Button_Back" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="start" + value="7"> + <item.columns + halign="left" + type="icontext" + label="Start" + value="Button_Start" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_left" + value="4"> + <item.columns + halign="left" + type="icontext" + label="Left Shoulder Button" + value="Left_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_right" + value="5"> + <item.columns + halign="left" + type="icontext" + label="Right Shoulder Button" + value="Right_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_l" + value="8"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Left" + value="Left_Thumb_Press" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_r" + value="9"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Right" + value="Right_Thumb_Press" + width="20"/> + </icons_combo_box.item> + </icons_combo_box> + <text + height="18" + top_pad="5" + label_width="125" + layout="topleft" + left_delta="-90" + name="JoystickButtonZoomIn" + width="90" > + Zoom In + </text> + <icons_combo_box + follows="left|top|right" + control_name="JoystickButtonZoomIn" + height="23" + layout="topleft" + left_pad="0" + name="JoystickButtonZoomIn" + top_delta="0" + width="170"> + <icons_combo_box.commit_callback + function="Joystick.Refresh"/> + <icons_combo_box.drop_down_button + image_overlay="None" + image_overlay_alignment="left" + imgoverlay_label_space="3" + pad_left="3"/> + <icons_combo_box.item + name="none" + value="-1"> + <item.columns + halign="left" + type="icontext" + label="None" + value="None" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_a" + value="0"> + <item.columns + halign="left" + type="icontext" + label="Button A" + value="Button_A" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_b" + value="1"> + <item.columns + halign="left" + type="icontext" + label="Button B" + value="Button_B" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_y" + value="3"> + <item.columns + halign="left" + type="icontext" + label="Button Y" + value="Button_Y" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_x" + value="2"> + <item.columns + halign="left" + type="icontext" + label="Button X" + value="Button_X" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="back" + value="6"> + <item.columns + halign="left" + type="icontext" + label="Back" + value="Button_Back" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="start" + value="7"> + <item.columns + halign="left" + type="icontext" + label="Start" + value="Button_Start" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_left" + value="4"> + <item.columns + halign="left" + type="icontext" + label="Left Shoulder Button" + value="Left_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_right" + value="5"> + <item.columns + halign="left" + type="icontext" + label="Right Shoulder Button" + value="Right_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_l" + value="8"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Left" + value="Left_Thumb_Press" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_r" + value="9"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Right" + value="Right_Thumb_Press" + width="20"/> + </icons_combo_box.item> + </icons_combo_box> + <text + height="18" + top_pad="5" + label_width="125" + layout="topleft" + left_delta="-90" + name="JoystickButtonZoomDefault" + width="90" > + Zoom Default + </text> + <icons_combo_box + follows="left|top|right" + control_name="JoystickButtonZoomDefault" + height="23" + layout="topleft" + left_pad="0" + name="JoystickButtonZoomDefault" + top_delta="0" + width="170"> + <icons_combo_box.commit_callback + function="Joystick.Refresh"/> + <icons_combo_box.drop_down_button + image_overlay="None" + image_overlay_alignment="left" + imgoverlay_label_space="3" + pad_left="3"/> + <icons_combo_box.item + name="none" + value="-1"> + <item.columns + halign="left" + type="icontext" + label="None" + value="None" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_a" + value="0"> + <item.columns + halign="left" + type="icontext" + label="Button A" + value="Button_A" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_b" + value="1"> + <item.columns + halign="left" + type="icontext" + label="Button B" + value="Button_B" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_y" + value="3"> + <item.columns + halign="left" + type="icontext" + label="Button Y" + value="Button_Y" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_x" + value="2"> + <item.columns + halign="left" + type="icontext" + label="Button X" + value="Button_X" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="back" + value="6"> + <item.columns + halign="left" + type="icontext" + label="Back" + value="Button_Back" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="start" + value="7"> + <item.columns + halign="left" + type="icontext" + label="Start" + value="Button_Start" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_left" + value="4"> + <item.columns + halign="left" + type="icontext" + label="Left Shoulder Button" + value="Left_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_right" + value="5"> + <item.columns + halign="left" + type="icontext" + label="Right Shoulder Button" + value="Right_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_l" + value="8"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Left" + value="Left_Thumb_Press" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_r" + value="9"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Right" + value="Right_Thumb_Press" + width="20"/> + </icons_combo_box.item> + </icons_combo_box> + <text + height="18" + top_pad="5" + label_width="125" + layout="topleft" + left_delta="-90" + name="JoystickButtonRollLeft" + width="90" > + Roll Left + </text> + <icons_combo_box + follows="left|top|right" + control_name="JoystickButtonRollLeft" + height="23" + layout="topleft" + left_pad="0" + name="JoystickButtonRollLeft" + top_delta="0" + width="170"> + <icons_combo_box.commit_callback + function="Joystick.Refresh"/> + <icons_combo_box.drop_down_button + image_overlay="None" + image_overlay_alignment="left" + imgoverlay_label_space="3" + pad_left="3"/> + <icons_combo_box.item + name="none" + value="-1"> + <item.columns + halign="left" + type="icontext" + label="None" + value="None" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_a" + value="0"> + <item.columns + halign="left" + type="icontext" + label="Button A" + value="Button_A" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_b" + value="1"> + <item.columns + halign="left" + type="icontext" + label="Button B" + value="Button_B" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_y" + value="3"> + <item.columns + halign="left" + type="icontext" + label="Button Y" + value="Button_Y" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_x" + value="2"> + <item.columns + halign="left" + type="icontext" + label="Button X" + value="Button_X" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="back" + value="6"> + <item.columns + halign="left" + type="icontext" + label="Back" + value="Button_Back" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="start" + value="7"> + <item.columns + halign="left" + type="icontext" + label="Start" + value="Button_Start" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_left" + value="4"> + <item.columns + halign="left" + type="icontext" + label="Left Shoulder Button" + value="Left_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_right" + value="5"> + <item.columns + halign="left" + type="icontext" + label="Right Shoulder Button" + value="Right_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_l" + value="8"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Left" + value="Left_Thumb_Press" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_r" + value="9"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Right" + value="Right_Thumb_Press" + width="20"/> + </icons_combo_box.item> + </icons_combo_box> + <text + height="18" + top_pad="5" + label_width="125" + layout="topleft" + left_delta="-90" + name="JoystickButtonRollRight" + width="90" > + Roll Right + </text> + <icons_combo_box + follows="left|top|right" + control_name="JoystickButtonRollRight" + height="23" + layout="topleft" + left_pad="0" + name="JoystickButtonRollRight" + top_delta="0" + width="170"> + <icons_combo_box.commit_callback + function="Joystick.Refresh"/> + <icons_combo_box.drop_down_button + image_overlay="None" + image_overlay_alignment="left" + imgoverlay_label_space="3" + pad_left="3"/> + <icons_combo_box.item + name="none" + value="-1"> + <item.columns + halign="left" + type="icontext" + label="None" + value="None" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_a" + value="0"> + <item.columns + halign="left" + type="icontext" + label="Button A" + value="Button_A" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_b" + value="1"> + <item.columns + halign="left" + type="icontext" + label="Button B" + value="Button_B" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_y" + value="3"> + <item.columns + halign="left" + type="icontext" + label="Button Y" + value="Button_Y" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_x" + value="2"> + <item.columns + halign="left" + type="icontext" + label="Button X" + value="Button_X" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="back" + value="6"> + <item.columns + halign="left" + type="icontext" + label="Back" + value="Button_Back" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="start" + value="7"> + <item.columns + halign="left" + type="icontext" + label="Start" + value="Button_Start" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_left" + value="4"> + <item.columns + halign="left" + type="icontext" + label="Left Shoulder Button" + value="Left_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_right" + value="5"> + <item.columns + halign="left" + type="icontext" + label="Right Shoulder Button" + value="Right_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_l" + value="8"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Left" + value="Left_Thumb_Press" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_r" + value="9"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Right" + value="Right_Thumb_Press" + width="20"/> + </icons_combo_box.item> + </icons_combo_box> + <text + height="18" + top_pad="5" + label_width="125" + layout="topleft" + left_delta="-90" + name="JoystickButtonRollDefault" + width="90" > + Roll Default + </text> + <icons_combo_box + follows="left|top|right" + control_name="JoystickButtonRollDefault" + height="23" + layout="topleft" + left_pad="0" + name="JoystickButtonRollDefault" + top_delta="0" + width="170"> + <icons_combo_box.commit_callback + function="Joystick.Refresh"/> + <icons_combo_box.drop_down_button + image_overlay="None" + image_overlay_alignment="left" + imgoverlay_label_space="3" + pad_left="3"/> + <icons_combo_box.item + name="none" + value="-1"> + <item.columns + halign="left" + type="icontext" + label="None" + value="None" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_a" + value="0"> + <item.columns + halign="left" + type="icontext" + label="Button A" + value="Button_A" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_b" + value="1"> + <item.columns + halign="left" + type="icontext" + label="Button B" + value="Button_B" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_y" + value="3"> + <item.columns + halign="left" + type="icontext" + label="Button Y" + value="Button_Y" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="btn_x" + value="2"> + <item.columns + halign="left" + type="icontext" + label="Button X" + value="Button_X" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="back" + value="6"> + <item.columns + halign="left" + type="icontext" + label="Back" + value="Button_Back" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="start" + value="7"> + <item.columns + halign="left" + type="icontext" + label="Start" + value="Button_Start" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_left" + value="4"> + <item.columns + halign="left" + type="icontext" + label="Left Shoulder Button" + value="Left_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="button_right" + value="5"> + <item.columns + halign="left" + type="icontext" + label="Right Shoulder Button" + value="Right_Button" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_l" + value="8"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Left" + value="Left_Thumb_Press" + width="20"/> + </icons_combo_box.item> + <icons_combo_box.item + name="thumb_r" + value="9"> + <item.columns + halign="left" + type="icontext" + label="Thumbstick Right" + value="Right_Thumb_Press" + width="20"/> + </icons_combo_box.item> + </icons_combo_box> + <button follows="left|top" height="22" @@ -916,9 +2564,9 @@ label="OK" label_selected="OK" layout="topleft" - left_delta="0" + left="359" name="ok_btn" - top_pad="7" + top="650" width="98" /> <button follows="right|bottom" -- GitLab