mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-08-03 15:27:13 -04:00
Merge branch 'one_handed_controls' into 'master'
Draft: Add accessibility options to lua controls, including one handed controls and hold-free swinging See merge request OpenMW/openmw!4736
This commit is contained in:
commit
b8fbe84dad
@ -17,6 +17,14 @@ smoothControllerMovement: "Smooth Controller Movement"
|
||||
smoothControllerMovementDescription: |
|
||||
Enables smooth controller stick movement. This makes the transition from walking to running less abrupt.
|
||||
|
||||
oneHandedControls: "One Handed Controls"
|
||||
oneHandedControlsDescription: |
|
||||
Changes the controls so the normal A and D controls will instead move the camera left and right.
|
||||
|
||||
automaticWeaponHit: "Automatic Weapon Hit"
|
||||
automaticWeaponHitDescription: |
|
||||
Will cause the weapon swing to be held for a moment and swing automatically, so holding the key isn't necessary.
|
||||
|
||||
TogglePOV_name: "Toggle POV"
|
||||
TogglePOV_description: "Toggle between first and third person view. Hold to enter preview mode."
|
||||
|
||||
|
@ -84,7 +84,7 @@ local movementControlsOverridden = false
|
||||
|
||||
local autoMove = false
|
||||
local attemptToJump = false
|
||||
local function processMovement()
|
||||
local function processMovement(dt)
|
||||
local movement = input.getRangeActionValue('MoveForward') - input.getRangeActionValue('MoveBackward')
|
||||
local sideMovement = input.getRangeActionValue('MoveRight') - input.getRangeActionValue('MoveLeft')
|
||||
local run = input.getBooleanActionValue('Run') ~= settings:get('alwaysRun')
|
||||
@ -94,9 +94,15 @@ local function processMovement()
|
||||
elseif autoMove then
|
||||
movement = 1
|
||||
end
|
||||
|
||||
local turnSpeed = 4--to be replaced with setting
|
||||
if settings:get("oneHandedControls") then
|
||||
if sideMovement ~= 0 then
|
||||
self.controls.yawChange = (sideMovement * dt) * turnSpeed
|
||||
end
|
||||
else
|
||||
self.controls.sideMovement = sideMovement
|
||||
end
|
||||
self.controls.movement = movement
|
||||
self.controls.sideMovement = sideMovement
|
||||
self.controls.run = run
|
||||
self.controls.jump = attemptToJump
|
||||
|
||||
@ -167,13 +173,23 @@ local startUse = false
|
||||
input.registerActionHandler('Use', async:callback(function(value)
|
||||
if value and combatAllowed() then startUse = true end
|
||||
end))
|
||||
local function processAttacking()
|
||||
local swingStart = 0
|
||||
local swingLength = 0.3
|
||||
local function processAttacking(dt)
|
||||
-- for spell-casting, set controls.use to true for exactly one frame
|
||||
-- otherwise spell casting is attempted every frame while Use is true
|
||||
if Actor.getStance(self) == Actor.STANCE.Spell then
|
||||
self.controls.use = startUse and 1 or 0
|
||||
elseif Actor.getStance(self) == Actor.STANCE.Weapon and input.getBooleanActionValue('Use') then
|
||||
self.controls.use = 1
|
||||
if settings:get("automaticWeaponHit") then
|
||||
swingStart = swingLength
|
||||
end
|
||||
end
|
||||
|
||||
if swingStart > 0 and Actor.getStance(self) == Actor.STANCE.Weapon then
|
||||
swingStart = swingStart - dt
|
||||
self.controls.use = 1
|
||||
else
|
||||
self.controls.use = 0
|
||||
end
|
||||
@ -216,16 +232,16 @@ input.registerTriggerHandler('QuickKeysMenu', async:callback(function()
|
||||
end
|
||||
end))
|
||||
|
||||
local function onFrame(_)
|
||||
local function onFrame(dt)
|
||||
if movementAllowed() then
|
||||
processMovement()
|
||||
processMovement(dt)
|
||||
elseif not movementControlsOverridden then
|
||||
self.controls.movement = 0
|
||||
self.controls.sideMovement = 0
|
||||
self.controls.jump = false
|
||||
end
|
||||
if combatAllowed() then
|
||||
processAttacking()
|
||||
processAttacking(dt)
|
||||
end
|
||||
attemptToJump = false
|
||||
end
|
||||
|
@ -35,6 +35,9 @@ I.Settings.registerGroup({
|
||||
boolSetting('alwaysRun', false),
|
||||
boolSetting('toggleSneak', false), -- TODO: consider removing this setting when we have the advanced binding UI
|
||||
boolSetting('smoothControllerMovement', true),
|
||||
--should probably be in an accessibility section
|
||||
boolSetting('oneHandedControls', false),
|
||||
boolSetting('automaticWeaponHit', false),
|
||||
},
|
||||
})
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user