29
29
#include " PreRTS.h" // This must go first in EVERY cpp file int the GameEngine
30
30
31
31
#include " Common/GameType.h"
32
+ #include " Common/GameEngine.h"
32
33
#include " Common/MessageStream.h"
33
34
#include " Common/Player.h"
34
35
#include " Common/PlayerList.h"
@@ -366,15 +367,19 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage
366
367
367
368
Int spin = msg->getArgument ( 1 )->integer ;
368
369
370
+ // TheSuperHackers @tweak The camera zoom is now decoupled from the render update.
371
+ const Real fpsRatio = (Real)BaseFps / TheGameEngine->getUpdateFps ();
372
+ const Real zoomHeight = (Real)View::ZoomHeightPerSecond * fpsRatio;
373
+
369
374
if (spin > 0 )
370
375
{
371
376
for ( ; spin > 0 ; spin--)
372
- TheTacticalView->zoomIn ( );
377
+ TheTacticalView->zoom ( -zoomHeight );
373
378
}
374
379
else
375
380
{
376
381
for ( ;spin < 0 ; spin++ )
377
- TheTacticalView->zoomOut ( );
382
+ TheTacticalView->zoom ( +zoomHeight );
378
383
}
379
384
}
380
385
@@ -404,11 +409,8 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage
404
409
if (m_isScrolling)
405
410
{
406
411
407
- // TheSuperHackers @bugfix Mauller 07/06/2025 Adjust the viewport scrolling so it is independent of GameClient FPS
408
- // The scaling is based on the current logic rate, this provides a consistent scroll speed at all GameClient FPS
409
- // This also fixes scrolling within replays when fast forwarding due to the uncapped FPS
410
- // When the FPS is in excess of the expected frame rate, the ratio will reduce the offset of the cameras movement
411
- const Real logicToFpsRatio = TheGlobalData->m_framesPerSecondLimit / TheDisplay->getCurrentFPS ();
412
+ // TheSuperHackers @bugfix Mauller 07/06/2025 The camera scrolling is now decoupled from the render update.
413
+ const Real fpsRatio = (Real)BaseFps / TheGameEngine->getUpdateFps ();
412
414
413
415
switch (m_scrollType)
414
416
{
@@ -437,27 +439,27 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage
437
439
// TheSuperHackers @info calculate the length of the vector to obtain the movement speed before the vector is normalized
438
440
float vecLength = vec.length ();
439
441
vec.normalize ();
440
- offset.x = TheGlobalData->m_horizontalScrollSpeedFactor * logicToFpsRatio * vecLength * vec.x * SCROLL_MULTIPLIER * TheGlobalData->m_keyboardScrollFactor ;
441
- offset.y = TheGlobalData->m_verticalScrollSpeedFactor * logicToFpsRatio * vecLength * vec.y * SCROLL_MULTIPLIER * TheGlobalData->m_keyboardScrollFactor ;
442
+ offset.x = TheGlobalData->m_horizontalScrollSpeedFactor * fpsRatio * vecLength * vec.x * SCROLL_MULTIPLIER * TheGlobalData->m_keyboardScrollFactor ;
443
+ offset.y = TheGlobalData->m_verticalScrollSpeedFactor * fpsRatio * vecLength * vec.y * SCROLL_MULTIPLIER * TheGlobalData->m_keyboardScrollFactor ;
442
444
}
443
445
break ;
444
446
case SCROLL_KEY:
445
447
{
446
448
if (scrollDir[DIR_UP])
447
449
{
448
- offset.y -= TheGlobalData->m_verticalScrollSpeedFactor * logicToFpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
450
+ offset.y -= TheGlobalData->m_verticalScrollSpeedFactor * fpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
449
451
}
450
452
if (scrollDir[DIR_DOWN])
451
453
{
452
- offset.y += TheGlobalData->m_verticalScrollSpeedFactor * logicToFpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
454
+ offset.y += TheGlobalData->m_verticalScrollSpeedFactor * fpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
453
455
}
454
456
if (scrollDir[DIR_LEFT])
455
457
{
456
- offset.x -= TheGlobalData->m_horizontalScrollSpeedFactor * logicToFpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
458
+ offset.x -= TheGlobalData->m_horizontalScrollSpeedFactor * fpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
457
459
}
458
460
if (scrollDir[DIR_RIGHT])
459
461
{
460
- offset.x += TheGlobalData->m_horizontalScrollSpeedFactor * logicToFpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
462
+ offset.x += TheGlobalData->m_horizontalScrollSpeedFactor * fpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
461
463
}
462
464
}
463
465
break ;
@@ -467,19 +469,19 @@ GameMessageDisposition LookAtTranslator::translateGameMessage(const GameMessage
467
469
UnsignedInt width = TheDisplay->getWidth ();
468
470
if (m_currentPos.y < edgeScrollSize)
469
471
{
470
- offset.y -= TheGlobalData->m_verticalScrollSpeedFactor * logicToFpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
472
+ offset.y -= TheGlobalData->m_verticalScrollSpeedFactor * fpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
471
473
}
472
474
if (m_currentPos.y >= height-edgeScrollSize)
473
475
{
474
- offset.y += TheGlobalData->m_verticalScrollSpeedFactor * logicToFpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
476
+ offset.y += TheGlobalData->m_verticalScrollSpeedFactor * fpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
475
477
}
476
478
if (m_currentPos.x < edgeScrollSize)
477
479
{
478
- offset.x -= TheGlobalData->m_horizontalScrollSpeedFactor * logicToFpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
480
+ offset.x -= TheGlobalData->m_horizontalScrollSpeedFactor * fpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
479
481
}
480
482
if (m_currentPos.x >= width-edgeScrollSize)
481
483
{
482
- offset.x += TheGlobalData->m_horizontalScrollSpeedFactor * logicToFpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
484
+ offset.x += TheGlobalData->m_horizontalScrollSpeedFactor * fpsRatio * SCROLL_AMT * TheGlobalData->m_keyboardScrollFactor ;
483
485
}
484
486
}
485
487
break ;
0 commit comments