@@ -139,7 +139,7 @@ LookAtTranslator::LookAtTranslator() :
139139 m_isChangingFOV(false ),
140140 m_middleButtonDownTimeMsec(0 ),
141141 m_lastPlaneID(INVALID_DRAWABLE_ID),
142- m_lastMouseMoveFrame (0 ),
142+ m_lastMouseMoveTimeMsec (0 ),
143143 m_scrollType(SCROLL_NONE)
144144{
145145 m_anchor.x = m_anchor.y = 0 ;
@@ -171,10 +171,14 @@ const ICoord2D* LookAtTranslator::getRMBScrollAnchor(void)
171171
172172Bool LookAtTranslator::hasMouseMovedRecently ( void )
173173{
174- if (m_lastMouseMoveFrame > TheGameLogic-> getFrame ())
175- m_lastMouseMoveFrame = 0 ; // reset for new game
174+ const UnsignedInt ONE_SECOND_MSEC = 1000 ;
175+ UnsignedInt now = timeGetTime ();
176176
177- if (m_lastMouseMoveFrame + LOGICFRAMES_PER_SECOND < TheGameLogic->getFrame ())
177+ // Handle time wraparound
178+ if (now < m_lastMouseMoveTimeMsec)
179+ m_lastMouseMoveTimeMsec = now;
180+
181+ if (now - m_lastMouseMoveTimeMsec > ONE_SECOND_MSEC)
178182 return false ;
179183
180184 return true ;
@@ -256,7 +260,7 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage
256260 // -----------------------------------------------------------------------------
257261 case GameMessage::MSG_RAW_MOUSE_RIGHT_BUTTON_DOWN:
258262 {
259- m_lastMouseMoveFrame = TheGameLogic-> getFrame ();
263+ m_lastMouseMoveTimeMsec = timeGetTime ();
260264
261265 m_anchor = msg->getArgument ( 0 )->pixel ;
262266 m_currentPos = msg->getArgument ( 0 )->pixel ;
@@ -272,7 +276,7 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage
272276 // -----------------------------------------------------------------------------
273277 case GameMessage::MSG_RAW_MOUSE_RIGHT_BUTTON_UP:
274278 {
275- m_lastMouseMoveFrame = TheGameLogic-> getFrame ();
279+ m_lastMouseMoveTimeMsec = timeGetTime ();
276280
277281 if (m_scrollType == SCROLL_RMB)
278282 {
@@ -284,7 +288,7 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage
284288 // -----------------------------------------------------------------------------
285289 case GameMessage::MSG_RAW_MOUSE_MIDDLE_BUTTON_DOWN:
286290 {
287- m_lastMouseMoveFrame = TheGameLogic-> getFrame ();
291+ m_lastMouseMoveTimeMsec = timeGetTime ();
288292
289293 m_isRotating = true ;
290294 m_anchor = msg->getArgument ( 0 )->pixel ;
@@ -298,7 +302,7 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage
298302 // -----------------------------------------------------------------------------
299303 case GameMessage::MSG_RAW_MOUSE_MIDDLE_BUTTON_UP:
300304 {
301- m_lastMouseMoveFrame = TheGameLogic-> getFrame ();
305+ m_lastMouseMoveTimeMsec = timeGetTime ();
302306
303307 const UnsignedInt CLICK_DURATION_MSEC = 167 ;
304308 const UnsignedInt PIXEL_OFFSET = 5 ;
@@ -322,7 +326,7 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage
322326 case GameMessage::MSG_RAW_MOUSE_POSITION:
323327 {
324328 if (m_currentPos.x != msg->getArgument ( 0 )->pixel .x || m_currentPos.y != msg->getArgument ( 0 )->pixel .y )
325- m_lastMouseMoveFrame = TheGameLogic-> getFrame ();
329+ m_lastMouseMoveTimeMsec = timeGetTime ();
326330
327331 m_currentPos = msg->getArgument ( 0 )->pixel ;
328332
@@ -402,7 +406,7 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage
402406 // -----------------------------------------------------------------------------
403407 case GameMessage::MSG_RAW_MOUSE_WHEEL:
404408 {
405- m_lastMouseMoveFrame = TheGameLogic-> getFrame ();
409+ m_lastMouseMoveTimeMsec = timeGetTime ();
406410
407411 Int spin = msg->getArgument ( 1 )->integer ;
408412
0 commit comments