Fixing bug with Axios Timer
This commit is contained in:
parent
69363d83ce
commit
e8698d7c6e
@ -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)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user