mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-06 11:45:35 +00:00
Adjust the FirstPersonNeckController to follow the camera with a reduced factor (Fixes #1784)
This commit is contained in:
parent
3c338b9da9
commit
637cd3a628
4 changed files with 26 additions and 2 deletions
|
@ -1479,6 +1479,8 @@ bool CharacterController::updateWeaponState()
|
|||
}
|
||||
}
|
||||
|
||||
mAnimation->setAccurateAiming(mUpperBodyState > UpperCharState_WeapEquiped);
|
||||
|
||||
return forcestateupdate;
|
||||
}
|
||||
|
||||
|
|
|
@ -439,6 +439,7 @@ public:
|
|||
virtual void setHeadYaw(float yawRadians);
|
||||
virtual float getHeadPitch() const;
|
||||
virtual float getHeadYaw() const;
|
||||
virtual void setAccurateAiming(bool enabled) {}
|
||||
|
||||
private:
|
||||
Animation(const Animation&);
|
||||
|
|
|
@ -281,7 +281,9 @@ NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, osg::ref_ptr<osg::Group> par
|
|||
mShowWeapons(false),
|
||||
mShowCarriedLeft(true),
|
||||
mNpcType(Type_Normal),
|
||||
mSoundsDisabled(disableSounds)
|
||||
mSoundsDisabled(disableSounds),
|
||||
mAccurateAiming(false),
|
||||
mAimingFactor(0.f)
|
||||
{
|
||||
mNpc = mPtr.get<ESM::NPC>()->mBase;
|
||||
|
||||
|
@ -726,7 +728,14 @@ osg::Vec3f NpcAnimation::runAnimation(float timepassed)
|
|||
|
||||
if (mFirstPersonNeckController)
|
||||
{
|
||||
mFirstPersonNeckController->setRotate(osg::Quat(mPtr.getRefData().getPosition().rot[0], osg::Vec3f(-1,0,0)));
|
||||
if (mAccurateAiming)
|
||||
mAimingFactor = 1.f;
|
||||
else
|
||||
mAimingFactor = std::max(0.f, mAimingFactor - timepassed * 0.5f);
|
||||
|
||||
float rotateFactor = 0.75f + 0.25f * mAimingFactor;
|
||||
|
||||
mFirstPersonNeckController->setRotate(osg::Quat(mPtr.getRefData().getPosition().rot[0] * rotateFactor, osg::Vec3f(-1,0,0)));
|
||||
mFirstPersonNeckController->setOffset(mFirstPersonOffset);
|
||||
}
|
||||
|
||||
|
@ -1072,4 +1081,9 @@ void NpcAnimation::updatePtr(const MWWorld::Ptr &updated)
|
|||
mHeadAnimationTime->updatePtr(updated);
|
||||
}
|
||||
|
||||
void NpcAnimation::setAccurateAiming(bool enabled)
|
||||
{
|
||||
mAccurateAiming = enabled;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -67,6 +67,9 @@ private:
|
|||
|
||||
bool mSoundsDisabled;
|
||||
|
||||
bool mAccurateAiming;
|
||||
float mAimingFactor;
|
||||
|
||||
void updateNpcBase();
|
||||
|
||||
PartHolderPtr insertBoundedPart(const std::string &model, const std::string &bonename,
|
||||
|
@ -104,6 +107,10 @@ public:
|
|||
|
||||
virtual void enableHeadAnimation(bool enable);
|
||||
|
||||
/// 1: the first person meshes follow the camera's rotation completely
|
||||
/// 0: the first person meshes follow the camera with a reduced factor, so you can look down at your own hands
|
||||
virtual void setAccurateAiming(bool enabled);
|
||||
|
||||
virtual void setWeaponGroup(const std::string& group);
|
||||
|
||||
virtual osg::Vec3f runAnimation(float timepassed);
|
||||
|
|
Loading…
Reference in a new issue