Added yielding, input refreshes as fast as possible.
This commit is contained in:
parent
3ecd32520c
commit
fbda9b912f
@ -81,7 +81,7 @@ namespace SlatedGameToolkit.Framework {
|
||||
try {
|
||||
IState initialState = (IState) o;
|
||||
manager.Initialize(initialState);
|
||||
DateTime currentTime = DateTime.Now;
|
||||
DateTime previousTime = DateTime.Now;
|
||||
TimeSpan timePassedFromLastUpdate = TimeSpan.Zero;
|
||||
TimeSpan timePassedFromLastRender = TimeSpan.Zero;
|
||||
TimeSpan updateDeltaTime = GameEngine.updateDeltaTime;
|
||||
@ -99,68 +99,70 @@ namespace SlatedGameToolkit.Framework {
|
||||
}
|
||||
deltaChanged = false;
|
||||
}
|
||||
#region EventHandling
|
||||
//Events
|
||||
SDL.SDL_Event SDL_Event;
|
||||
while (SDL.SDL_PollEvent(out SDL_Event) != 0) {
|
||||
switch (SDL_Event.type) {
|
||||
case SDL.SDL_EventType.SDL_MOUSEMOTION:
|
||||
Mouse.OnMouseMoved(SDL_Event.motion.x, SDL_Event.motion.y);
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_MOUSEWHEEL:
|
||||
Mouse.OnScroll(SDL_Event.wheel.x, SDL_Event.wheel.y);
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN:
|
||||
if (SDL.SDL_BUTTON_LEFT == SDL_Event.button.button) {
|
||||
Mouse.OnLeftChange(true);
|
||||
} else if (SDL.SDL_BUTTON_RIGHT == SDL_Event.button.button) {
|
||||
Mouse.OnRightChange(true);
|
||||
} else if (SDL.SDL_BUTTON_MIDDLE == SDL_Event.button.button) {
|
||||
Mouse.OnMiddleChange(true);
|
||||
}
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_MOUSEBUTTONUP:
|
||||
if (SDL.SDL_BUTTON_LEFT == SDL_Event.button.button) {
|
||||
Mouse.OnLeftChange(false);
|
||||
} else if (SDL.SDL_BUTTON_RIGHT == SDL_Event.button.button) {
|
||||
Mouse.OnRightChange(false);
|
||||
} else if (SDL.SDL_BUTTON_MIDDLE == SDL_Event.button.button) {
|
||||
Mouse.OnMiddleChange(false);
|
||||
}
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_KEYDOWN:
|
||||
Keyboard.OnKeyPressed(SDL_Event.key.keysym.sym);
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_KEYUP:
|
||||
Keyboard.OnKeyReleased(SDL_Event.key.keysym.sym);
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_WINDOWEVENT:
|
||||
WindowContext handle = WindowContextsManager.ContextFromWindowID(SDL_Event.window.windowID);
|
||||
switch (SDL_Event.window.windowEvent)
|
||||
{
|
||||
case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_SIZE_CHANGED:
|
||||
handle.OnResize(SDL_Event.window.data1, SDL_Event.window.data2);
|
||||
break;
|
||||
case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST:
|
||||
handle.OnFocusLost();
|
||||
break;
|
||||
case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||
handle.OnFocusGained();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_QUIT:
|
||||
Stop();
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
DateTime frameStart = DateTime.Now;
|
||||
TimeSpan difference = frameStart - currentTime;
|
||||
currentTime = frameStart;
|
||||
TimeSpan difference = frameStart - previousTime;
|
||||
previousTime = frameStart;
|
||||
|
||||
timePassedFromLastUpdate += difference;
|
||||
while (timePassedFromLastUpdate > updateDeltaTime) {
|
||||
//Updates.
|
||||
//Events
|
||||
SDL.SDL_Event SDL_Event;
|
||||
while (SDL.SDL_PollEvent(out SDL_Event) != 0) {
|
||||
switch (SDL_Event.type) {
|
||||
case SDL.SDL_EventType.SDL_MOUSEMOTION:
|
||||
Mouse.OnMouseMoved(SDL_Event.motion.x, SDL_Event.motion.y);
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_MOUSEWHEEL:
|
||||
Mouse.OnScroll(SDL_Event.wheel.x, SDL_Event.wheel.y);
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN:
|
||||
if (SDL.SDL_BUTTON_LEFT == SDL_Event.button.button) {
|
||||
Mouse.OnLeftChange(true);
|
||||
} else if (SDL.SDL_BUTTON_RIGHT == SDL_Event.button.button) {
|
||||
Mouse.OnRightChange(true);
|
||||
} else if (SDL.SDL_BUTTON_MIDDLE == SDL_Event.button.button) {
|
||||
Mouse.OnMiddleChange(true);
|
||||
}
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_MOUSEBUTTONUP:
|
||||
if (SDL.SDL_BUTTON_LEFT == SDL_Event.button.button) {
|
||||
Mouse.OnLeftChange(false);
|
||||
} else if (SDL.SDL_BUTTON_RIGHT == SDL_Event.button.button) {
|
||||
Mouse.OnRightChange(false);
|
||||
} else if (SDL.SDL_BUTTON_MIDDLE == SDL_Event.button.button) {
|
||||
Mouse.OnMiddleChange(false);
|
||||
}
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_KEYDOWN:
|
||||
Keyboard.OnKeyPressed(SDL_Event.key.keysym.sym);
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_KEYUP:
|
||||
Keyboard.OnKeyReleased(SDL_Event.key.keysym.sym);
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_WINDOWEVENT:
|
||||
WindowContext handle = WindowContextsManager.ContextFromWindowID(SDL_Event.window.windowID);
|
||||
switch (SDL_Event.window.windowEvent)
|
||||
{
|
||||
case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_SIZE_CHANGED:
|
||||
handle.OnResize(SDL_Event.window.data1, SDL_Event.window.data2);
|
||||
break;
|
||||
case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST:
|
||||
handle.OnFocusLost();
|
||||
break;
|
||||
case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||
handle.OnFocusGained();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SDL.SDL_EventType.SDL_QUIT:
|
||||
Stop();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
manager.update(updateDeltaTime.TotalSeconds <= 0 ? timePassedFromLastUpdate.TotalSeconds : updateDeltaTime.TotalSeconds);
|
||||
timePassedFromLastUpdate -= updateDeltaTime;
|
||||
if (updateDeltaTime.TotalSeconds <= 0) {
|
||||
@ -174,6 +176,8 @@ namespace SlatedGameToolkit.Framework {
|
||||
//Draw calls.
|
||||
manager.render(updateDeltaTime.TotalSeconds <= 0 ? updateDeltaTime.TotalSeconds : (timePassedFromLastUpdate / updateDeltaTime));
|
||||
timePassedFromLastRender = TimeSpan.Zero;
|
||||
} else {
|
||||
Thread.Yield();
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user