Fixing bug with Axios Timer

This commit is contained in:
Nathan Adams 2012-12-28 16:57:08 -06:00
parent 69363d83ce
commit e8698d7c6e

View File

@ -16,6 +16,7 @@ namespace Axios.Engine
TimeSpan interval = new TimeSpan(0, 0, 1); TimeSpan interval = new TimeSpan(0, 0, 1);
TimeSpan lastTick = new TimeSpan(); TimeSpan lastTick = new TimeSpan();
private bool _enabled = false; private bool _enabled = false;
public TimeSpan? offset = null;
public event EventHandler Tick; public event EventHandler Tick;
@ -38,12 +39,21 @@ namespace Axios.Engine
public override void Update(AxiosGameScreen gameScreen, GameTime gameTime, bool otherScreenHasFocus, bool coveredByOtherScreen) public override void Update(AxiosGameScreen gameScreen, GameTime gameTime, bool otherScreenHasFocus, bool coveredByOtherScreen)
{ {
// Issue here: if you add a timer later on and use the algorithm of
// gameTime.TotalGameTime - lastTick >= interval
// The timer will always run
// What we should do is have an offset of the time it was added like this:
// ((gameTime.TotalGameTime - offset) - lastTick) >= interval
if (gameScreen.ScreenManager.Game.IsActive) //only "tick" if the window has focus - otherwise the Timer will play catchup if (gameScreen.ScreenManager.Game.IsActive) //only "tick" if the window has focus - otherwise the Timer will play catchup
{ {
if (offset == null)
{
offset = gameTime.TotalGameTime;
return;
}
if (_enabled) if (_enabled)
{ {
if (gameTime.TotalGameTime - lastTick >= interval) if (((gameTime.TotalGameTime - offset) - lastTick) >= interval)
{ {
if (Tick != null) if (Tick != null)
{ {