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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user