1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-21 12:09:43 +00:00

Add extraRoll to the Lua camera package

This commit is contained in:
uramer 2022-05-12 22:57:00 +02:00
parent 4bd2f20979
commit 95ad67eb8b
6 changed files with 20 additions and 4 deletions

View file

@ -67,8 +67,10 @@ namespace MWLua
api["setRoll"] = [camera](float v) { camera->setRoll(-v); }; api["setRoll"] = [camera](float v) { camera->setRoll(-v); };
api["setExtraPitch"] = [camera](float v) { camera->setExtraPitch(-v); }; api["setExtraPitch"] = [camera](float v) { camera->setExtraPitch(-v); };
api["setExtraYaw"] = [camera](float v) { camera->setExtraYaw(-v); }; api["setExtraYaw"] = [camera](float v) { camera->setExtraYaw(-v); };
api["setExtraRoll"] = [camera](float v) { camera->setExtraRoll(-v); };
api["getExtraPitch"] = [camera]() { return -camera->getExtraPitch(); }; api["getExtraPitch"] = [camera]() { return -camera->getExtraPitch(); };
api["getExtraYaw"] = [camera]() { return -camera->getExtraYaw(); }; api["getExtraYaw"] = [camera]() { return -camera->getExtraYaw(); };
api["getExtraRoll"] = [camera]() { return -camera->getExtraRoll(); };
api["getThirdPersonDistance"] = [camera]() { return camera->getCameraDistance(); }; api["getThirdPersonDistance"] = [camera]() { return camera->getCameraDistance(); };
api["setPreferredThirdPersonDistance"] = [camera](float v) { camera->setPreferredCameraDistance(v); }; api["setPreferredThirdPersonDistance"] = [camera](float v) { camera->setPreferredCameraDistance(v); };

View file

@ -110,7 +110,7 @@ namespace MWRender
void Camera::updateCamera(osg::Camera *cam) 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(mPitch + mExtraPitch, osg::Vec3d(1, 0, 0)) *
osg::Quat(mYaw + mExtraYaw, osg::Vec3d(0, 0, 1)); osg::Quat(mYaw + mExtraYaw, osg::Vec3d(0, 0, 1));
osg::Vec3d forward = orient * osg::Vec3d(0,1,0); osg::Vec3d forward = orient * osg::Vec3d(0,1,0);

View file

@ -60,8 +60,10 @@ namespace MWRender
float getExtraPitch() const { return mExtraPitch; } float getExtraPitch() const { return mExtraPitch; }
float getExtraYaw() const { return mExtraYaw; } float getExtraYaw() const { return mExtraYaw; }
float getExtraRoll() const { return mExtraRoll; }
void setExtraPitch(float angle) { mExtraPitch = angle; } void setExtraPitch(float angle) { mExtraPitch = angle; }
void setExtraYaw(float angle) { mExtraYaw = 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. /// @param Force view mode switch, even if currently not allowed by the animation.
void toggleViewMode(bool force=false); void toggleViewMode(bool force=false);
@ -125,7 +127,7 @@ namespace MWRender
float mHeight; float mHeight;
float mPitch, mYaw, mRoll; float mPitch, mYaw, mRoll;
float mExtraPitch = 0, mExtraYaw = 0; float mExtraPitch = 0, mExtraYaw = 0, mExtraRoll = 0;
bool mLockPitch = false, mLockYaw = false; bool mLockPitch = false, mLockYaw = false;
osg::Vec3d mPosition; osg::Vec3d mPosition;
osg::Matrixf mViewMatrix; osg::Matrixf mViewMatrix;

View file

@ -150,7 +150,7 @@ end
local function onUpdate(dt) local function onUpdate(dt)
camera.setExtraPitch(0) camera.setExtraPitch(0)
camera.setExtraYaw(0) camera.setExtraYaw(0)
camera.setRoll(0) camera.setExtraRoll(0)
camera.setFirstPersonOffset(util.vector3(0, 0, 0)) camera.setFirstPersonOffset(util.vector3(0, 0, 0))
updateSmoothedSpeed(dt) updateSmoothedSpeed(dt)
end end

View file

@ -46,7 +46,7 @@ function M.update(dt, smoothedSpeed)
local zOffset = (0.5 - effect) * coef * stepHeight -- range from -stepHeight/2 to stepHeight/2 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 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.setFirstPersonOffset(camera.getFirstPersonOffset() + util.vector3(0, 0, zOffset))
camera.setRoll(camera.getRoll() + roll) camera.setExtraRoll(camera.getExtraRoll() + roll)
end end
return M return M

View file

@ -111,6 +111,18 @@
-- @function [parent=#camera] setExtraYaw -- @function [parent=#camera] setExtraYaw
-- @param #number value -- @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. -- Set camera position; can be used only if camera is in Static mode.
-- @function [parent=#camera] setStaticPosition -- @function [parent=#camera] setStaticPosition