using Robust.Shared.Console; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Log; using Robust.Shared.Map.Components; using Robust.Shared.Maths; using Robust.Shared.Physics.Components; using Robust.Shared.Timing; using Robust.Shared.Utility; namespace Robust.Shared.Map; /// [Virtual] internal partial class MapManager : IMapManagerInternal, IEntityEventSubscriber { [field: Dependency] public IGameTiming GameTiming { get; } = default!; [field: Dependency] public IEntityManager EntityManager { get; } = default!; [Dependency] private readonly IConsoleHost _conhost = default!; private ISawmill _sawmill = default!; private SharedMapSystem _mapSystem = default!; private SharedTransformSystem _transformSystem = default!; private EntityQuery _physicsQuery; private EntityQuery _xformQuery; /// public void Initialize() { _physicsQuery = EntityManager.GetEntityQuery(); _xformQuery = EntityManager.GetEntityQuery(); _sawmill = Logger.GetSawmill("map"); #if DEBUG DebugTools.Assert(!_dbgGuardInit); DebugTools.Assert(!_dbgGuardRunning); _dbgGuardInit = true; #endif InitializeMapPausing(); } /// public void Startup() { _transformSystem = EntityManager.System(); _mapSystem = EntityManager.System(); #if DEBUG DebugTools.Assert(_dbgGuardInit); _dbgGuardRunning = true; #endif _sawmill.Debug("Starting..."); } /// public void Shutdown() { #if DEBUG DebugTools.Assert(_dbgGuardInit); #endif _sawmill.Debug("Stopping..."); // TODO: AllEntityQuery instead??? var query = EntityManager.EntityQueryEnumerator(); while (query.MoveNext(out var uid, out _)) { EntityManager.DeleteEntity(uid); } } /// public void Restart() { _sawmill.Debug("Restarting..."); // Don't just call Shutdown / Startup because we don't want to touch the subscriptions on gridtrees // Restart can be called any time during a game, whereas shutdown / startup are typically called upon connection. var query = EntityManager.EntityQueryEnumerator(); while (query.MoveNext(out var uid, out _)) { EntityManager.DeleteEntity(uid); } } #if DEBUG private bool _dbgGuardInit; private bool _dbgGuardRunning; #endif }