mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-05 15:55:45 +00:00
d4e6dd9f8c
Early return in the processZoom3rdPerson function at move360.lua extended with a check for disabled zoom in the Camera interface. This fixes #8064 - prevents from switching between 1st and 3rd person camera by pressing zoom in/out inputs when zooming is disabled.
85 lines
2.8 KiB
Lua
85 lines
2.8 KiB
Lua
local core = require('openmw.core')
|
|
local camera = require('openmw.camera')
|
|
local input = require('openmw.input')
|
|
local self = require('openmw.self')
|
|
local util = require('openmw.util')
|
|
local I = require('openmw.interfaces')
|
|
|
|
local Actor = require('openmw.types').Actor
|
|
local Player = require('openmw.types').Player
|
|
|
|
local MODE = camera.MODE
|
|
|
|
local active = false
|
|
|
|
local M = {
|
|
enabled = false,
|
|
turnSpeed = 5,
|
|
}
|
|
|
|
local function turnOn()
|
|
I.Camera.disableStandingPreview()
|
|
active = true
|
|
end
|
|
|
|
local function turnOff()
|
|
I.Camera.enableStandingPreview()
|
|
active = false
|
|
if camera.getMode() == MODE.Preview then
|
|
camera.setMode(MODE.ThirdPerson)
|
|
end
|
|
end
|
|
|
|
local function processZoom3rdPerson()
|
|
if
|
|
not Player.getControlSwitch(self, Player.CONTROL_SWITCH.ViewMode) or
|
|
not Player.getControlSwitch(self, Player.CONTROL_SWITCH.Controls) or
|
|
input.getBooleanActionValue('TogglePOV') or
|
|
not I.Camera.isModeControlEnabled() or
|
|
not I.Camera.isZoomEnabled()
|
|
then
|
|
return
|
|
end
|
|
local Zoom3rdPerson = input.getNumberActionValue('Zoom3rdPerson')
|
|
if Zoom3rdPerson > 0 and camera.getMode() == MODE.Preview
|
|
and I.Camera.getBaseThirdPersonDistance() == 30 then
|
|
self.controls.yawChange = camera.getYaw() - self.rotation:getYaw()
|
|
camera.setMode(MODE.FirstPerson)
|
|
elseif Zoom3rdPerson < 0 and camera.getMode() == MODE.FirstPerson then
|
|
camera.setMode(MODE.Preview)
|
|
I.Camera.setBaseThirdPersonDistance(30)
|
|
end
|
|
end
|
|
|
|
function M.onFrame(dt)
|
|
if core.isWorldPaused() then return end
|
|
local newActive = M.enabled and Actor.getStance(self) == Actor.STANCE.Nothing
|
|
if newActive and not active then
|
|
turnOn()
|
|
elseif not newActive and active then
|
|
turnOff()
|
|
end
|
|
if not active then return end
|
|
processZoom3rdPerson()
|
|
if camera.getMode() == MODE.Static then return end
|
|
if camera.getMode() == MODE.ThirdPerson then camera.setMode(MODE.Preview) end
|
|
if camera.getMode() == MODE.Preview and not input.getBooleanActionValue('TogglePOV') then
|
|
camera.showCrosshair(camera.getFocalPreferredOffset():length() > 5)
|
|
local move = util.vector2(self.controls.sideMovement, self.controls.movement)
|
|
local yawDelta = camera.getYaw() - self.rotation:getYaw()
|
|
move = move:rotate(-yawDelta)
|
|
self.controls.sideMovement = move.x
|
|
self.controls.movement = move.y
|
|
self.controls.pitchChange = camera.getPitch() * math.cos(yawDelta) - self.rotation:getPitch()
|
|
if move:length() > 0.05 then
|
|
local delta = math.atan2(move.x, move.y)
|
|
local maxDelta = math.max(delta, 1) * M.turnSpeed * dt
|
|
self.controls.yawChange = util.clamp(delta, -maxDelta, maxDelta)
|
|
else
|
|
self.controls.yawChange = 0
|
|
end
|
|
end
|
|
end
|
|
|
|
return M
|