Code:
// rotates "vecIn" along the X axis with a "rotation" angle
stock rotateVectorX(const Float:vecIn[3], Float:rotation, anglemode:measurement, Float:vecOut[3])
{
vecOut[1] = (vecIn[1] * floatcos(rotation, measurement)) - (vecIn[2] * floatsin(rotation, measurement));
vecOut[2] = (vecIn[1] * floatsin(rotation, measurement)) - (vecIn[2] * floatcos(rotation, measurement));
vecOut[0] = vecIn[0];
}
// rotates "vecIn" along the Y axis with a "rotation" angle
stock rotateVectorY(const Float:vecIn[3], Float:rotation, anglemode:measurement, Float:vecOut[3])
{
vecOut[2] = (vecIn[2] * floatcos(rotation, measurement)) - (vecIn[0] * floatsin(rotation, measurement));
vecOut[0] = (vecIn[2] * floatsin(rotation, measurement)) - (vecIn[0] * floatcos(rotation, measurement));
vecOut[1] = vecIn[1];
}
// rotates "vecIn" along the Z axis with a "rotation" angle
stock rotateVectorZ(const Float:vecIn[3], Float:rotation, anglemode:measurement, Float:vecOut[3])
{
vecOut[0] = (vecIn[0] * floatcos(rotation, measurement)) - (vecIn[1] * floatsin(rotation, measurement));
vecOut[1] = (vecIn[0] * floatsin(rotation, measurement)) - (vecIn[1] * floatcos(rotation, measurement));
vecOut[2] = vecIn[2];
}
For your situation you can do:
Code:
new iEyes[3], Float:eyes[3];
get_user_origin(client, iEyes, 1);
IVecFVec(iEyes, eyes);
new iAim[3], Float:aim[3];
get_user_origin(client, iAim, 3);
IVecFVec(iAim, aim);
new Float:vector[3];
vector[0] = aim[0] - eyes[0];
vector[1] = aim[1] - eyes[1];
vector[2] = aim[2] - eyes[2];
// to left:
rotateVectorZ(vector, -90.0, degrees, vector);
// to right:
rotateVectorZ(vector, 90.0, degrees, vector);
// to backwards:
rotateVectorZ(vector, 180.0, degrees, vector);
// for forwards, don't rotate it at all
new Float:length = vector_length(vector);
vector[0] = vector[0] / length * /* your desired speed */;
vector[1] = vector[1] / length * /* your desired speed */;
vector[2] = vector[2] / length * /* your desired speed */;
__________________