Skip to content

Commit b4a4c74

Browse files
authored
[GEN][ZH] Decouple tree, water and wave movements from client FPS (#1227)
1 parent d8af372 commit b4a4c74

File tree

6 files changed

+39
-36
lines changed

6 files changed

+39
-36
lines changed

Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,24 +1199,22 @@ void WaterRenderObjClass::update( void )
11991199
if( TheGameLogic )
12001200
currLogicFrame = TheGameLogic->getFrame();
12011201

1202-
m_riverVOrigin += 0.002f;
1203-
m_riverXOffset += (Real)(0.0125*33/5000);
1204-
m_riverYOffset += (Real)(2*0.0125*33/5000);
1205-
if (m_riverXOffset > 1) m_riverXOffset -= 1;
1206-
if (m_riverYOffset > 1) m_riverYOffset -= 1;
1207-
if (m_riverXOffset < -1) m_riverXOffset += 1;
1208-
if (m_riverYOffset < -1) m_riverYOffset += 1;
1209-
m_iBumpFrame++;
1210-
if (m_iBumpFrame >= NUM_BUMP_FRAMES) {
1211-
m_iBumpFrame = 0;
1212-
}
1213-
1214-
1215-
1216-
// we only process some things if the logic frame has changed
1202+
// we only process things if the logic frame has changed
12171203
if( lastLogicFrame != currLogicFrame )
12181204
{
12191205

1206+
m_riverVOrigin += 0.002f;
1207+
m_riverXOffset += (Real)(0.0125*33/5000);
1208+
m_riverYOffset += (Real)(2*0.0125*33/5000);
1209+
if (m_riverXOffset > 1) m_riverXOffset -= 1;
1210+
if (m_riverYOffset > 1) m_riverYOffset -= 1;
1211+
if (m_riverXOffset < -1) m_riverXOffset += 1;
1212+
if (m_riverYOffset < -1) m_riverYOffset += 1;
1213+
m_iBumpFrame++;
1214+
if (m_iBumpFrame >= NUM_BUMP_FRAMES) {
1215+
m_iBumpFrame = 0;
1216+
}
1217+
12201218
// for vertex animated water we need to update the vector field
12211219
if( m_doWaterGrid && m_meshInMotion == TRUE )
12221220
{

Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -832,9 +832,6 @@ void WaterTracksRenderSystem::update()
832832
Int timeDiff = timeGetTime()-iLastTime;
833833
iLastTime += timeDiff;
834834

835-
//Lock framerate to 30 fps
836-
timeDiff = 1.0f/30.0f*1000.0f;
837-
838835
//first update all the tracks
839836
while( mod )
840837
{

GeneralsMD/Code/GameEngineDevice/Include/W3DDevice/GameClient/W3DTreeBuffer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ class W3DTreeTextureClass : public TextureClass
254254
Real m_curSwayOffset[MAX_SWAY_TYPES];
255255
Real m_curSwayStep[MAX_SWAY_TYPES];
256256
Real m_curSwayFactor[MAX_SWAY_TYPES];
257+
Int m_lastLogicFrame;
257258

258259
W3DProjectedShadow *m_shadow;
259260

GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,6 +1286,8 @@ void W3DTreeBuffer::clearAllTrees(void)
12861286
m_areaPartition[i] = END_OF_PARTITION;
12871287
}
12881288
m_numTreeTypes = 0;
1289+
1290+
m_lastLogicFrame = 0;
12891291
}
12901292

12911293
//=============================================================================
@@ -1551,6 +1553,16 @@ void W3DTreeBuffer::drawTrees(CameraClass * camera, RefRenderObjListIterator *pD
15511553
if (TheGameLogic && TheGameLogic->isGamePaused()) {
15521554
pause = true;
15531555
}
1556+
1557+
// TheSuperHackers @bugfix Mauller 04/07/2025 decouple the tree sway position updates from the client fps
1558+
if (TheGameLogic) {
1559+
UnsignedInt currentFrame = TheGameLogic->getFrame();
1560+
if (m_lastLogicFrame == currentFrame) {
1561+
pause = true;
1562+
}
1563+
m_lastLogicFrame = currentFrame;
1564+
}
1565+
15541566
Int i;
15551567
if (!pause) {
15561568
if (info.m_breezeVersion != m_curSwayVersion)

GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWater.cpp

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1222,24 +1222,22 @@ void WaterRenderObjClass::update( void )
12221222
if( TheGameLogic )
12231223
currLogicFrame = TheGameLogic->getFrame();
12241224

1225-
m_riverVOrigin += 0.002f;
1226-
m_riverXOffset += (Real)(0.0125*33/5000);
1227-
m_riverYOffset += (Real)(2*0.0125*33/5000);
1228-
if (m_riverXOffset > 1) m_riverXOffset -= 1;
1229-
if (m_riverYOffset > 1) m_riverYOffset -= 1;
1230-
if (m_riverXOffset < -1) m_riverXOffset += 1;
1231-
if (m_riverYOffset < -1) m_riverYOffset += 1;
1232-
m_iBumpFrame++;
1233-
if (m_iBumpFrame >= NUM_BUMP_FRAMES) {
1234-
m_iBumpFrame = 0;
1235-
}
1236-
1237-
1238-
1239-
// we only process some things if the logic frame has changed
1225+
// we only process things if the logic frame has changed
12401226
if( lastLogicFrame != currLogicFrame )
12411227
{
12421228

1229+
m_riverVOrigin += 0.002f;
1230+
m_riverXOffset += (Real)(0.0125*33/5000);
1231+
m_riverYOffset += (Real)(2*0.0125*33/5000);
1232+
if (m_riverXOffset > 1) m_riverXOffset -= 1;
1233+
if (m_riverYOffset > 1) m_riverYOffset -= 1;
1234+
if (m_riverXOffset < -1) m_riverXOffset += 1;
1235+
if (m_riverYOffset < -1) m_riverYOffset += 1;
1236+
m_iBumpFrame++;
1237+
if (m_iBumpFrame >= NUM_BUMP_FRAMES) {
1238+
m_iBumpFrame = 0;
1239+
}
1240+
12431241
// for vertex animated water we need to update the vector field
12441242
if( m_doWaterGrid && m_meshInMotion == TRUE )
12451243
{

GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Water/W3DWaterTracks.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -835,9 +835,6 @@ void WaterTracksRenderSystem::update()
835835
Int timeDiff = timeGetTime()-iLastTime;
836836
iLastTime += timeDiff;
837837

838-
//Lock framerate to 30 fps
839-
timeDiff = 1.0f/30.0f*1000.0f;
840-
841838
//first update all the tracks
842839
while( mod )
843840
{

0 commit comments

Comments
 (0)