Files
RobustToolbox/Robust.Server/GameObjects/EntitySystems/PhysicsSystem.cs
T
metalgearslothandGitHub 80a9a82278 Fix client-side physics bodies getting stuck awake (#1946)
* Fix client-side physics bodies getting stuck awake

Wasn't a huge perf hit but it could leak a bit. Also there's a bunch of E/C stuff in here and I'll deal with it later.

* Fix broadphase leak

* Fix robust server sim
2021-08-23 15:01:08 +10:00

53 lines
1.6 KiB
C#

using JetBrains.Annotations;
using Robust.Server.Physics;
using Robust.Shared;
using Robust.Shared.Configuration;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Map;
using Robust.Shared.Physics;
namespace Robust.Server.GameObjects
{
[UsedImplicitly]
public class PhysicsSystem : SharedPhysicsSystem
{
[Dependency] private readonly IConfigurationManager _configurationManager = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<GridInitializeEvent>(HandleGridInit);
LoadMetricCVar();
_configurationManager.OnValueChanged(CVars.MetricsEnabled, _ => LoadMetricCVar());
}
private void LoadMetricCVar()
{
MetricsEnabled = _configurationManager.GetCVar(CVars.MetricsEnabled);
}
private void HandleGridInit(GridInitializeEvent ev)
{
var guid = ev.EntityUid;
if (!EntityManager.TryGetEntity(guid, out var gridEntity)) return;
var collideComp = gridEntity.EnsureComponent<PhysicsComponent>();
collideComp.CanCollide = true;
collideComp.BodyType = BodyType.Static;
}
protected override void HandleMapCreated(object? sender, MapEventArgs eventArgs)
{
if (eventArgs.Map == MapId.Nullspace) return;
MapManager.GetMapEntity(eventArgs.Map).AddComponent<PhysicsMapComponent>();
}
/// <inheritdoc />
public override void Update(float frameTime)
{
SimulateWorld(frameTime, false);
}
}
}