diff --git a/Content.Client/Body/UI/BodyScannerBoundUserInterface.cs b/Content.Client/Body/UI/BodyScannerBoundUserInterface.cs index 46615f7a3b..247ce80b95 100644 --- a/Content.Client/Body/UI/BodyScannerBoundUserInterface.cs +++ b/Content.Client/Body/UI/BodyScannerBoundUserInterface.cs @@ -36,9 +36,11 @@ namespace Content.Client.Body.UI return; } - if (!IoCManager.Resolve().EntityExists(scannerState.Uid)) + var entMan = IoCManager.Resolve(); + + if (!entMan.EntityExists(scannerState.Uid)) { - throw new ArgumentException($"Received an invalid entity with id {scannerState.Uid} for body scanner with id {Owner.Owner} at {IoCManager.Resolve().GetComponent(Owner.Owner).MapPosition}"); + throw new ArgumentException($"Received an invalid entity with id {scannerState.Uid} for body scanner with id {Owner.Owner} at {entMan.GetComponent(Owner.Owner).MapPosition}"); } _display?.UpdateDisplay(_entity); diff --git a/Content.Client/Body/UI/BodyScannerDisplay.cs b/Content.Client/Body/UI/BodyScannerDisplay.cs index e2212b4a6a..852527014e 100644 --- a/Content.Client/Body/UI/BodyScannerDisplay.cs +++ b/Content.Client/Body/UI/BodyScannerDisplay.cs @@ -146,10 +146,11 @@ namespace Content.Client.Body.UI private void UpdateBodyPartBox(SharedBodyPartComponent part, string slotName) { - BodyPartLabel.Text = $"{Loc.GetString(slotName)}: {Loc.GetString(IoCManager.Resolve().GetComponent(part.Owner).EntityName)}"; + var entMan = IoCManager.Resolve(); + BodyPartLabel.Text = $"{Loc.GetString(slotName)}: {Loc.GetString(entMan.GetComponent(part.Owner).EntityName)}"; // TODO BODY Part damage - if (IoCManager.Resolve().TryGetComponent(part.Owner, out DamageableComponent? damageable)) + if (entMan.TryGetComponent(part.Owner, out DamageableComponent? damageable)) { BodyPartHealth.Text = Loc.GetString("body-scanner-display-body-part-damage-text",("damage", damageable.TotalDamage)); } diff --git a/Content.Client/Cargo/CargoConsoleBoundUserInterface.cs b/Content.Client/Cargo/CargoConsoleBoundUserInterface.cs index f12eae5c52..117b54d4c6 100644 --- a/Content.Client/Cargo/CargoConsoleBoundUserInterface.cs +++ b/Content.Client/Cargo/CargoConsoleBoundUserInterface.cs @@ -50,8 +50,9 @@ namespace Content.Client.Cargo { base.Open(); - if (!IoCManager.Resolve().TryGetComponent(Owner.Owner, out GalacticMarketComponent? market) || - !IoCManager.Resolve().TryGetComponent(Owner.Owner, out CargoOrderDatabaseComponent? orders)) return; + var entMan = IoCManager.Resolve(); + if (!entMan.TryGetComponent(Owner.Owner, out GalacticMarketComponent? market) || + !entMan.TryGetComponent(Owner.Owner, out CargoOrderDatabaseComponent? orders)) return; Market = market; Orders = orders; diff --git a/Content.Client/CharacterInfo/Components/CharacterInfoComponent.cs b/Content.Client/CharacterInfo/Components/CharacterInfoComponent.cs index 1c4aa52b95..992e3f4daf 100644 --- a/Content.Client/CharacterInfo/Components/CharacterInfoComponent.cs +++ b/Content.Client/CharacterInfo/Components/CharacterInfoComponent.cs @@ -50,12 +50,13 @@ namespace Content.Client.CharacterInfo.Components { case CharacterInfoMessage characterInfoMessage: _control.UpdateUI(characterInfoMessage); - if (IoCManager.Resolve().TryGetComponent(Owner, out ISpriteComponent? spriteComponent)) + var entityManager = IoCManager.Resolve(); + if (entityManager.TryGetComponent(Owner, out ISpriteComponent? spriteComponent)) { _control.SpriteView.Sprite = spriteComponent; } - _control.NameLabel.Text = IoCManager.Resolve().GetComponent(Owner).EntityName; + _control.NameLabel.Text = entityManager.GetComponent(Owner).EntityName; break; } } diff --git a/Content.Client/Chat/Managers/ChatManager.cs b/Content.Client/Chat/Managers/ChatManager.cs index 3a87ae195c..60ea578aa1 100644 --- a/Content.Client/Chat/Managers/ChatManager.cs +++ b/Content.Client/Chat/Managers/ChatManager.cs @@ -477,7 +477,7 @@ namespace Content.Client.Chat.Managers private void EnqueueSpeechBubble(EntityUid entity, string contents, SpeechBubble.SpeechType speechType) { // Don't enqueue speech bubbles for other maps. TODO: Support multiple viewports/maps? - if (IoCManager.Resolve().GetComponent(entity).MapID != _eyeManager.CurrentMap) + if (_entityManager.GetComponent(entity).MapID != _eyeManager.CurrentMap) return; if (!_queuedSpeechBubbles.TryGetValue(entity, out var queueData)) @@ -496,7 +496,7 @@ namespace Content.Client.Chat.Managers private void CreateSpeechBubble(EntityUid entity, SpeechBubbleData speechData) { var bubble = - SpeechBubble.CreateSpeechBubble(speechData.Type, speechData.Message, entity, _eyeManager, this); + SpeechBubble.CreateSpeechBubble(speechData.Type, speechData.Message, entity, _eyeManager, this, _entityManager); if (_activeSpeechBubbles.TryGetValue(entity, out var existing)) { diff --git a/Content.Client/Chat/UI/SpeechBubble.cs b/Content.Client/Chat/UI/SpeechBubble.cs index db2ad57d4f..ead441ceef 100644 --- a/Content.Client/Chat/UI/SpeechBubble.cs +++ b/Content.Client/Chat/UI/SpeechBubble.cs @@ -38,6 +38,7 @@ namespace Content.Client.Chat.UI private readonly IEyeManager _eyeManager; private readonly EntityUid _senderEntity; private readonly IChatManager _chatManager; + private readonly IEntityManager _entityManager; private float _timeLeft = TotalTime; @@ -46,26 +47,27 @@ namespace Content.Client.Chat.UI public float ContentHeight { get; private set; } - public static SpeechBubble CreateSpeechBubble(SpeechType type, string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager) + public static SpeechBubble CreateSpeechBubble(SpeechType type, string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager, IEntityManager entityManager) { switch (type) { case SpeechType.Emote: - return new EmoteSpeechBubble(text, senderEntity, eyeManager, chatManager); + return new EmoteSpeechBubble(text, senderEntity, eyeManager, chatManager, entityManager); case SpeechType.Say: - return new SaySpeechBubble(text, senderEntity, eyeManager, chatManager); + return new SaySpeechBubble(text, senderEntity, eyeManager, chatManager, entityManager); default: throw new ArgumentOutOfRangeException(); } } - public SpeechBubble(string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager) + public SpeechBubble(string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager, IEntityManager entityManager) { _chatManager = chatManager; _senderEntity = senderEntity; _eyeManager = eyeManager; + _entityManager = entityManager; // Use text clipping so new messages don't overlap old ones being pushed up. RectClipContent = true; @@ -99,7 +101,7 @@ namespace Content.Client.Chat.UI _verticalOffsetAchieved = MathHelper.Lerp(_verticalOffsetAchieved, VerticalOffset, 10 * args.DeltaSeconds); } - if (!IoCManager.Resolve().GetComponent(_senderEntity).Coordinates.IsValid(IoCManager.Resolve())) + if (!_entityManager.GetComponent(_senderEntity).Coordinates.IsValid(_entityManager)) { Modulate = Color.White.WithAlpha(0); return; @@ -116,14 +118,14 @@ namespace Content.Client.Chat.UI Modulate = Color.White; } - if ((!IoCManager.Resolve().EntityExists(_senderEntity) ? EntityLifeStage.Deleted : IoCManager.Resolve().GetComponent(_senderEntity).EntityLifeStage) >= EntityLifeStage.Deleted || _timeLeft <= 0) + if ((!_entityManager.EntityExists(_senderEntity) ? EntityLifeStage.Deleted : _entityManager.GetComponent(_senderEntity).EntityLifeStage) >= EntityLifeStage.Deleted || _timeLeft <= 0) { // Timer spawn to prevent concurrent modification exception. Timer.Spawn(0, Die); return; } - var worldPos = IoCManager.Resolve().GetComponent(_senderEntity).WorldPosition; + var worldPos = _entityManager.GetComponent(_senderEntity).WorldPosition; var scale = _eyeManager.MainViewport.GetRenderScale(); var offset = new Vector2(0, EntityVerticalOffset * EyeManager.PixelsPerMeter * scale); var lowerCenter = (_eyeManager.WorldToScreen(worldPos) - offset) / UIScale; @@ -162,8 +164,8 @@ namespace Content.Client.Chat.UI public class EmoteSpeechBubble : SpeechBubble { - public EmoteSpeechBubble(string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager) - : base(text, senderEntity, eyeManager, chatManager) + public EmoteSpeechBubble(string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager, IEntityManager entityManager) + : base(text, senderEntity, eyeManager, chatManager, entityManager) { } @@ -188,8 +190,8 @@ namespace Content.Client.Chat.UI public class SaySpeechBubble : SpeechBubble { - public SaySpeechBubble(string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager) - : base(text, senderEntity, eyeManager, chatManager) + public SaySpeechBubble(string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager, IEntityManager entityManager) + : base(text, senderEntity, eyeManager, chatManager, entityManager) { } diff --git a/Content.Client/Clickable/ClickableComponent.cs b/Content.Client/Clickable/ClickableComponent.cs index d29bd8a77b..aebb464c3f 100644 --- a/Content.Client/Clickable/ClickableComponent.cs +++ b/Content.Client/Clickable/ClickableComponent.cs @@ -7,6 +7,7 @@ using Robust.Shared.IoC; using Robust.Shared.Maths; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; +using TerraFX.Interop.Windows; namespace Content.Client.Clickable { @@ -29,14 +30,15 @@ namespace Content.Client.Clickable /// True if the click worked, false otherwise. public bool CheckClick(Vector2 worldPos, out int drawDepth, out uint renderOrder) { - if (!IoCManager.Resolve().TryGetComponent(Owner, out ISpriteComponent? sprite) || !sprite.Visible) + var entMan = IoCManager.Resolve(); + if (!entMan.TryGetComponent(Owner, out ISpriteComponent? sprite) || !sprite.Visible) { drawDepth = default; renderOrder = default; return false; } - var transform = IoCManager.Resolve().GetComponent(Owner); + var transform = entMan.GetComponent(Owner); var localPos = transform.InvWorldMatrix.Transform(worldPos); var spriteMatrix = Matrix3.Invert(sprite.GetLocalMatrix()); diff --git a/Content.Client/Commands/DebugCommands.cs b/Content.Client/Commands/DebugCommands.cs index 0add88555d..799db2db84 100644 --- a/Content.Client/Commands/DebugCommands.cs +++ b/Content.Client/Commands/DebugCommands.cs @@ -50,12 +50,12 @@ namespace Content.Client.Commands EntitySystem.Get() .ShowAll = true; - var components = IoCManager.Resolve() - .EntityQuery(true); + var entMan = IoCManager.Resolve(); + var components = entMan.EntityQuery(true); foreach (var component in components) { - if (IoCManager.Resolve().TryGetComponent(component.Owner, out ISpriteComponent? sprite)) + if (entMan.TryGetComponent(component.Owner, out ISpriteComponent? sprite)) { sprite.DrawDepth = (int) DrawDepth.Overlays; } diff --git a/Content.Client/Commands/HideMechanismsCommand.cs b/Content.Client/Commands/HideMechanismsCommand.cs index ad08c3be5a..31236b0fbc 100644 --- a/Content.Client/Commands/HideMechanismsCommand.cs +++ b/Content.Client/Commands/HideMechanismsCommand.cs @@ -21,7 +21,7 @@ namespace Content.Client.Commands foreach (var mechanism in mechanisms) { - if (!IoCManager.Resolve().TryGetComponent(mechanism.Owner, out SpriteComponent? sprite)) + if (!entityManager.TryGetComponent(mechanism.Owner, out SpriteComponent? sprite)) { continue; } diff --git a/Content.Client/Commands/ShowMechanismsCommand.cs b/Content.Client/Commands/ShowMechanismsCommand.cs index 0adf5340b9..168bd61c6c 100644 --- a/Content.Client/Commands/ShowMechanismsCommand.cs +++ b/Content.Client/Commands/ShowMechanismsCommand.cs @@ -23,7 +23,7 @@ namespace Content.Client.Commands foreach (var mechanism in mechanisms) { - if (IoCManager.Resolve().TryGetComponent(mechanism.Owner, out SpriteComponent? sprite)) + if (entityManager.TryGetComponent(mechanism.Owner, out SpriteComponent? sprite)) { sprite.ContainerOccluded = false; } diff --git a/Content.Client/Construction/ConstructionSystem.cs b/Content.Client/Construction/ConstructionSystem.cs index 9822517c98..78eac7f829 100644 --- a/Content.Client/Construction/ConstructionSystem.cs +++ b/Content.Client/Construction/ConstructionSystem.cs @@ -144,7 +144,7 @@ namespace Content.Client.Construction if (!args.EntityUid.IsValid() || !args.EntityUid.IsClientSide()) return false; - if (!IoCManager.Resolve().TryGetComponent(args.EntityUid, out var ghostComp)) + if (!EntityManager.TryGetComponent(args.EntityUid, out var ghostComp)) return false; TryStartConstruction(ghostComp.GhostId); @@ -172,12 +172,12 @@ namespace Content.Client.Construction } var ghost = EntityManager.SpawnEntity("constructionghost", loc); - var comp = IoCManager.Resolve().GetComponent(ghost); + var comp = EntityManager.GetComponent(ghost); comp.Prototype = prototype; comp.GhostId = _nextId++; - IoCManager.Resolve().GetComponent(ghost).LocalRotation = dir.ToAngle(); + EntityManager.GetComponent(ghost).LocalRotation = dir.ToAngle(); _ghosts.Add(comp.GhostId, comp); - var sprite = IoCManager.Resolve().GetComponent(ghost); + var sprite = EntityManager.GetComponent(ghost); sprite.Color = new Color(48, 255, 48, 128); sprite.AddBlankLayer(0); // There is no way to actually check if this already exists, so we blindly insert a new one sprite.LayerSetSprite(0, prototype.Icon); @@ -192,7 +192,7 @@ namespace Content.Client.Construction { foreach (var ghost in _ghosts) { - if (IoCManager.Resolve().GetComponent(ghost.Value.Owner).Coordinates.Equals(loc)) return true; + if (EntityManager.GetComponent(ghost.Value.Owner).Coordinates.Equals(loc)) return true; } return false; @@ -207,7 +207,7 @@ namespace Content.Client.Construction throw new ArgumentException($"Can't start construction for a ghost with no prototype. Ghost id: {ghostId}"); } - var transform = IoCManager.Resolve().GetComponent(ghost.Owner); + var transform = EntityManager.GetComponent(ghost.Owner); var msg = new TryStartStructureConstructionMessage(transform.Coordinates, ghost.Prototype.ID, transform.LocalRotation, ghostId); RaiseNetworkEvent(msg); } @@ -227,7 +227,7 @@ namespace Content.Client.Construction { if (_ghosts.TryGetValue(ghostId, out var ghost)) { - IoCManager.Resolve().QueueDeleteEntity(ghost.Owner); + EntityManager.QueueDeleteEntity(ghost.Owner); _ghosts.Remove(ghostId); } } @@ -239,7 +239,7 @@ namespace Content.Client.Construction { foreach (var (_, ghost) in _ghosts) { - IoCManager.Resolve().QueueDeleteEntity(ghost.Owner); + EntityManager.QueueDeleteEntity(ghost.Owner); } _ghosts.Clear(); diff --git a/Content.Client/ContextMenu/UI/EntityMenuElement.cs b/Content.Client/ContextMenu/UI/EntityMenuElement.cs index 01005b9b20..824aeafbf4 100644 --- a/Content.Client/ContextMenu/UI/EntityMenuElement.cs +++ b/Content.Client/ContextMenu/UI/EntityMenuElement.cs @@ -10,6 +10,8 @@ namespace Content.Client.ContextMenu.UI { public const string StyleClassEntityMenuCountText = "contextMenuCount"; + [Dependency] private IEntityManager _entityManager = default!; + /// /// The entity that can be accessed by interacting with this element. /// @@ -28,6 +30,8 @@ namespace Content.Client.ContextMenu.UI public EntityMenuElement(EntityUid entity = default) { + IoCManager.InjectDependencies(this); + CountLabel = new Label { StyleClasses = { StyleClassEntityMenuCountText } }; Icon.AddChild(new LayoutContainer() { Children = { EntityIcon, CountLabel } }); @@ -57,7 +61,7 @@ namespace Content.Client.ContextMenu.UI /// public void UpdateEntity(EntityUid entity = default) { - if (Entity != default && IoCManager.Resolve().EntityExists(Entity) && !entity.Valid) + if (Entity != default && _entityManager.EntityExists(Entity) && !entity.Valid) entity = Entity; if (entity == default) @@ -66,12 +70,12 @@ namespace Content.Client.ContextMenu.UI return; } - EntityIcon.Sprite = IoCManager.Resolve().GetComponentOrNull(entity); + EntityIcon.Sprite = _entityManager.GetComponentOrNull(entity); if (UserInterfaceManager.DebugMonitors.Visible) - Text = $"{IoCManager.Resolve().GetComponent(entity!).EntityName} ({entity})"; + Text = $"{_entityManager.GetComponent(entity!).EntityName} ({entity})"; else - Text = IoCManager.Resolve().GetComponent(entity!).EntityName; + Text = _entityManager.GetComponent(entity!).EntityName; } } } diff --git a/Content.Client/ContextMenu/UI/EntityMenuPresenter.cs b/Content.Client/ContextMenu/UI/EntityMenuPresenter.cs index 1fc6bf1d90..5c32919c5c 100644 --- a/Content.Client/ContextMenu/UI/EntityMenuPresenter.cs +++ b/Content.Client/ContextMenu/UI/EntityMenuPresenter.cs @@ -85,7 +85,7 @@ namespace Content.Client.ContextMenu.UI var entitySpriteStates = GroupEntities(entities); var orderedStates = entitySpriteStates.ToList(); - orderedStates.Sort((x, y) => string.CompareOrdinal(IoCManager.Resolve().GetComponent(x.First()).EntityPrototype?.Name, IoCManager.Resolve().GetComponent(y.First()).EntityPrototype?.Name)); + orderedStates.Sort((x, y) => string.CompareOrdinal(_entityManager.GetComponent(x.First()).EntityPrototype?.Name, _entityManager.GetComponent(y.First()).EntityPrototype?.Name)); Elements.Clear(); AddToUI(orderedStates); @@ -139,7 +139,7 @@ namespace Content.Client.ContextMenu.UI var funcId = _inputManager.NetworkBindMap.KeyFunctionID(func); var message = new FullInputCmdMessage(_gameTiming.CurTick, _gameTiming.TickFraction, funcId, - BoundKeyState.Down, IoCManager.Resolve().GetComponent(entity).Coordinates, args.PointerLocation, entity); + BoundKeyState.Down, _entityManager.GetComponent(entity).Coordinates, args.PointerLocation, entity); var session = _playerManager.LocalPlayer?.Session; if (session != null) @@ -187,7 +187,7 @@ namespace Content.Client.ContextMenu.UI foreach (var entity in Elements.Keys.ToList()) { - if ((!IoCManager.Resolve().EntityExists(entity) ? EntityLifeStage.Deleted : IoCManager.Resolve().GetComponent(entity).EntityLifeStage) >= EntityLifeStage.Deleted || !ignoreFov && !_examineSystem.CanExamine(player, entity)) + if ((!_entityManager.EntityExists(entity) ? EntityLifeStage.Deleted : _entityManager.GetComponent(entity).EntityLifeStage) >= EntityLifeStage.Deleted || !ignoreFov && !_examineSystem.CanExamine(player, entity)) RemoveEntity(entity); } } @@ -253,7 +253,7 @@ namespace Content.Client.ContextMenu.UI // find the element associated with this entity if (!Elements.TryGetValue(entity, out var element)) { - Logger.Error($"Attempted to remove unknown entity from the entity menu: {IoCManager.Resolve().GetComponent(entity).EntityName} ({entity})"); + Logger.Error($"Attempted to remove unknown entity from the entity menu: {_entityManager.GetComponent(entity).EntityName} ({entity})"); return; } @@ -338,7 +338,7 @@ namespace Content.Client.ContextMenu.UI if (entityElement.Entity != default) { - if (!((!IoCManager.Resolve().EntityExists(entityElement.Entity) ? EntityLifeStage.Deleted : IoCManager.Resolve().GetComponent(entityElement.Entity).EntityLifeStage) >= EntityLifeStage.Deleted)) + if (!((!_entityManager.EntityExists(entityElement.Entity) ? EntityLifeStage.Deleted : _entityManager.GetComponent(entityElement.Entity).EntityLifeStage) >= EntityLifeStage.Deleted)) return entityElement.Entity; continue; } diff --git a/Content.Client/ContextMenu/UI/EntityMenuPresenterGrouping.cs b/Content.Client/ContextMenu/UI/EntityMenuPresenterGrouping.cs index 7c5884dce3..71e1b8fdfa 100644 --- a/Content.Client/ContextMenu/UI/EntityMenuPresenterGrouping.cs +++ b/Content.Client/ContextMenu/UI/EntityMenuPresenterGrouping.cs @@ -21,25 +21,25 @@ namespace Content.Client.ContextMenu.UI { if (GroupingContextMenuType == 0) { - var newEntities = entities.GroupBy(e => IoCManager.Resolve().GetComponent(e).EntityName + (IoCManager.Resolve().GetComponent(e).EntityPrototype?.ID ?? string.Empty)).ToList(); + var newEntities = entities.GroupBy(e => _entityManager.GetComponent(e).EntityName + (_entityManager.GetComponent(e).EntityPrototype?.ID ?? string.Empty)).ToList(); return newEntities.Select(grp => grp.ToList()).ToList(); } else { - var newEntities = entities.GroupBy(e => e, new PrototypeAndStatesContextMenuComparer(depth)).ToList(); + var newEntities = entities.GroupBy(e => e, new PrototypeAndStatesContextMenuComparer(depth, _entityManager)).ToList(); return newEntities.Select(grp => grp.ToList()).ToList(); } } private sealed class PrototypeAndStatesContextMenuComparer : IEqualityComparer { - private static readonly List> EqualsList = new() + private static readonly List> EqualsList = new() { - (a, b) => IoCManager.Resolve().GetComponent(a).EntityPrototype!.ID == IoCManager.Resolve().GetComponent(b).EntityPrototype!.ID, - (a, b) => + (a, b, entMan) => entMan.GetComponent(a).EntityPrototype!.ID == entMan.GetComponent(b).EntityPrototype!.ID, + (a, b, entMan) => { - IoCManager.Resolve().TryGetComponent(a, out var spriteA); - IoCManager.Resolve().TryGetComponent(b, out var spriteB); + entMan.TryGetComponent(a, out var spriteA); + entMan.TryGetComponent(b, out var spriteB); if (spriteA == null || spriteB == null) return spriteA == spriteB; @@ -50,13 +50,13 @@ namespace Content.Client.ContextMenu.UI return xStates.OrderBy(t => t).SequenceEqual(yStates.OrderBy(t => t)); }, }; - private static readonly List> GetHashCodeList = new() + private static readonly List> GetHashCodeList = new() { - e => EqualityComparer.Default.GetHashCode(IoCManager.Resolve().GetComponent(e).EntityPrototype!.ID), - e => + (e, entMan) => EqualityComparer.Default.GetHashCode(entMan.GetComponent(e).EntityPrototype!.ID), + (e, entMan) => { var hash = 0; - foreach (var element in IoCManager.Resolve().GetComponent(e).AllLayers.Where(obj => obj.Visible).Select(s => s.RsiState.Name)) + foreach (var element in entMan.GetComponent(e).AllLayers.Where(obj => obj.Visible).Select(s => s.RsiState.Name)) { hash ^= EqualityComparer.Default.GetHashCode(element!); } @@ -67,9 +67,13 @@ namespace Content.Client.ContextMenu.UI private static int Count => EqualsList.Count - 1; private readonly int _depth; - public PrototypeAndStatesContextMenuComparer(int step = 0) + private readonly IEntityManager _entMan; + public PrototypeAndStatesContextMenuComparer(int step = 0, IEntityManager? entMan = null) { + IoCManager.Resolve(ref entMan); + _depth = step > Count ? Count : step; + _entMan = entMan; } public bool Equals(EntityUid x, EntityUid y) @@ -79,12 +83,12 @@ namespace Content.Client.ContextMenu.UI return y == default; } - return y != default && EqualsList[_depth](x, y); + return y != default && EqualsList[_depth](x, y, _entMan); } public int GetHashCode(EntityUid e) { - return GetHashCodeList[_depth](e); + return GetHashCodeList[_depth](e, _entMan); } } } diff --git a/Content.Client/Damage/DamageVisualizer.cs b/Content.Client/Damage/DamageVisualizer.cs index 6a2ccbc029..d2ef691bab 100644 --- a/Content.Client/Damage/DamageVisualizer.cs +++ b/Content.Client/Damage/DamageVisualizer.cs @@ -37,8 +37,8 @@ namespace Content.Client.Damage /// public class DamageVisualizer : AppearanceVisualizer { - [Dependency] IPrototypeManager _prototypeManager = default!; - [Dependency] IEntityManager _entityManager = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; private const string _name = "DamageVisualizer"; /// @@ -195,12 +195,15 @@ namespace Content.Client.Damage public readonly string? Color; } + public DamageVisualizer() + { + IoCManager.InjectDependencies(this); + } + public override void InitializeEntity(EntityUid entity) { base.InitializeEntity(entity); - IoCManager.InjectDependencies(this); - var damageData = _entityManager.EnsureComponent(entity); VerifyVisualizerSetup(entity, damageData); if (damageData.Valid) @@ -291,9 +294,9 @@ namespace Content.Client.Damage private void InitializeVisualizer(EntityUid entity, DamageVisualizerDataComponent damageData) { - if (!IoCManager.Resolve().TryGetComponent(entity, out SpriteComponent? spriteComponent) - || !IoCManager.Resolve().TryGetComponent(entity, out var damageComponent) - || !IoCManager.Resolve().HasComponent(entity)) + if (!_entityManager.TryGetComponent(entity, out SpriteComponent? spriteComponent) + || !_entityManager.TryGetComponent(entity, out var damageComponent) + || !_entityManager.HasComponent(entity)) return; _thresholds.Add(FixedPoint2.Zero); @@ -504,7 +507,7 @@ namespace Content.Client.Damage public override void OnChangeData(AppearanceComponent component) { - var entities = IoCManager.Resolve(); + var entities = _entityManager; if (!entities.TryGetComponent(component.Owner, out DamageVisualizerDataComponent damageData)) return; @@ -526,7 +529,7 @@ namespace Content.Client.Damage private void HandleDamage(AppearanceComponent component, DamageVisualizerDataComponent damageData) { - var entities = IoCManager.Resolve(); + var entities = _entityManager; if (!entities.TryGetComponent(component.Owner, out SpriteComponent spriteComponent) || !entities.TryGetComponent(component.Owner, out DamageableComponent damageComponent)) return; diff --git a/Content.Client/Disposal/Systems/DisposalUnitSystem.cs b/Content.Client/Disposal/Systems/DisposalUnitSystem.cs index 7302c072b5..6c649888c1 100644 --- a/Content.Client/Disposal/Systems/DisposalUnitSystem.cs +++ b/Content.Client/Disposal/Systems/DisposalUnitSystem.cs @@ -40,7 +40,7 @@ namespace Content.Client.Disposal.Systems { if (component.Deleted) return true; - if (!IoCManager.Resolve().TryGetComponent(component.Owner, out ClientUserInterfaceComponent? userInterface)) return true; + if (!EntityManager.TryGetComponent(component.Owner, out ClientUserInterfaceComponent? userInterface)) return true; var state = component.UiState; if (state == null) return true; diff --git a/Content.Client/Disposal/Visualizers/DisposalUnitVisualizer.cs b/Content.Client/Disposal/Visualizers/DisposalUnitVisualizer.cs index 0e5ec4935b..1e3a60f5b5 100644 --- a/Content.Client/Disposal/Visualizers/DisposalUnitVisualizer.cs +++ b/Content.Client/Disposal/Visualizers/DisposalUnitVisualizer.cs @@ -90,7 +90,7 @@ namespace Content.Client.Disposal.Visualizers case VisualState.Flushing: sprite.LayerSetState(DisposalUnitVisualLayers.Base, _stateAnchored); - var animPlayer = IoCManager.Resolve().GetComponent(appearance.Owner); + var animPlayer = entities.GetComponent(appearance.Owner); if (!animPlayer.HasRunningAnimation(AnimationKey)) { diff --git a/Content.Client/DoAfter/UI/DoAfterGui.cs b/Content.Client/DoAfter/UI/DoAfterGui.cs index cab251d318..a7973adc61 100644 --- a/Content.Client/DoAfter/UI/DoAfterGui.cs +++ b/Content.Client/DoAfter/UI/DoAfterGui.cs @@ -160,8 +160,9 @@ namespace Content.Client.DoAfter.UI return; } - if (_eyeManager.CurrentMap != IoCManager.Resolve().GetComponent(AttachedEntity).MapID || - !IoCManager.Resolve().GetComponent(AttachedEntity).Coordinates.IsValid(_entityManager)) + var transform = _entityManager.GetComponent(AttachedEntity); + + if (_eyeManager.CurrentMap != transform.MapID || !transform.Coordinates.IsValid(_entityManager)) { Visible = false; return; @@ -211,7 +212,7 @@ namespace Content.Client.DoAfter.UI RemoveDoAfter(id); } - var screenCoordinates = _eyeManager.CoordinatesToScreen(IoCManager.Resolve().GetComponent(AttachedEntity).Coordinates); + var screenCoordinates = _eyeManager.CoordinatesToScreen(transform.Coordinates); _playerPosition = new ScreenCoordinates(screenCoordinates.Position / UIScale, screenCoordinates.Window); LayoutContainer.SetPosition(this, new Vector2(_playerPosition.X - Width / 2, _playerPosition.Y - Height - 30.0f)); } diff --git a/Content.Client/Doors/AirlockVisualizer.cs b/Content.Client/Doors/AirlockVisualizer.cs index d8fcdafb8e..235058f539 100644 --- a/Content.Client/Doors/AirlockVisualizer.cs +++ b/Content.Client/Doors/AirlockVisualizer.cs @@ -14,6 +14,8 @@ namespace Content.Client.Doors [UsedImplicitly] public class AirlockVisualizer : AppearanceVisualizer, ISerializationHooks { + [Dependency] private readonly IEntityManager _entMan = default!; + private const string AnimationKey = "airlock_animation"; [DataField("animationTime")] @@ -46,6 +48,11 @@ namespace Content.Client.Doors private Animation OpenAnimation = default!; private Animation DenyAnimation = default!; + public AirlockVisualizer() + { + IoCManager.InjectDependencies(this); + } + void ISerializationHooks.AfterDeserialization() { CloseAnimation = new Animation {Length = TimeSpan.FromSeconds(_delay)}; @@ -110,9 +117,9 @@ namespace Content.Client.Doors public override void InitializeEntity(EntityUid entity) { - if (!IoCManager.Resolve().HasComponent(entity)) + if (!_entMan.HasComponent(entity)) { - IoCManager.Resolve().AddComponent(entity); + _entMan.AddComponent(entity); } } @@ -120,8 +127,8 @@ namespace Content.Client.Doors { base.OnChangeData(component); - var sprite = IoCManager.Resolve().GetComponent(component.Owner); - var animPlayer = IoCManager.Resolve().GetComponent(component.Owner); + var sprite = _entMan.GetComponent(component.Owner); + var animPlayer = _entMan.GetComponent(component.Owner); if (!component.TryGetData(DoorVisuals.VisualState, out DoorVisualState state)) { state = DoorVisualState.Closed; diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index dfcc1904cf..4db2dea02c 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -57,6 +57,7 @@ namespace Content.Client.Entry [Dependency] private readonly IEscapeMenuOwner _escapeMenuOwner = default!; [Dependency] private readonly IGameController _gameController = default!; [Dependency] private readonly IStateManager _stateManager = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; public override void Init() { @@ -141,19 +142,21 @@ namespace Content.Client.Entry /// /// Add the character interface master which combines all character interfaces into one window /// - public static void AttachPlayerToEntity(EntityAttachedEventArgs eventArgs) + public void AttachPlayerToEntity(EntityAttachedEventArgs eventArgs) { - IoCManager.Resolve().AddComponent(eventArgs.NewEntity); + // TODO This is shitcode. Move this to an entity system, FOR FUCK'S SAKE + _entityManager.AddComponent(eventArgs.NewEntity); } /// /// Remove the character interface master from this entity now that we have detached ourselves from it /// - public static void DetachPlayerFromEntity(EntityDetachedEventArgs eventArgs) + public void DetachPlayerFromEntity(EntityDetachedEventArgs eventArgs) { - if (!((!IoCManager.Resolve().EntityExists(eventArgs.OldEntity) ? EntityLifeStage.Deleted : IoCManager.Resolve().GetComponent(eventArgs.OldEntity).EntityLifeStage) >= EntityLifeStage.Deleted)) + // TODO This is shitcode. Move this to an entity system, FOR FUCK'S SAKE + if (!_entityManager.Deleted(eventArgs.OldEntity)) { - IoCManager.Resolve().RemoveComponent(eventArgs.OldEntity); + _entityManager.RemoveComponent(eventArgs.OldEntity); } } diff --git a/Content.Client/Examine/ExamineSystem.cs b/Content.Client/Examine/ExamineSystem.cs index e4186f1a35..d3c3c90eaa 100644 --- a/Content.Client/Examine/ExamineSystem.cs +++ b/Content.Client/Examine/ExamineSystem.cs @@ -135,14 +135,14 @@ namespace Content.Client.Examine }; vBox.AddChild(hBox); - if (IoCManager.Resolve().TryGetComponent(entity, out ISpriteComponent? sprite)) + if (EntityManager.TryGetComponent(entity, out ISpriteComponent? sprite)) { hBox.AddChild(new SpriteView { Sprite = sprite, OverrideDirection = Direction.South }); } hBox.AddChild(new Label { - Text = IoCManager.Resolve().GetComponent(entity).EntityName, + Text = EntityManager.GetComponent(entity).EntityName, HorizontalExpand = true, }); diff --git a/Content.Client/Interactable/Components/InteractionOutlineComponent.cs b/Content.Client/Interactable/Components/InteractionOutlineComponent.cs index 2a0a1cb6dc..17a313e3db 100644 --- a/Content.Client/Interactable/Components/InteractionOutlineComponent.cs +++ b/Content.Client/Interactable/Components/InteractionOutlineComponent.cs @@ -10,6 +10,7 @@ namespace Content.Client.Interactable.Components public class InteractionOutlineComponent : Component { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IEntityManager _entMan = default!; private const float DefaultWidth = 1; private const string ShaderInRange = "SelectionOutlineInrange"; @@ -25,16 +26,16 @@ namespace Content.Client.Interactable.Components { _lastRenderScale = renderScale; _inRange = inInteractionRange; - if (IoCManager.Resolve().TryGetComponent(Owner, out ISpriteComponent? sprite)) + if (_entMan.TryGetComponent(Owner, out ISpriteComponent? sprite)) { sprite.PostShader = MakeNewShader(inInteractionRange, renderScale); - sprite.RenderOrder = IoCManager.Resolve().CurrentTick.Value; + sprite.RenderOrder = _entMan.CurrentTick.Value; } } public void OnMouseLeave() { - if (IoCManager.Resolve().TryGetComponent(Owner, out ISpriteComponent? sprite)) + if (_entMan.TryGetComponent(Owner, out ISpriteComponent? sprite)) { sprite.PostShader = null; sprite.RenderOrder = 0; @@ -46,7 +47,7 @@ namespace Content.Client.Interactable.Components public void UpdateInRange(bool inInteractionRange, int renderScale) { - if (IoCManager.Resolve().TryGetComponent(Owner, out ISpriteComponent? sprite) + if (_entMan.TryGetComponent(Owner, out ISpriteComponent? sprite) && (inInteractionRange != _inRange || _lastRenderScale != renderScale)) { _inRange = inInteractionRange; diff --git a/Content.Client/Inventory/ClientInventoryComponent.cs b/Content.Client/Inventory/ClientInventoryComponent.cs index 3c842348d4..0c9f0e619f 100644 --- a/Content.Client/Inventory/ClientInventoryComponent.cs +++ b/Content.Client/Inventory/ClientInventoryComponent.cs @@ -22,6 +22,8 @@ namespace Content.Client.Inventory [ComponentReference(typeof(SharedInventoryComponent))] public class ClientInventoryComponent : SharedInventoryComponent { + [Dependency] private readonly IEntityManager _entMan = default!; + private readonly Dictionary _slots = new(); public IReadOnlyDictionary AllSlots => _slots; @@ -92,7 +94,7 @@ namespace Content.Client.Inventory foreach (var (slot, entity) in state.Entities) { - if (!IoCManager.Resolve().EntityExists(entity)) + if (!_entMan.EntityExists(entity)) { continue; } @@ -136,7 +138,7 @@ namespace Content.Client.Inventory return; } - if (IoCManager.Resolve().TryGetComponent(entity, out ClothingComponent? clothing)) + if (_entMan.TryGetComponent(entity, out ClothingComponent? clothing)) { var flag = SlotMasks[slot]; var data = clothing.GetEquippedStateInfo(flag, SpeciesId); diff --git a/Content.Client/Kitchen/UI/GrinderMenu.xaml.cs b/Content.Client/Kitchen/UI/GrinderMenu.xaml.cs index 5f75581ecc..816af4797e 100644 --- a/Content.Client/Kitchen/UI/GrinderMenu.xaml.cs +++ b/Content.Client/Kitchen/UI/GrinderMenu.xaml.cs @@ -99,9 +99,10 @@ namespace Content.Client.Kitchen.UI { return; } - var texture = IoCManager.Resolve().GetComponent(entity).Icon?.Default; - var solidItem = ChamberContentBox.BoxContents.AddItem(IoCManager.Resolve().GetComponent(entity).EntityName, texture); + var texture = _entityManager.GetComponent(entity).Icon?.Default; + + var solidItem = ChamberContentBox.BoxContents.AddItem(_entityManager.GetComponent(entity).EntityName, texture); var solidIndex = ChamberContentBox.BoxContents.IndexOf(solidItem); _chamberVisualContents.Add(solidIndex, entity); } diff --git a/Content.Client/Kitchen/Visualizers/MicrowaveVisualizer.cs b/Content.Client/Kitchen/Visualizers/MicrowaveVisualizer.cs index 82bdd77963..b720794981 100644 --- a/Content.Client/Kitchen/Visualizers/MicrowaveVisualizer.cs +++ b/Content.Client/Kitchen/Visualizers/MicrowaveVisualizer.cs @@ -16,9 +16,10 @@ namespace Content.Client.Kitchen.Visualizers public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); - var sprite = IoCManager.Resolve().GetComponent(component.Owner); + var entMan = IoCManager.Resolve(); + var sprite = entMan.GetComponent(component.Owner); - var microwaveComponent = IoCManager.Resolve().GetComponentOrNull(component.Owner); + var microwaveComponent = entMan.GetComponentOrNull(component.Owner); if (!component.TryGetData(PowerDeviceVisuals.VisualState, out MicrowaveVisualState state)) { diff --git a/Content.Client/Lathe/UI/LatheBoundUserInterface.cs b/Content.Client/Lathe/UI/LatheBoundUserInterface.cs index 468d78796e..ad965c9cb4 100644 --- a/Content.Client/Lathe/UI/LatheBoundUserInterface.cs +++ b/Content.Client/Lathe/UI/LatheBoundUserInterface.cs @@ -13,6 +13,7 @@ namespace Content.Client.Lathe.UI { public class LatheBoundUserInterface : BoundUserInterface { + [Dependency] private readonly IEntityManager _entMan = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [ViewVariables] @@ -37,9 +38,9 @@ namespace Content.Client.Lathe.UI { base.Open(); - if (!IoCManager.Resolve().TryGetComponent(Owner.Owner, out MaterialStorageComponent? storage) - || !IoCManager.Resolve().TryGetComponent(Owner.Owner, out SharedLatheComponent? lathe) - || !IoCManager.Resolve().TryGetComponent(Owner.Owner, out SharedLatheDatabaseComponent? database)) return; + if (!_entMan.TryGetComponent(Owner.Owner, out MaterialStorageComponent? storage) + || !_entMan.TryGetComponent(Owner.Owner, out SharedLatheComponent? lathe) + || !_entMan.TryGetComponent(Owner.Owner, out SharedLatheDatabaseComponent? database)) return; Storage = storage; Lathe = lathe; diff --git a/Content.Client/Lathe/Visualizers/AutolatheVisualizer.cs b/Content.Client/Lathe/Visualizers/AutolatheVisualizer.cs index 44efd629d6..0f71faff27 100644 --- a/Content.Client/Lathe/Visualizers/AutolatheVisualizer.cs +++ b/Content.Client/Lathe/Visualizers/AutolatheVisualizer.cs @@ -12,6 +12,8 @@ namespace Content.Client.Lathe.Visualizers [UsedImplicitly] public class AutolatheVisualizer : AppearanceVisualizer { + [Dependency] private readonly IEntityManager _entMan = default!; + private const string AnimationKey = "inserting_animation"; private Animation _buildingAnimation; @@ -23,6 +25,7 @@ namespace Content.Client.Lathe.Visualizers public AutolatheVisualizer() { + IoCManager.InjectDependencies(this); _buildingAnimation = PopulateAnimation("building", "building_unlit", 0.5f); _insertingMetalAnimation = PopulateAnimation("inserting_metal", "inserting_unlit", 0.5f); _insertingGlassAnimation = PopulateAnimation("inserting_glass", "inserting_unlit", 0.5f); @@ -50,9 +53,9 @@ namespace Content.Client.Lathe.Visualizers public override void InitializeEntity(EntityUid entity) { - if (!IoCManager.Resolve().HasComponent(entity)) + if (!_entMan.HasComponent(entity)) { - IoCManager.Resolve().AddComponent(entity); + _entMan.AddComponent(entity); } } @@ -60,8 +63,8 @@ namespace Content.Client.Lathe.Visualizers { base.OnChangeData(component); - var sprite = IoCManager.Resolve().GetComponent(component.Owner); - var animPlayer = IoCManager.Resolve().GetComponent(component.Owner); + var sprite = _entMan.GetComponent(component.Owner); + var animPlayer = _entMan.GetComponent(component.Owner); if (!component.TryGetData(PowerDeviceVisuals.VisualState, out LatheVisualState state)) { state = LatheVisualState.Idle; diff --git a/Content.Client/Lathe/Visualizers/ProtolatheVisualizer.cs b/Content.Client/Lathe/Visualizers/ProtolatheVisualizer.cs index f886f76f01..99cc80ffc5 100644 --- a/Content.Client/Lathe/Visualizers/ProtolatheVisualizer.cs +++ b/Content.Client/Lathe/Visualizers/ProtolatheVisualizer.cs @@ -12,6 +12,8 @@ namespace Content.Client.Lathe.Visualizers [UsedImplicitly] public class ProtolatheVisualizer : AppearanceVisualizer { + [Dependency] private readonly IEntityManager _entMan = default!; + private const string AnimationKey = "inserting_animation"; private Animation _buildingAnimation; @@ -23,6 +25,8 @@ namespace Content.Client.Lathe.Visualizers public ProtolatheVisualizer() { + IoCManager.InjectDependencies(this); + _buildingAnimation = PopulateAnimation("building", "building_unlit", 0.8f); _insertingMetalAnimation = PopulateAnimation("inserting_metal", "inserting_unlit", 0.8f); _insertingGlassAnimation = PopulateAnimation("inserting_glass", "inserting_unlit", 0.8f); @@ -50,9 +54,9 @@ namespace Content.Client.Lathe.Visualizers public override void InitializeEntity(EntityUid entity) { - if (!IoCManager.Resolve().HasComponent(entity)) + if (!_entMan.HasComponent(entity)) { - IoCManager.Resolve().AddComponent(entity); + _entMan.AddComponent(entity); } } @@ -60,8 +64,8 @@ namespace Content.Client.Lathe.Visualizers { base.OnChangeData(component); - var sprite = IoCManager.Resolve().GetComponent(component.Owner); - var animPlayer = IoCManager.Resolve().GetComponent(component.Owner); + var sprite = _entMan.GetComponent(component.Owner); + var animPlayer = _entMan.GetComponent(component.Owner); if (!component.TryGetData(PowerDeviceVisuals.VisualState, out LatheVisualState state)) { state = LatheVisualState.Idle; diff --git a/Content.Client/Light/Components/LightBehaviourComponent.cs b/Content.Client/Light/Components/LightBehaviourComponent.cs index 550698f5ad..6b594fffa4 100644 --- a/Content.Client/Light/Components/LightBehaviourComponent.cs +++ b/Content.Client/Light/Components/LightBehaviourComponent.cs @@ -26,6 +26,7 @@ namespace Content.Client.Light.Components [ImplicitDataDefinitionForInheritors] public abstract class LightBehaviourAnimationTrack : AnimationTrackProperty { + protected IEntityManager _entMan = default!; protected IRobustRandom _random = default!; [DataField("id")] [ViewVariables] public string ID { get; set; } = string.Empty; @@ -53,12 +54,13 @@ namespace Content.Client.Light.Components private float _maxTime = default; private EntityUid _parent = default!; - public void Initialize(EntityUid parent, IRobustRandom random) + public void Initialize(EntityUid parent, IRobustRandom random, IEntityManager entMan) { _random = random; + _entMan = entMan; _parent = parent; - if (Enabled && IoCManager.Resolve().TryGetComponent(_parent, out PointLightComponent? light)) + if (Enabled && _entMan.TryGetComponent(_parent, out PointLightComponent? light)) { light.Enabled = true; } @@ -68,7 +70,7 @@ namespace Content.Client.Light.Components public void UpdatePlaybackValues(Animation owner) { - if (IoCManager.Resolve().TryGetComponent(_parent, out PointLightComponent? light)) + if (_entMan.TryGetComponent(_parent, out PointLightComponent? light)) { light.Enabled = true; } @@ -99,7 +101,7 @@ namespace Content.Client.Light.Components throw new InvalidOperationException("Property parameter is null! Check the prototype!"); } - if (IoCManager.Resolve().TryGetComponent(_parent, out PointLightComponent? light)) + if (_entMan.TryGetComponent(_parent, out PointLightComponent? light)) { AnimationHelper.SetAnimatableProperty(light, Property, value); } @@ -340,6 +342,9 @@ namespace Content.Client.Light.Components [RegisterComponent] public class LightBehaviourComponent : SharedLightBehaviourComponent, ISerializationHooks { + [Dependency] private readonly IEntityManager _entMan = default!; + [Dependency] private readonly IRobustRandom _random = default!; + private const string KeyPrefix = nameof(LightBehaviourComponent); public class AnimationContainer @@ -395,7 +400,7 @@ namespace Content.Client.Light.Components // TODO: Do NOT ensure component here. And use eventbus events instead... Owner.EnsureComponent(); - if (IoCManager.Resolve().TryGetComponent(Owner, out AnimationPlayerComponent? animation)) + if (_entMan.TryGetComponent(Owner, out AnimationPlayerComponent? animation)) { #pragma warning disable 618 animation.AnimationCompleted += OnAnimationCompleted; @@ -404,7 +409,7 @@ namespace Content.Client.Light.Components foreach (var container in _animations) { - container.LightBehaviour.Initialize(Owner, IoCManager.Resolve()); + container.LightBehaviour.Initialize(Owner, _random, _entMan); } // we need to initialize all behaviours before starting any @@ -430,7 +435,7 @@ namespace Content.Client.Light.Components { container.LightBehaviour.UpdatePlaybackValues(container.Animation); - if (IoCManager.Resolve().TryGetComponent(Owner, out AnimationPlayerComponent? animation)) + if (_entMan.TryGetComponent(Owner, out AnimationPlayerComponent? animation)) { animation.Play(container.Animation, container.FullKey); } @@ -442,7 +447,7 @@ namespace Content.Client.Light.Components /// private void CopyLightSettings() { - if (IoCManager.Resolve().TryGetComponent(Owner, out PointLightComponent? light)) + if (_entMan.TryGetComponent(Owner, out PointLightComponent? light)) { _originalColor = light.Color; _originalEnabled = light.Enabled; @@ -452,7 +457,7 @@ namespace Content.Client.Light.Components } else { - Logger.Warning($"{IoCManager.Resolve().GetComponent(Owner).EntityName} has a {nameof(LightBehaviourComponent)} but it has no {nameof(PointLightComponent)}! Check the prototype!"); + Logger.Warning($"{_entMan.GetComponent(Owner).EntityName} has a {nameof(LightBehaviourComponent)} but it has no {nameof(PointLightComponent)}! Check the prototype!"); } } @@ -463,7 +468,7 @@ namespace Content.Client.Light.Components /// public void StartLightBehaviour(string id = "") { - if (!IoCManager.Resolve().TryGetComponent(Owner, out AnimationPlayerComponent? animation)) + if (!_entMan.TryGetComponent(Owner, out AnimationPlayerComponent? animation)) { return; } @@ -491,7 +496,7 @@ namespace Content.Client.Light.Components /// Should the light have its original settings applied? public void StopLightBehaviour(string id = "", bool removeBehaviour = false, bool resetToOriginalSettings = false) { - if (!IoCManager.Resolve().TryGetComponent(Owner, out AnimationPlayerComponent? animation)) + if (!_entMan.TryGetComponent(Owner, out AnimationPlayerComponent? animation)) { return; } @@ -519,7 +524,7 @@ namespace Content.Client.Light.Components _animations.Remove(container); } - if (resetToOriginalSettings && IoCManager.Resolve().TryGetComponent(Owner, out PointLightComponent? light)) + if (resetToOriginalSettings && _entMan.TryGetComponent(Owner, out PointLightComponent? light)) { light.Color = _originalColor; light.Enabled = _originalEnabled; @@ -546,7 +551,7 @@ namespace Content.Client.Light.Components AnimationTracks = {behaviour} }; - behaviour.Initialize(Owner, IoCManager.Resolve()); + behaviour.Initialize(Owner, _random, _entMan); var container = new AnimationContainer(key, animation, behaviour); _animations.Add(container); diff --git a/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.cs b/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.cs index 326ccf7f95..2a7b5d5b37 100644 --- a/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.cs +++ b/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.cs @@ -22,6 +22,7 @@ namespace Content.Client.Lobby.UI { public class LobbyCharacterPreviewPanel : Control { + private readonly IEntityManager _entMan; private readonly IClientPreferencesManager _preferencesManager; private EntityUid _previewDummy; private readonly Label _summaryLabel; @@ -31,6 +32,7 @@ namespace Content.Client.Lobby.UI public LobbyCharacterPreviewPanel(IEntityManager entityManager, IClientPreferencesManager preferencesManager) { + _entMan = entityManager; _preferencesManager = preferencesManager; _previewDummy = entityManager.SpawnEntity("MobHumanDummy", MapCoordinates.Nullspace); @@ -98,15 +100,15 @@ namespace Content.Client.Lobby.UI _preferencesManager.OnServerDataLoaded -= UpdateUI; if (!disposing) return; - IoCManager.Resolve().DeleteEntity(_previewDummy); + _entMan.DeleteEntity(_previewDummy); _previewDummy = default; } - private static SpriteView MakeSpriteView(EntityUid entity, Direction direction) + private SpriteView MakeSpriteView(EntityUid entity, Direction direction) { return new() { - Sprite = IoCManager.Resolve().GetComponent(entity), + Sprite = _entMan.GetComponent(entity), OverrideDirection = direction, Scale = (2, 2) }; @@ -136,11 +138,11 @@ namespace Content.Client.Lobby.UI } } - public static void GiveDummyJobClothes(EntityUid dummy, HumanoidCharacterProfile profile) + public void GiveDummyJobClothes(EntityUid dummy, HumanoidCharacterProfile profile) { var protoMan = IoCManager.Resolve(); - var inventory = IoCManager.Resolve().GetComponent(dummy); + var inventory = _entMan.GetComponent(dummy); var highPriorityJob = profile.JobPriorities.FirstOrDefault(p => p.Value == JobPriority.High).Key; @@ -151,7 +153,7 @@ namespace Content.Client.Lobby.UI if (job.StartingGear != null) { - var entityMan = IoCManager.Resolve(); + var entityMan = _entMan; var gear = protoMan.Index(job.StartingGear); foreach (var slot in AllSlots) @@ -161,7 +163,7 @@ namespace Content.Client.Lobby.UI { var item = entityMan.SpawnEntity(itemType, MapCoordinates.Nullspace); inventory.SetSlotVisuals(slot, item); - IoCManager.Resolve().DeleteEntity(item); + _entMan.DeleteEntity(item); } } }