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:
parent
4bd2f20979
commit
95ad67eb8b
6 changed files with 20 additions and 4 deletions
|
@ -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); };
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue