alexionne, I'm trying your code and what I get is that the mouse has no effect at all:
Code: Select all
void CSceneNodeControllerAnimator::animateNode(ISceneNode* node, u32 timeMs)
{
if (!node)
return;
// Lock the mouse cursor's position to the center of the screen
if(m_IsCursorUsed)
m_pCursorControl->setPosition(m_CenterPosition);
f32 timeDiff = 0.f;
// so timeDiff will be 0.f on first time
if(m_LastAnimationTime)
timeDiff = (f32) ( timeMs - m_LastAnimationTime );
m_LastAnimationTime = timeMs;
f32 MovementSpeed = m_MoveSpeed/1000.f * timeDiff;
f32 RotationSpeed = m_RotateSpeed/1000.f * timeDiff;
// Calculate Mouse Movement
position2df CursorPosition = m_pCursorControl->getRelativePosition();
m_DeltaMousePos = CursorPosition - m_LastMousePos;
if (timeDiff == 0)
{
m_DeltaMousePos.X = 0;
m_DeltaMousePos.Y = 0;
}
else
{
const f32 factor = 1000.f;
f32 scale = factor / (f32)timeDiff;
m_DeltaMousePos.X *= scale;
m_DeltaMousePos.Y *= scale;
}
// Calculate Movement
vector3df VelocityVector;
if (m_Input[EKOP_MOVE_FORWARD])
{
VelocityVector = vector3df(0.f,0.f,1.f);
}
if (m_Input[EKOP_MOVE_BACKWARD])
{
VelocityVector = vector3df(0.f,0.f,-1.f);
}
if (m_Input[EKOP_STRAFE_LEFT])
{
VelocityVector = vector3df(-1.f,0.f,0.f);
}
if (m_Input[EKOP_STRAFE_RIGHT])
{
VelocityVector = vector3df(1.f,0.f,0.f);
}
moveNode(node, VelocityVector * MovementSpeed);
// Calculate Rotation
if (m_RotUp || m_Input[EKOP_ROTATE_UP])
{
rotateNode(node, vector3df(-1.f,0.f,0.f) * RotationSpeed);
m_RotUp = !m_RotUp;
}
if (m_RotDown || m_Input[EKOP_ROTATE_DOWN])
{
rotateNode(node, vector3df(1.f,0.f,0.f) * RotationSpeed);
m_RotDown = !m_RotDown;
}
if (m_Input[EKOP_ROTATE_LEFT])
{
rotateNode(node, vector3df(0.f,0.f,1.f) * RotationSpeed);
}
if (m_Input[EKOP_ROTATE_RIGHT])
{
rotateNode(node, vector3df(0.f,0.f,-1.f) * RotationSpeed);
}
if ( m_RotLeft || m_Input[EKOP_YAW_LEFT])
{
if(!m_IsInvertY)
{
rotateNode(node, vector3df(0.f,-1.f,0.f) * RotationSpeed);
}
else
{
rotateNode(node, vector3df(0.f,1.f,0.f) * RotationSpeed);
}
m_RotLeft = !m_RotLeft;
}
if ( m_RotRight || m_Input[EKOP_YAW_RIGHT] )
{
if(!m_IsInvertY)
{
rotateNode(node, vector3df(0.f,1.f,0.f) * RotationSpeed);
}
else
{
rotateNode(node, vector3df(0.f,-1.f,0.f) * RotationSpeed);
}
m_RotRight = !m_RotRight;
}
}
In OnEvent()
Code: Select all
switch(event.MouseInput.Event)
{
case EMIE_MOUSE_MOVED:
{
if(m_DeltaMousePos.X > 0)
{
if(m_IsInvertY)
{
m_RotLeft = true;
m_RotRight = false;
}
else
{
m_RotLeft = false;
m_RotRight = true;
}
}
else if(m_DeltaMousePos.X < 0)
{
if(m_IsInvertY)
{
m_RotLeft = false;
m_RotRight = true;
}
else
{
m_RotLeft = true;
m_RotRight = false;
}
}
if(m_DeltaMousePos.Y > 0)
{
if(m_IsInvertX)
{
m_RotUp = true;
m_RotDown = false;
}
else
{
m_RotUp = false;
m_RotDown = true;
}
}
else if(m_DeltaMousePos.Y < 0)
{
if(m_IsInvertX)
{
m_RotUp = false;
m_RotDown = true;
}
else
{
m_RotUp = true;
m_RotDown = false;
}
}
break;
}