From 95ad67eb8bed39e2beda04c82806a8fdec477342 Mon Sep 17 00:00:00 2001 From: uramer Date: Thu, 12 May 2022 22:57:00 +0200 Subject: [PATCH] Add extraRoll to the Lua camera package --- apps/openmw/mwlua/camerabindings.cpp | 2 ++ apps/openmw/mwrender/camera.cpp | 2 +- apps/openmw/mwrender/camera.hpp | 4 +++- files/builtin_scripts/scripts/omw/camera.lua | 2 +- files/builtin_scripts/scripts/omw/head_bobbing.lua | 2 +- files/lua_api/openmw/camera.lua | 12 ++++++++++++ 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwlua/camerabindings.cpp b/apps/openmw/mwlua/camerabindings.cpp index 345564ef0c..32abb8babe 100644 --- a/apps/openmw/mwlua/camerabindings.cpp +++ b/apps/openmw/mwlua/camerabindings.cpp @@ -67,8 +67,10 @@ namespace MWLua api["setRoll"] = [camera](float v) { camera->setRoll(-v); }; api["setExtraPitch"] = [camera](float v) { camera->setExtraPitch(-v); }; api["setExtraYaw"] = [camera](float v) { camera->setExtraYaw(-v); }; + api["setExtraRoll"] = [camera](float v) { camera->setExtraRoll(-v); }; api["getExtraPitch"] = [camera]() { return -camera->getExtraPitch(); }; api["getExtraYaw"] = [camera]() { return -camera->getExtraYaw(); }; + api["getExtraRoll"] = [camera]() { return -camera->getExtraRoll(); }; api["getThirdPersonDistance"] = [camera]() { return camera->getCameraDistance(); }; api["setPreferredThirdPersonDistance"] = [camera](float v) { camera->setPreferredCameraDistance(v); }; diff --git a/apps/openmw/mwrender/camera.cpp b/apps/openmw/mwrender/camera.cpp index ea499a64bc..625b6c3e97 100644 --- a/apps/openmw/mwrender/camera.cpp +++ b/apps/openmw/mwrender/camera.cpp @@ -110,7 +110,7 @@ namespace MWRender void Camera::updateCamera(osg::Camera *cam) { - osg::Quat orient = osg::Quat(mRoll, osg::Vec3d(0, 1, 0)) * + osg::Quat orient = osg::Quat(mRoll + mExtraRoll, osg::Vec3d(0, 1, 0)) * osg::Quat(mPitch + mExtraPitch, osg::Vec3d(1, 0, 0)) * osg::Quat(mYaw + mExtraYaw, osg::Vec3d(0, 0, 1)); osg::Vec3d forward = orient * osg::Vec3d(0,1,0); diff --git a/apps/openmw/mwrender/camera.hpp b/apps/openmw/mwrender/camera.hpp index ba815a7e60..e17e63ddaf 100644 --- a/apps/openmw/mwrender/camera.hpp +++ b/apps/openmw/mwrender/camera.hpp @@ -60,8 +60,10 @@ namespace MWRender float getExtraPitch() const { return mExtraPitch; } float getExtraYaw() const { return mExtraYaw; } + float getExtraRoll() const { return mExtraRoll; } void setExtraPitch(float angle) { mExtraPitch = angle; } void setExtraYaw(float angle) { mExtraYaw = angle; } + void setExtraRoll(float angle) { mExtraRoll = angle; } /// @param Force view mode switch, even if currently not allowed by the animation. void toggleViewMode(bool force=false); @@ -125,7 +127,7 @@ namespace MWRender float mHeight; float mPitch, mYaw, mRoll; - float mExtraPitch = 0, mExtraYaw = 0; + float mExtraPitch = 0, mExtraYaw = 0, mExtraRoll = 0; bool mLockPitch = false, mLockYaw = false; osg::Vec3d mPosition; osg::Matrixf mViewMatrix; diff --git a/files/builtin_scripts/scripts/omw/camera.lua b/files/builtin_scripts/scripts/omw/camera.lua index 56e7f52487..9845135f50 100644 --- a/files/builtin_scripts/scripts/omw/camera.lua +++ b/files/builtin_scripts/scripts/omw/camera.lua @@ -150,7 +150,7 @@ end local function onUpdate(dt) camera.setExtraPitch(0) camera.setExtraYaw(0) - camera.setRoll(0) + camera.setExtraRoll(0) camera.setFirstPersonOffset(util.vector3(0, 0, 0)) updateSmoothedSpeed(dt) end diff --git a/files/builtin_scripts/scripts/omw/head_bobbing.lua b/files/builtin_scripts/scripts/omw/head_bobbing.lua index 8e6ea0660f..b3d96a7eba 100644 --- a/files/builtin_scripts/scripts/omw/head_bobbing.lua +++ b/files/builtin_scripts/scripts/omw/head_bobbing.lua @@ -46,7 +46,7 @@ function M.update(dt, smoothedSpeed) local zOffset = (0.5 - effect) * coef * stepHeight -- range from -stepHeight/2 to stepHeight/2 local roll = ((stepState > 0 and 1) or -1) * effect * coef * maxRoll -- range from -maxRoll to maxRoll camera.setFirstPersonOffset(camera.getFirstPersonOffset() + util.vector3(0, 0, zOffset)) - camera.setRoll(camera.getRoll() + roll) + camera.setExtraRoll(camera.getExtraRoll() + roll) end return M diff --git a/files/lua_api/openmw/camera.lua b/files/lua_api/openmw/camera.lua index f699663c49..84858cadd4 100644 --- a/files/lua_api/openmw/camera.lua +++ b/files/lua_api/openmw/camera.lua @@ -111,6 +111,18 @@ -- @function [parent=#camera] setExtraYaw -- @param #number value +--- +-- Additional summand for the roll angle that is not affected by player input. +-- Full yaw is `getRoll()+getExtraRoll()`. +-- @function [parent=#camera] getExtraRoll +-- @return #number + +--- +-- Additional summand for the roll angle; useful for camera shaking effects. +-- Full yaw is `getRoll()+getExtraRoll()`. +-- @function [parent=#camera] setExtraRoll +-- @param #number value + --- -- Set camera position; can be used only if camera is in Static mode. -- @function [parent=#camera] setStaticPosition