mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-26 18:35:20 +00:00
Base local rotations implementation
This commit is contained in:
parent
106ef4c936
commit
4e0233cf06
@ -553,26 +553,30 @@ namespace MWScript
|
|||||||
|
|
||||||
std::string axis = runtime.getStringLiteral (runtime[0].mInteger);
|
std::string axis = runtime.getStringLiteral (runtime[0].mInteger);
|
||||||
runtime.pop();
|
runtime.pop();
|
||||||
Interpreter::Type_Float rotation = (runtime[0].mFloat/80); //It works this way, don't ask me why
|
Interpreter::Type_Float rotation = (runtime[0].mFloat/80); //It works this way, don't ask me why (probably framerate)
|
||||||
runtime.pop();
|
runtime.pop();
|
||||||
|
|
||||||
float ax = Ogre::Radian(ptr.getRefData().getPosition().rot[0]).valueDegrees();
|
float *objRot = ptr.getRefData().getPosition().rot;
|
||||||
float ay = Ogre::Radian(ptr.getRefData().getPosition().rot[1]).valueDegrees();
|
|
||||||
float az = Ogre::Radian(ptr.getRefData().getPosition().rot[2]).valueDegrees();
|
|
||||||
|
|
||||||
//Axis in morrowind are inverted
|
if (axis == "x")
|
||||||
if (axis == "y")
|
|
||||||
{
|
{
|
||||||
MWBase::Environment::get().getWorld()->rotateObject(ptr,ax+rotation,ay,az);
|
objRot[0]+=Ogre::Degree(rotation).valueRadians();
|
||||||
|
|
||||||
|
ptr.getRefData().getBaseNode()->rotate(Ogre::Quaternion(Ogre::Radian(Ogre::Degree(-rotation).valueRadians()), Ogre::Vector3::UNIT_X));;
|
||||||
}
|
}
|
||||||
else if (axis == "x")
|
else if (axis == "y")
|
||||||
{
|
{
|
||||||
MWBase::Environment::get().getWorld()->rotateObject(ptr,ax,ay+rotation,az);
|
objRot[1]+=Ogre::Degree(rotation).valueRadians();
|
||||||
|
|
||||||
|
ptr.getRefData().getBaseNode()->rotate(Ogre::Quaternion(Ogre::Radian(Ogre::Degree(-rotation).valueRadians()), Ogre::Vector3::UNIT_Y));
|
||||||
}
|
}
|
||||||
else if (axis == "z")
|
else if (axis == "z")
|
||||||
{
|
{
|
||||||
MWBase::Environment::get().getWorld()->rotateObject(ptr,ax,ay,az+rotation);
|
objRot[2]+=Ogre::Degree(rotation).valueRadians();
|
||||||
|
|
||||||
|
ptr.getRefData().getBaseNode()->rotate(Ogre::Quaternion(Ogre::Radian(Ogre::Degree(-rotation).valueRadians()), Ogre::Vector3::UNIT_Z));
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
throw std::runtime_error ("invalid rotation axis: " + axis);
|
throw std::runtime_error ("invalid rotation axis: " + axis);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user