Fixed timestep for some GUI & input code

Fixed timestep only applied to the physics simulation, but input and GUI updates were not being handled properly, so here's some progress into fixing them.
This commit is contained in:
juanjp600
2016-09-18 11:03:52 -03:00
parent 179c0424d7
commit 33641ead3e
14 changed files with 153 additions and 50 deletions

View File

@@ -71,6 +71,9 @@ namespace Barotrauma
private bool hasLoaded;
private GameTime fixedTime;
private double updatesToMake;
//public static Random localRandom;
//public static Random random;
@@ -141,6 +144,9 @@ namespace Barotrauma
IsFixedTimeStep = false;
//TargetElapsedTime = new TimeSpan(0, 0, 0, 0, 55);
updatesToMake = 0.0;
fixedTime = new GameTime();
World = new World(new Vector2(0, -9.82f));
FarseerPhysics.Settings.AllowSleep = true;
FarseerPhysics.Settings.ContinuousPhysics = false;
@@ -286,40 +292,52 @@ namespace Barotrauma
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
base.Update(gameTime);
double realDeltaTime = gameTime.ElapsedGameTime.TotalSeconds;
double deltaTime = 0.016;
updatesToMake += realDeltaTime;
double deltaTime = gameTime.ElapsedGameTime.TotalSeconds;
PlayerInput.Update(deltaTime);
bool paused = false;
if (hasLoaded && !titleScreenOpen)
while (updatesToMake > 0.0)
{
SoundPlayer.Update();
fixedTime.IsRunningSlowly = gameTime.IsRunningSlowly;
TimeSpan addTime = new TimeSpan(0,0,0,0,16);
fixedTime.ElapsedGameTime = addTime;
fixedTime.TotalGameTime.Add(addTime);
base.Update(fixedTime);
if (PlayerInput.KeyHit(Keys.Escape)) GUI.TogglePauseMenu();
PlayerInput.Update(deltaTime);
DebugConsole.Update(this, (float)deltaTime);
bool paused = false;
paused = (DebugConsole.IsOpen || GUI.PauseMenuOpen || GUI.SettingsMenuOpen) &&
(NetworkMember == null || !NetworkMember.GameStarted);
if (!paused) Screen.Selected.Update(deltaTime);
if (NetworkMember != null)
if (hasLoaded && !titleScreenOpen)
{
NetworkMember.Update((float)deltaTime);
}
else
{
SoundPlayer.Update();
if (PlayerInput.KeyHit(Keys.Escape)) GUI.TogglePauseMenu();
DebugConsole.Update(this, (float)deltaTime);
paused = (DebugConsole.IsOpen || GUI.PauseMenuOpen || GUI.SettingsMenuOpen) &&
(NetworkMember == null || !NetworkMember.GameStarted);
if (!paused || Screen.Selected is MainMenuScreen) Screen.Selected.Update(deltaTime);
if (NetworkMember != null)
{
NetworkMember.Update((float)deltaTime);
}
else
{
}
GUI.Update((float)deltaTime);
}
GUI.Update((float)deltaTime);
CoroutineManager.Update((float)deltaTime, paused ? 0.0f : (float)deltaTime);
updatesToMake -= deltaTime;
}
CoroutineManager.Update((float)deltaTime, paused ? 0.0f : (float)deltaTime);
}