Added yielding, input refreshes as fast as possible.

This commit is contained in:
Harrison Deng 2020-07-04 00:39:23 -05:00
parent 3ecd32520c
commit fbda9b912f

View File

@ -81,7 +81,7 @@ namespace SlatedGameToolkit.Framework {
try { try {
IState initialState = (IState) o; IState initialState = (IState) o;
manager.Initialize(initialState); manager.Initialize(initialState);
DateTime currentTime = DateTime.Now; DateTime previousTime = DateTime.Now;
TimeSpan timePassedFromLastUpdate = TimeSpan.Zero; TimeSpan timePassedFromLastUpdate = TimeSpan.Zero;
TimeSpan timePassedFromLastRender = TimeSpan.Zero; TimeSpan timePassedFromLastRender = TimeSpan.Zero;
TimeSpan updateDeltaTime = GameEngine.updateDeltaTime; TimeSpan updateDeltaTime = GameEngine.updateDeltaTime;
@ -99,13 +99,7 @@ namespace SlatedGameToolkit.Framework {
} }
deltaChanged = false; deltaChanged = false;
} }
DateTime frameStart = DateTime.Now; #region EventHandling
TimeSpan difference = frameStart - currentTime;
currentTime = frameStart;
timePassedFromLastUpdate += difference;
while (timePassedFromLastUpdate > updateDeltaTime) {
//Updates.
//Events //Events
SDL.SDL_Event SDL_Event; SDL.SDL_Event SDL_Event;
while (SDL.SDL_PollEvent(out SDL_Event) != 0) { while (SDL.SDL_PollEvent(out SDL_Event) != 0) {
@ -160,7 +154,15 @@ namespace SlatedGameToolkit.Framework {
break; break;
} }
} }
#endregion
DateTime frameStart = DateTime.Now;
TimeSpan difference = frameStart - previousTime;
previousTime = frameStart;
timePassedFromLastUpdate += difference;
while (timePassedFromLastUpdate > updateDeltaTime) {
//Updates.
manager.update(updateDeltaTime.TotalSeconds <= 0 ? timePassedFromLastUpdate.TotalSeconds : updateDeltaTime.TotalSeconds); manager.update(updateDeltaTime.TotalSeconds <= 0 ? timePassedFromLastUpdate.TotalSeconds : updateDeltaTime.TotalSeconds);
timePassedFromLastUpdate -= updateDeltaTime; timePassedFromLastUpdate -= updateDeltaTime;
if (updateDeltaTime.TotalSeconds <= 0) { if (updateDeltaTime.TotalSeconds <= 0) {
@ -174,6 +176,8 @@ namespace SlatedGameToolkit.Framework {
//Draw calls. //Draw calls.
manager.render(updateDeltaTime.TotalSeconds <= 0 ? updateDeltaTime.TotalSeconds : (timePassedFromLastUpdate / updateDeltaTime)); manager.render(updateDeltaTime.TotalSeconds <= 0 ? updateDeltaTime.TotalSeconds : (timePassedFromLastUpdate / updateDeltaTime));
timePassedFromLastRender = TimeSpan.Zero; timePassedFromLastRender = TimeSpan.Zero;
} else {
Thread.Yield();
} }
} }
} catch (Exception e) { } catch (Exception e) {