From: <fu...@us...> - 2009-08-28 21:03:42
|
Revision: 7070 http://gemrb.svn.sourceforge.net/gemrb/?rev=7070&view=rev Author: fuzzie Date: 2009-08-28 21:03:36 +0000 (Fri, 28 Aug 2009) Log Message: ----------- globaltimer/fade fixes (maybe needs further changes for iwd?) Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/GlobalTimer.cpp gemrb/trunk/gemrb/plugins/Core/GlobalTimer.h Modified: gemrb/trunk/gemrb/plugins/Core/GlobalTimer.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/GlobalTimer.cpp 2009-08-28 19:25:49 UTC (rev 7069) +++ gemrb/trunk/gemrb/plugins/Core/GlobalTimer.cpp 2009-08-28 21:03:36 UTC (rev 7070) @@ -63,6 +63,9 @@ GetTime( thisTime ); advance = thisTime - startTime; + if ( advance < interval) { + return; + } startTime = thisTime; Game* game = core->GetGame(); if (!game) { @@ -70,6 +73,10 @@ } game->RealTime+=advance; + ieDword count = advance/interval; + // pst/bg2 do this, if you fix it for another game, wrap it in a check + DoFadeStep(count); + // show scrolling cursor while paused GameControl* gc = core->GetGameControl(); if (gc) @@ -144,8 +151,6 @@ unsigned long thisTime; unsigned long advance; - Video *video = core->GetVideoDriver(); - gc = core->GetGameControl(); if (gc) gc->UpdateScrolling(); @@ -165,7 +170,39 @@ } ieDword count = advance/interval; DoStep(count); + DoFadeStep(count); + if (!gc) { + goto end; + } + game = core->GetGame(); + if (!game) { + goto end; + } + map = game->GetCurrentArea(); + if (!map) { + goto end; + } + //do spell effects expire in dialogs? + //if yes, then we should remove this condition + if (!(gc->GetDialogueFlags()&DF_IN_DIALOG) ) { + map->UpdateFog(); + map->UpdateEffects(); + if (thisTime) { + //this measures in-world time (affected by effects, actions, etc) + game->AdvanceTime(count); + } + } + //this measures time spent in the game (including pauses) + if (thisTime) { + game->RealTime+=advance; + } +end: + startTime = thisTime; +} + +void GlobalTimer::DoFadeStep(ieDword count) { + Video *video = core->GetVideoDriver(); if (fadeToCounter) { fadeToCounter-=count; if (fadeToCounter<0) { @@ -178,13 +215,13 @@ //i think this 'else' is needed now because of the 'goto' cut above else if (fadeFromCounter!=fadeFromMax) { if (fadeFromCounter>fadeFromMax) { - fadeFromCounter-=advance/interval; + fadeFromCounter-=count; if (fadeFromCounter<fadeFromMax) { fadeFromCounter=fadeFromMax; } //don't freeze gametime when already dark } else { - fadeFromCounter+=advance/interval; + fadeFromCounter+=count; if (fadeToCounter>fadeFromMax) { fadeToCounter=fadeFromMax; } @@ -196,33 +233,6 @@ if (fadeFromCounter==fadeFromMax) { video->SetFadePercent( 0 ); } - if (!gc) { - goto end; - } - game = core->GetGame(); - if (!game) { - goto end; - } - map = game->GetCurrentArea(); - if (!map) { - goto end; - } - //do spell effects expire in dialogs? - //if yes, then we should remove this condition - if (!(gc->GetDialogueFlags()&DF_IN_DIALOG) ) { - map->UpdateFog(); - map->UpdateEffects(); - if (thisTime) { - //this measures in-world time (affected by effects, actions, etc) - game->AdvanceTime(count); - } - } - //this measures time spent in the game (including pauses) - if (thisTime) { - game->RealTime+=advance; - } -end: - startTime = thisTime; } void GlobalTimer::SetFadeToColor(unsigned long Count) Modified: gemrb/trunk/gemrb/plugins/Core/GlobalTimer.h =================================================================== --- gemrb/trunk/gemrb/plugins/Core/GlobalTimer.h 2009-08-28 19:25:49 UTC (rev 7069) +++ gemrb/trunk/gemrb/plugins/Core/GlobalTimer.h 2009-08-28 21:03:36 UTC (rev 7070) @@ -62,6 +62,8 @@ Point goal; int speed; Region currentVP; + + void DoFadeStep(ieDword count); public: GlobalTimer(void); ~GlobalTimer(void); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |