Revert "Revert back to 1.0.3"
This commit is contained in:
@@ -37,6 +37,10 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
get { return PhysicsBody.List.Count; }
|
get { return PhysicsBody.List.Count; }
|
||||||
}
|
}
|
||||||
|
public int ConnectClients
|
||||||
|
{
|
||||||
|
get { return Client.ClientList.Count; }
|
||||||
|
}
|
||||||
|
|
||||||
public double RealTickRate
|
public double RealTickRate
|
||||||
{
|
{
|
||||||
@@ -160,6 +164,7 @@ namespace Barotrauma
|
|||||||
return $"Server Performence Info \n" +
|
return $"Server Performence Info \n" +
|
||||||
$"Item Count: {ItemCount}\n" +
|
$"Item Count: {ItemCount}\n" +
|
||||||
$"Character Count: {CharacterCount}\n" +
|
$"Character Count: {CharacterCount}\n" +
|
||||||
|
$"Clients Count {ConnectClients}\n " +
|
||||||
$"PhysicsBody Count: {PhysicsBodyCount}\n" +
|
$"PhysicsBody Count: {PhysicsBodyCount}\n" +
|
||||||
$"Tick Rate: {RealTickRate}\n" +
|
$"Tick Rate: {RealTickRate}\n" +
|
||||||
$"Min Tick Rate: {TickRateLow}\n" +
|
$"Min Tick Rate: {TickRateLow}\n" +
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ namespace Barotrauma
|
|||||||
GameMain.ShouldRun = false;
|
GameMain.ShouldRun = false;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
Console.WriteLine("Barotrauma Dedicated Server " + GameMain.Version +
|
Console.WriteLine("Barotrauma Dedicated Server(EP) " + GameMain.Version +
|
||||||
" (" + AssemblyInfo.BuildString + ", branch " + AssemblyInfo.GitBranch + ", revision " + AssemblyInfo.GitRevision + ")");
|
" (" + AssemblyInfo.BuildString + ", branch " + AssemblyInfo.GitBranch + ", revision " + AssemblyInfo.GitRevision + ")");
|
||||||
if (Console.IsOutputRedirected)
|
if (Console.IsOutputRedirected)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -479,7 +479,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
foreach (Fixture fixture in triggerBody.FarseerBody.FixtureList)
|
foreach (Fixture fixture in triggerBody.FarseerBody.FixtureList)
|
||||||
{
|
{
|
||||||
ContactEdge contactEdge = fixture.Body.ContactList.CreateCopy();
|
ContactEdge contactEdge = fixture.Body.ContactList == null ? null: fixture.Body.ContactList.CreateCopy();
|
||||||
while (contactEdge != null)
|
while (contactEdge != null)
|
||||||
{
|
{
|
||||||
if (contactEdge.Contact != null &&
|
if (contactEdge.Contact != null &&
|
||||||
|
|||||||
@@ -642,44 +642,34 @@ namespace Barotrauma
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void UpdateAll(float deltaTime, Camera cam , ParallelOptions parallelOptions)
|
public static void UpdateAll(float deltaTime, Camera cam , ParallelOptions parallelOptions)
|
||||||
{
|
{
|
||||||
mapEntityUpdateTick++;
|
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
var sw = new System.Diagnostics.Stopwatch();
|
var sw = new System.Diagnostics.Stopwatch();
|
||||||
sw.Start();
|
sw.Start();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool shouldUpdateMapEntities = mapEntityUpdateTick % MapEntityUpdateInterval == 0;
|
|
||||||
bool shouldUpdatePower = mapEntityUpdateTick % PoweredUpdateInterval == 0;
|
|
||||||
|
|
||||||
// Buffer lists to avoid repeated allocations
|
// Buffer lists to avoid repeated allocations
|
||||||
var hullList = shouldUpdateMapEntities ? Hull.HullList.ToList() : null;
|
var hullList = Hull.HullList.ToList();
|
||||||
var structureList = shouldUpdateMapEntities ? Structure.WallList.ToList() : null;
|
var structureList = Structure.WallList.ToList();
|
||||||
var gapList = Gap.GapList.ToList();
|
var gapList = Gap.GapList.ToList();
|
||||||
var itemList = shouldUpdateMapEntities ? Item.ItemList.ToList() : null;
|
var itemList = Item.ItemList.ToList();
|
||||||
|
|
||||||
// First phase: parallel updates that have no order dependencies
|
// First phase: parallel updates that have no order dependencies
|
||||||
Parallel.Invoke(parallelOptions,
|
Parallel.Invoke(parallelOptions,
|
||||||
// Hull parallel update
|
// Hull parallel update
|
||||||
() =>
|
() =>
|
||||||
{
|
{
|
||||||
if (shouldUpdateMapEntities && hullList != null)
|
Parallel.ForEach(hullList, parallelOptions, hull =>
|
||||||
{
|
{
|
||||||
Parallel.ForEach(hullList, parallelOptions, hull =>
|
hull.Update(deltaTime, cam);
|
||||||
{
|
});
|
||||||
hull.Update(deltaTime * MapEntityUpdateInterval, cam);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
// Structure parallel update
|
// Structure parallel update
|
||||||
() =>
|
() =>
|
||||||
{
|
{
|
||||||
if (shouldUpdateMapEntities && structureList != null)
|
Parallel.ForEach(structureList, parallelOptions, structure =>
|
||||||
{
|
{
|
||||||
Parallel.ForEach(structureList, parallelOptions, structure =>
|
structure.Update(deltaTime, cam);
|
||||||
{
|
});
|
||||||
structure.Update(deltaTime * MapEntityUpdateInterval, cam);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
// Gap reset (must be done before update)
|
// Gap reset (must be done before update)
|
||||||
() =>
|
() =>
|
||||||
@@ -692,27 +682,21 @@ namespace Barotrauma
|
|||||||
// Powered components update
|
// Powered components update
|
||||||
() =>
|
() =>
|
||||||
{
|
{
|
||||||
if (shouldUpdatePower)
|
Powered.UpdatePower(deltaTime);
|
||||||
{
|
|
||||||
Powered.UpdatePower(deltaTime * PoweredUpdateInterval);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
// Hull Cheats need to be executed after Hull update
|
// Hull Cheats need to be executed after Hull update
|
||||||
if (shouldUpdateMapEntities)
|
Hull.UpdateCheats(deltaTime, cam);
|
||||||
{
|
|
||||||
Hull.UpdateCheats(deltaTime * MapEntityUpdateInterval, cam);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Gap update (has order dependencies, keep random order but execute sequentially)
|
// Gap update (has order dependencies, keep random order but execute sequentially)
|
||||||
var shuffledGaps = gapList.OrderBy(g => Rand.Int(int.MaxValue)).ToList();
|
var shuffledGaps = gapList.OrderBy(g => Rand.Int(int.MaxValue)).ToList();
|
||||||
foreach (Gap gap in shuffledGaps)
|
Parallel.ForEach(gapList, parallelOptions, gap =>
|
||||||
{
|
{
|
||||||
gap.Update(deltaTime, cam);
|
gap.Update(deltaTime, cam);
|
||||||
}
|
});
|
||||||
|
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
sw.Stop();
|
sw.Stop();
|
||||||
@@ -721,33 +705,30 @@ namespace Barotrauma
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Item update (Item.Update() is not thread-safe and must be executed on the main thread)
|
// Item update (Item.Update() is not thread-safe and must be executed on the main thread)
|
||||||
if (shouldUpdateMapEntities && itemList != null)
|
Item.UpdatePendingConditionUpdates(deltaTime);
|
||||||
|
|
||||||
|
float scaledDeltaTime = deltaTime * MapEntityUpdateInterval;
|
||||||
|
Item lastUpdatedItem = null;
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
Item.UpdatePendingConditionUpdates(deltaTime);
|
foreach (Item item in itemList)
|
||||||
|
|
||||||
float scaledDeltaTime = deltaTime * MapEntityUpdateInterval;
|
|
||||||
Item lastUpdatedItem = null;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
foreach (Item item in itemList)
|
lastUpdatedItem = item;
|
||||||
{
|
item.Update(scaledDeltaTime, cam);
|
||||||
lastUpdatedItem = item;
|
|
||||||
item.Update(scaledDeltaTime, cam);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException e)
|
|
||||||
{
|
|
||||||
GameAnalyticsManager.AddErrorEventOnce(
|
|
||||||
"MapEntity.UpdateAll:ItemUpdateInvalidOperation",
|
|
||||||
GameAnalyticsManager.ErrorSeverity.Critical,
|
|
||||||
$"Error while updating item {lastUpdatedItem?.Name ?? "null"}: {e.Message}");
|
|
||||||
throw new InvalidOperationException($"Error while updating item {lastUpdatedItem?.Name ?? "null"}", innerException: e);
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateAllProjSpecific(scaledDeltaTime);
|
|
||||||
Spawner?.Update();
|
|
||||||
}
|
}
|
||||||
|
catch (InvalidOperationException e)
|
||||||
|
{
|
||||||
|
GameAnalyticsManager.AddErrorEventOnce(
|
||||||
|
"MapEntity.UpdateAll:ItemUpdateInvalidOperation",
|
||||||
|
GameAnalyticsManager.ErrorSeverity.Critical,
|
||||||
|
$"Error while updating item {lastUpdatedItem?.Name ?? "null"}: {e.Message}");
|
||||||
|
throw new InvalidOperationException($"Error while updating item {lastUpdatedItem?.Name ?? "null"}", innerException: e);
|
||||||
|
}
|
||||||
|
|
||||||
|
UpdateAllProjSpecific(scaledDeltaTime);
|
||||||
|
Spawner?.Update();
|
||||||
|
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
sw.Stop();
|
sw.Stop();
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ using FarseerPhysics;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
#if DEBUG && CLIENT
|
#if DEBUG && CLIENT
|
||||||
@@ -24,7 +25,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private static readonly ParallelOptions parallelOptions = new ParallelOptions
|
private static readonly ParallelOptions parallelOptions = new ParallelOptions
|
||||||
{
|
{
|
||||||
MaxDegreeOfParallelism = 16
|
MaxDegreeOfParallelism = Environment.ProcessorCount * 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
@@ -151,31 +152,23 @@ namespace Barotrauma
|
|||||||
|
|
||||||
var physicsBodies = PhysicsBody.List.ToList();
|
var physicsBodies = PhysicsBody.List.ToList();
|
||||||
|
|
||||||
Parallel.Invoke(parallelOptions,
|
Parallel.ForEach(physicsBodies, parallelOptions, body =>
|
||||||
() =>
|
{
|
||||||
|
if ((body.Enabled || body.UserData is Character) &&
|
||||||
|
body.BodyType != BodyType.Static)
|
||||||
{
|
{
|
||||||
Parallel.ForEach(physicsBodies, parallelOptions, body =>
|
body.Update();
|
||||||
{
|
|
||||||
if ((body.Enabled || body.UserData is Character) &&
|
|
||||||
body.BodyType != BodyType.Static)
|
|
||||||
{
|
|
||||||
body.Update();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
() =>
|
|
||||||
{
|
|
||||||
GameMain.GameSession?.Update((float)deltaTime);
|
|
||||||
}
|
}
|
||||||
);
|
});
|
||||||
|
GameMain.GameSession?.Update((float)deltaTime);
|
||||||
|
|
||||||
foreach (PhysicsBody body in physicsBodies)
|
Parallel.ForEach(physicsBodies, parallelOptions, body =>
|
||||||
{
|
{
|
||||||
if (body.Enabled && body.BodyType != BodyType.Static)
|
if (body.Enabled && body.BodyType != BodyType.Static)
|
||||||
{
|
{
|
||||||
body.SetPrevTransform(body.SimPosition, body.Rotation);
|
body.SetPrevTransform(body.SimPosition, body.Rotation);
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
MapEntity.ClearHighlightedEntities();
|
MapEntity.ClearHighlightedEntities();
|
||||||
|
|
||||||
@@ -252,14 +245,14 @@ namespace Barotrauma
|
|||||||
Character.Controlled?.UpdateLocalCursor(cam);
|
Character.Controlled?.UpdateLocalCursor(cam);
|
||||||
|
|
||||||
#elif SERVER
|
#elif SERVER
|
||||||
if (Level.Loaded != null)
|
Parallel.Invoke(parallelOptions,
|
||||||
{
|
() => { if (Level.Loaded != null) Level.Loaded.Update((float)deltaTime, Camera.Instance); },
|
||||||
Level.Loaded.Update((float)deltaTime, Camera.Instance);
|
() => Character.UpdateAll((float)deltaTime, Camera.Instance)
|
||||||
}
|
);
|
||||||
Character.UpdateAll((float)deltaTime, Camera.Instance);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
var submarines = Submarine.Loaded.ToList();
|
var submarines = Submarine.Loaded.ToList();
|
||||||
|
|
||||||
Parallel.ForEach(submarines, parallelOptions, sub =>
|
Parallel.ForEach(submarines, parallelOptions, sub =>
|
||||||
{
|
{
|
||||||
sub.SetPrevTransform(sub.Position);
|
sub.SetPrevTransform(sub.Position);
|
||||||
@@ -277,8 +270,8 @@ namespace Barotrauma
|
|||||||
MapEntity.UpdateAll((float)deltaTime, cam, parallelOptions);
|
MapEntity.UpdateAll((float)deltaTime, cam, parallelOptions);
|
||||||
#elif SERVER
|
#elif SERVER
|
||||||
|
|
||||||
|
|
||||||
MapEntity.UpdateAll((float)deltaTime, Camera.Instance, parallelOptions);
|
MapEntity.UpdateAll((float)deltaTime, Camera.Instance, parallelOptions);
|
||||||
|
|
||||||
//StatusEffect.UpdateAll is not thread-safe and must be executed on the main thread
|
//StatusEffect.UpdateAll is not thread-safe and must be executed on the main thread
|
||||||
StatusEffect.UpdateAll((float)deltaTime);
|
StatusEffect.UpdateAll((float)deltaTime);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user