mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-01 03:15:34 +00:00
Move lua controls update into a separate function
This commit is contained in:
parent
03792eebdb
commit
a05ed48a57
1 changed files with 35 additions and 32 deletions
|
@ -321,6 +321,39 @@ namespace MWMechanics
|
||||||
|
|
||||||
ctrl.setHeadTrackTarget(headTrackTarget);
|
ctrl.setHeadTrackTarget(headTrackTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void updateLuaControls(const MWWorld::Ptr& ptr, bool isPlayer, MWBase::LuaManager::ActorControls& controls)
|
||||||
|
{
|
||||||
|
Movement& mov = ptr.getClass().getMovementSettings(ptr);
|
||||||
|
CreatureStats& stats = ptr.getClass().getCreatureStats(ptr);
|
||||||
|
const float speedFactor = isPlayer ? 1.f : mov.mSpeedFactor;
|
||||||
|
const osg::Vec2f movement = osg::Vec2f(mov.mPosition[0], mov.mPosition[1]) * speedFactor;
|
||||||
|
const float rotationX = mov.mRotation[0];
|
||||||
|
const float rotationZ = mov.mRotation[2];
|
||||||
|
const bool jump = mov.mPosition[2] == 1;
|
||||||
|
const bool runFlag = stats.getMovementFlag(MWMechanics::CreatureStats::Flag_Run);
|
||||||
|
const bool attackingOrSpell = stats.getAttackingOrSpell();
|
||||||
|
if (controls.mChanged)
|
||||||
|
{
|
||||||
|
mov.mPosition[0] = controls.mSideMovement;
|
||||||
|
mov.mPosition[1] = controls.mMovement;
|
||||||
|
mov.mPosition[2] = controls.mJump ? 1 : 0;
|
||||||
|
mov.mRotation[0] = controls.mPitchChange;
|
||||||
|
mov.mRotation[1] = 0;
|
||||||
|
mov.mRotation[2] = controls.mYawChange;
|
||||||
|
mov.mSpeedFactor = osg::Vec2(controls.mMovement, controls.mSideMovement).length();
|
||||||
|
stats.setMovementFlag(MWMechanics::CreatureStats::Flag_Run, controls.mRun);
|
||||||
|
stats.setAttackingOrSpell((controls.mUse & 1) == 1);
|
||||||
|
controls.mChanged = false;
|
||||||
|
}
|
||||||
|
controls.mSideMovement = movement.x();
|
||||||
|
controls.mMovement = movement.y();
|
||||||
|
controls.mPitchChange = rotationX;
|
||||||
|
controls.mYawChange = rotationZ;
|
||||||
|
controls.mJump = jump;
|
||||||
|
controls.mRun = runFlag;
|
||||||
|
controls.mUse = attackingOrSpell ? controls.mUse | 1 : controls.mUse & ~1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Actors::updateActor (const MWWorld::Ptr& ptr, float duration)
|
void Actors::updateActor (const MWWorld::Ptr& ptr, float duration)
|
||||||
|
@ -1533,38 +1566,8 @@ namespace MWMechanics
|
||||||
if (mTimerUpdateEquippedLight == 0 && actor.getPtr().getClass().hasInventoryStore(actor.getPtr()))
|
if (mTimerUpdateEquippedLight == 0 && actor.getPtr().getClass().hasInventoryStore(actor.getPtr()))
|
||||||
updateEquippedLight(actor.getPtr(), updateEquippedLightInterval, showTorches);
|
updateEquippedLight(actor.getPtr(), updateEquippedLightInterval, showTorches);
|
||||||
|
|
||||||
if (luaControls && isConscious(actor.getPtr()))
|
if (luaControls != nullptr && isConscious(actor.getPtr()))
|
||||||
{
|
updateLuaControls(actor.getPtr(), isPlayer, *luaControls);
|
||||||
Movement& mov = actor.getPtr().getClass().getMovementSettings(actor.getPtr());
|
|
||||||
CreatureStats& stats = actor.getPtr().getClass().getCreatureStats(actor.getPtr());
|
|
||||||
float speedFactor = isPlayer ? 1.f : mov.mSpeedFactor;
|
|
||||||
osg::Vec2f movement = osg::Vec2f(mov.mPosition[0], mov.mPosition[1]) * speedFactor;
|
|
||||||
float rotationX = mov.mRotation[0];
|
|
||||||
float rotationZ = mov.mRotation[2];
|
|
||||||
bool jump = mov.mPosition[2] == 1;
|
|
||||||
bool runFlag = stats.getMovementFlag(MWMechanics::CreatureStats::Flag_Run);
|
|
||||||
bool attackingOrSpell = stats.getAttackingOrSpell();
|
|
||||||
if (luaControls->mChanged)
|
|
||||||
{
|
|
||||||
mov.mPosition[0] = luaControls->mSideMovement;
|
|
||||||
mov.mPosition[1] = luaControls->mMovement;
|
|
||||||
mov.mPosition[2] = luaControls->mJump ? 1 : 0;
|
|
||||||
mov.mRotation[0] = luaControls->mPitchChange;
|
|
||||||
mov.mRotation[1] = 0;
|
|
||||||
mov.mRotation[2] = luaControls->mYawChange;
|
|
||||||
mov.mSpeedFactor = osg::Vec2(luaControls->mMovement, luaControls->mSideMovement).length();
|
|
||||||
stats.setMovementFlag(MWMechanics::CreatureStats::Flag_Run, luaControls->mRun);
|
|
||||||
stats.setAttackingOrSpell((luaControls->mUse & 1) == 1);
|
|
||||||
luaControls->mChanged = false;
|
|
||||||
}
|
|
||||||
luaControls->mSideMovement = movement.x();
|
|
||||||
luaControls->mMovement = movement.y();
|
|
||||||
luaControls->mPitchChange = rotationX;
|
|
||||||
luaControls->mYawChange = rotationZ;
|
|
||||||
luaControls->mJump = jump;
|
|
||||||
luaControls->mRun = runFlag;
|
|
||||||
luaControls->mUse = attackingOrSpell ? luaControls->mUse | 1 : luaControls->mUse & ~1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue