mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-04 02:45:35 +00:00
Merge branch 'analogue-movement' into 'master'
Analogue Joystick Movement Closes #3025 See merge request OpenMW/openmw!74
This commit is contained in:
commit
6c522a0875
4 changed files with 29 additions and 23 deletions
|
@ -518,28 +518,17 @@ namespace MWInput
|
||||||
// joystick movement
|
// joystick movement
|
||||||
float xAxis = mInputBinder->getChannel(A_MoveLeftRight)->getValue();
|
float xAxis = mInputBinder->getChannel(A_MoveLeftRight)->getValue();
|
||||||
float yAxis = mInputBinder->getChannel(A_MoveForwardBackward)->getValue();
|
float yAxis = mInputBinder->getChannel(A_MoveForwardBackward)->getValue();
|
||||||
if (xAxis < .5)
|
if (xAxis != .5)
|
||||||
{
|
{
|
||||||
triedToMove = true;
|
triedToMove = true;
|
||||||
mPlayer->setLeftRight (-1);
|
mPlayer->setLeftRight((xAxis - 0.5f) * 2);
|
||||||
}
|
|
||||||
else if (xAxis > .5)
|
|
||||||
{
|
|
||||||
triedToMove = true;
|
|
||||||
mPlayer->setLeftRight (1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (yAxis < .5)
|
if (yAxis != .5)
|
||||||
{
|
{
|
||||||
triedToMove = true;
|
triedToMove = true;
|
||||||
mPlayer->setAutoMove (false);
|
mPlayer->setAutoMove (false);
|
||||||
mPlayer->setForwardBackward (1);
|
mPlayer->setForwardBackward((yAxis - 0.5f) * 2 * -1);
|
||||||
}
|
|
||||||
else if (yAxis > .5)
|
|
||||||
{
|
|
||||||
triedToMove = true;
|
|
||||||
mPlayer->setAutoMove (false);
|
|
||||||
mPlayer->setForwardBackward (-1);
|
|
||||||
}
|
}
|
||||||
else if(mPlayer->getAutoMove())
|
else if(mPlayer->getAutoMove())
|
||||||
{
|
{
|
||||||
|
|
|
@ -1956,6 +1956,23 @@ void CharacterController::update(float duration, bool animationOnly)
|
||||||
osg::Vec3f rot = cls.getRotationVector(mPtr);
|
osg::Vec3f rot = cls.getRotationVector(mPtr);
|
||||||
|
|
||||||
speed = cls.getSpeed(mPtr);
|
speed = cls.getSpeed(mPtr);
|
||||||
|
if(isPlayer)
|
||||||
|
{
|
||||||
|
// Joystick anologue movement.
|
||||||
|
float xAxis = std::abs(cls.getMovementSettings(mPtr).mPosition[0]);
|
||||||
|
float yAxis = std::abs(cls.getMovementSettings(mPtr).mPosition[1]);
|
||||||
|
float analogueMovement = ((xAxis > yAxis) ? xAxis : yAxis);
|
||||||
|
|
||||||
|
// If Strafing, our max speed is slower so multiply by X axis instead.
|
||||||
|
if(std::abs(vec.x()/2.0f) > std::abs(vec.y()))
|
||||||
|
analogueMovement = xAxis;
|
||||||
|
|
||||||
|
// Due to the half way split between walking/running, we multiply speed by 2 while walking, unless a keyboard was used.
|
||||||
|
if(!isrunning && !sneak && !flying && analogueMovement <= 0.5f)
|
||||||
|
speed *= 2;
|
||||||
|
|
||||||
|
speed *= (analogueMovement);
|
||||||
|
}
|
||||||
|
|
||||||
vec.x() *= speed;
|
vec.x() *= speed;
|
||||||
vec.y() *= speed;
|
vec.y() *= speed;
|
||||||
|
|
|
@ -154,16 +154,16 @@ namespace MWWorld
|
||||||
if (mAutoMove)
|
if (mAutoMove)
|
||||||
value = 1;
|
value = 1;
|
||||||
|
|
||||||
ptr.getClass().getMovementSettings(ptr).mPosition[1] = static_cast<float>(value);
|
ptr.getClass().getMovementSettings(ptr).mPosition[1] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::setLeftRight (int value)
|
void Player::setLeftRight (float value)
|
||||||
{
|
{
|
||||||
MWWorld::Ptr ptr = getPlayer();
|
MWWorld::Ptr ptr = getPlayer();
|
||||||
ptr.getClass().getMovementSettings(ptr).mPosition[0] = static_cast<float>(value);
|
ptr.getClass().getMovementSettings(ptr).mPosition[0] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::setForwardBackward (int value)
|
void Player::setForwardBackward (float value)
|
||||||
{
|
{
|
||||||
MWWorld::Ptr ptr = getPlayer();
|
MWWorld::Ptr ptr = getPlayer();
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ namespace MWWorld
|
||||||
if (mAutoMove)
|
if (mAutoMove)
|
||||||
value = 1;
|
value = 1;
|
||||||
|
|
||||||
ptr.getClass().getMovementSettings(ptr).mPosition[1] = static_cast<float>(value);
|
ptr.getClass().getMovementSettings(ptr).mPosition[1] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::setUpDown(int value)
|
void Player::setUpDown(int value)
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace MWWorld
|
||||||
CellStore* mMarkedCell;
|
CellStore* mMarkedCell;
|
||||||
|
|
||||||
bool mAutoMove;
|
bool mAutoMove;
|
||||||
int mForwardBackward;
|
float mForwardBackward;
|
||||||
bool mTeleported;
|
bool mTeleported;
|
||||||
|
|
||||||
int mCurrentCrimeId; // the id assigned witnesses
|
int mCurrentCrimeId; // the id assigned witnesses
|
||||||
|
@ -94,9 +94,9 @@ namespace MWWorld
|
||||||
bool getAutoMove() const;
|
bool getAutoMove() const;
|
||||||
void setAutoMove (bool enable);
|
void setAutoMove (bool enable);
|
||||||
|
|
||||||
void setLeftRight (int value);
|
void setLeftRight (float value);
|
||||||
|
|
||||||
void setForwardBackward (int value);
|
void setForwardBackward (float value);
|
||||||
void setUpDown(int value);
|
void setUpDown(int value);
|
||||||
|
|
||||||
void setRunState(bool run);
|
void setRunState(bool run);
|
||||||
|
|
Loading…
Reference in a new issue