From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Mon, 11 Sep 2023 09:18:06 +0000 (+1000) Subject: Remove lights compref (#19531) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=99b77bc2d3ef31140adc7e09b5d4cff822aa9ae9;p=space-station-14.git Remove lights compref (#19531) --- diff --git a/Content.Client/Arcade/BlockGameMenu.cs b/Content.Client/Arcade/BlockGameMenu.cs index abb587ce7f..eeda2a3102 100644 --- a/Content.Client/Arcade/BlockGameMenu.cs +++ b/Content.Client/Arcade/BlockGameMenu.cs @@ -12,6 +12,7 @@ using Robust.Client.ResourceManagement; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.Graphics; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; diff --git a/Content.Client/Atmos/EntitySystems/FireVisualizerSystem.cs b/Content.Client/Atmos/EntitySystems/FireVisualizerSystem.cs index 7799a6deab..08522d1a42 100644 --- a/Content.Client/Atmos/EntitySystems/FireVisualizerSystem.cs +++ b/Content.Client/Atmos/EntitySystems/FireVisualizerSystem.cs @@ -10,6 +10,8 @@ namespace Content.Client.Atmos.EntitySystems; /// public sealed class FireVisualizerSystem : VisualizerSystem { + [Dependency] private readonly PointLightSystem _lights = default!; + public override void Initialize() { base.Initialize(); @@ -83,11 +85,11 @@ public sealed class FireVisualizerSystem : VisualizerSystem(component.LightEntity.Value); - light.Color = component.LightColor; + _lights.SetColor(component.LightEntity.Value, component.LightColor, light); // light needs a minimum radius to be visible at all, hence the + 1.5f - light.Radius = Math.Clamp(1.5f + component.LightRadiusPerStack * fireStacks, 0f, component.MaxLightRadius); - light.Energy = Math.Clamp(1 + component.LightEnergyPerStack * fireStacks, 0f, component.MaxLightEnergy); + _lights.SetRadius(component.LightEntity.Value, Math.Clamp(1.5f + component.LightRadiusPerStack * fireStacks, 0f, component.MaxLightRadius), light); + _lights.SetEnergy(component.LightEntity.Value, Math.Clamp(1 + component.LightEnergyPerStack * fireStacks, 0f, component.MaxLightEnergy), light); // TODO flickering animation? Or just add a noise mask to the light? But that requires an engine PR. } diff --git a/Content.Client/Atmos/Overlays/GasTileOverlay.cs b/Content.Client/Atmos/Overlays/GasTileOverlay.cs index d3e6dbc8de..ef65d43fe8 100644 --- a/Content.Client/Atmos/Overlays/GasTileOverlay.cs +++ b/Content.Client/Atmos/Overlays/GasTileOverlay.cs @@ -8,6 +8,8 @@ using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; using Robust.Shared.Enums; +using Robust.Shared.Graphics; +using Robust.Shared.Graphics.RSI; using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Prototypes; @@ -79,7 +81,7 @@ namespace Content.Client.Atmos.Overlays if (!rsi.TryGetState(stateId, out var state)) continue; - _frames[i] = state.GetFrames(RSI.State.Direction.South); + _frames[i] = state.GetFrames(RsiDirection.South); _frameDelays[i] = state.GetDelays(); _frameCounter[i] = 0; break; @@ -97,7 +99,7 @@ namespace Content.Client.Atmos.Overlays if (!fire.TryGetState((i + 1).ToString(), out var state)) throw new ArgumentOutOfRangeException($"Fire RSI doesn't have state \"{i}\"!"); - _fireFrames[i] = state.GetFrames(RSI.State.Direction.South); + _fireFrames[i] = state.GetFrames(RsiDirection.South); _fireFrameDelays[i] = state.GetDelays(); _fireFrameCounter[i] = 0; } diff --git a/Content.Client/Atmos/UI/GasAnalyzerWindow.xaml.cs b/Content.Client/Atmos/UI/GasAnalyzerWindow.xaml.cs index 48c3b6f978..ccf9e370e3 100644 --- a/Content.Client/Atmos/UI/GasAnalyzerWindow.xaml.cs +++ b/Content.Client/Atmos/UI/GasAnalyzerWindow.xaml.cs @@ -9,6 +9,7 @@ using Robust.Client.UserInterface.CustomControls; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.XAML; using static Content.Shared.Atmos.Components.GasAnalyzerComponent; +using Direction = Robust.Shared.Maths.Direction; namespace Content.Client.Atmos.UI { diff --git a/Content.Client/Clickable/ClickMapManager.cs b/Content.Client/Clickable/ClickMapManager.cs index 6f34f4453c..6a77c7e054 100644 --- a/Content.Client/Clickable/ClickMapManager.cs +++ b/Content.Client/Clickable/ClickMapManager.cs @@ -2,6 +2,8 @@ using System.Text; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; using Robust.Client.Utility; +using Robust.Shared.Graphics; +using Robust.Shared.Graphics.RSI; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; @@ -71,7 +73,7 @@ namespace Content.Client.Clickable return SampleClickMap(clickMap, pos, clickMap.Size, Vector2i.Zero); } - public bool IsOccluding(RSI rsi, RSI.StateId state, RSI.State.Direction dir, int frame, Vector2i pos) + public bool IsOccluding(RSI rsi, RSI.StateId state, RsiDirection dir, int frame, Vector2i pos) { if (!_rsiMaps.TryGetValue(rsi, out var rsiData)) { @@ -210,6 +212,6 @@ namespace Content.Client.Clickable { public bool IsOccluding(Texture texture, Vector2i pos); - public bool IsOccluding(RSI rsi, RSI.StateId state, RSI.State.Direction dir, int frame, Vector2i pos); + public bool IsOccluding(RSI rsi, RSI.StateId state, RsiDirection dir, int frame, Vector2i pos); } } diff --git a/Content.Client/Clickable/ClickableComponent.cs b/Content.Client/Clickable/ClickableComponent.cs index f436715d5e..cfbd1a99d6 100644 --- a/Content.Client/Clickable/ClickableComponent.cs +++ b/Content.Client/Clickable/ClickableComponent.cs @@ -4,6 +4,7 @@ using Robust.Client.Graphics; using Robust.Client.Utility; using Robust.Shared.Graphics; using static Robust.Client.GameObjects.SpriteComponent; +using Direction = Robust.Shared.Maths.Direction; namespace Content.Client.Clickable { @@ -74,7 +75,7 @@ namespace Content.Client.Clickable if (layer.ActualRsi is not { } rsi || !rsi.TryGetState(layer.State, out var rsiState)) continue; - var dir = Layer.GetDirection(rsiState.Directions, relativeRotation); + var dir = Layer.GetDirection(rsiState.RsiDirections, relativeRotation); // convert to layer-local coordinates layer.GetLayerDrawMatrix(dir, out var matrix); @@ -87,7 +88,7 @@ namespace Content.Client.Clickable // Next, to get the right click map we need the "direction" of this layer that is actually being used to draw the sprite on the screen. // This **can** differ from the dir defined before, but can also just be the same. if (sprite.EnableDirectionOverride) - dir = sprite.DirectionOverride.Convert(rsiState.Directions); + dir = sprite.DirectionOverride.Convert(rsiState.RsiDirections); dir = dir.OffsetRsiDir(layer.DirOffset); if (_clickMapManager.IsOccluding(layer.ActualRsi!, layer.State, dir, layer.AnimationFrame, layerImagePos)) diff --git a/Content.Client/CombatMode/CombatModeIndicatorsOverlay.cs b/Content.Client/CombatMode/CombatModeIndicatorsOverlay.cs index e3a61fe3be..9732a67753 100644 --- a/Content.Client/CombatMode/CombatModeIndicatorsOverlay.cs +++ b/Content.Client/CombatMode/CombatModeIndicatorsOverlay.cs @@ -6,6 +6,7 @@ using Robust.Client.Graphics; using Robust.Client.Input; using Robust.Client.UserInterface; using Robust.Shared.Enums; +using Robust.Shared.Graphics; using Robust.Shared.Utility; namespace Content.Client.CombatMode; diff --git a/Content.Client/Construction/UI/ConstructionMenu.xaml.cs b/Content.Client/Construction/UI/ConstructionMenu.xaml.cs index 2187a5266e..8fce1dbbda 100644 --- a/Content.Client/Construction/UI/ConstructionMenu.xaml.cs +++ b/Content.Client/Construction/UI/ConstructionMenu.xaml.cs @@ -5,6 +5,7 @@ using Robust.Client.Graphics; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Graphics; using Robust.Shared.IoC; using Robust.Shared.Localization; diff --git a/Content.Client/Construction/UI/ConstructionMenuPresenter.cs b/Content.Client/Construction/UI/ConstructionMenuPresenter.cs index 657892e216..cdc9044a40 100644 --- a/Content.Client/Construction/UI/ConstructionMenuPresenter.cs +++ b/Content.Client/Construction/UI/ConstructionMenuPresenter.cs @@ -8,6 +8,7 @@ using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.Utility; using Robust.Shared.Enums; +using Robust.Shared.Graphics; using Robust.Shared.Prototypes; using static Robust.Client.UserInterface.Controls.BaseButton; diff --git a/Content.Client/Crayon/UI/CrayonWindow.xaml.cs b/Content.Client/Crayon/UI/CrayonWindow.xaml.cs index 4e21016196..2a5801ccf2 100644 --- a/Content.Client/Crayon/UI/CrayonWindow.xaml.cs +++ b/Content.Client/Crayon/UI/CrayonWindow.xaml.cs @@ -8,6 +8,7 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; using Robust.Client.Utility; +using Robust.Shared.Graphics; using Robust.Shared.Maths; using Robust.Shared.Utility; using static Robust.Client.UserInterface.Controls.BaseButton; diff --git a/Content.Client/Decals/UI/DecalPlacerWindow.xaml.cs b/Content.Client/Decals/UI/DecalPlacerWindow.xaml.cs index 00bfd7ec65..199b4f5c1f 100644 --- a/Content.Client/Decals/UI/DecalPlacerWindow.xaml.cs +++ b/Content.Client/Decals/UI/DecalPlacerWindow.xaml.cs @@ -7,6 +7,7 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; using Robust.Client.Utility; +using Robust.Shared.Graphics; using static Robust.Client.UserInterface.Controls.BaseButton; namespace Content.Client.Decals.UI; diff --git a/Content.Client/DoAfter/DoAfterOverlay.cs b/Content.Client/DoAfter/DoAfterOverlay.cs index bc3902cc53..1fc00a81b9 100644 --- a/Content.Client/DoAfter/DoAfterOverlay.cs +++ b/Content.Client/DoAfter/DoAfterOverlay.cs @@ -3,6 +3,7 @@ using Content.Shared.DoAfter; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Shared.Enums; +using Robust.Shared.Graphics; using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Robust.Shared.Utility; diff --git a/Content.Client/Dragon/DragonSystem.cs b/Content.Client/Dragon/DragonSystem.cs index d11fac8de7..e164798c1e 100644 --- a/Content.Client/Dragon/DragonSystem.cs +++ b/Content.Client/Dragon/DragonSystem.cs @@ -6,6 +6,8 @@ namespace Content.Client.Dragon; public sealed class DragonSystem : EntitySystem { + [Dependency] private readonly SharedPointLightSystem _lights = default!; + public override void Initialize() { base.Initialize(); @@ -32,19 +34,25 @@ public sealed class DragonSystem : EntitySystem sprite?.LayerSetColor(0, Color.FromHex("#569fff")); if (light != null) - light.Color = Color.FromHex("#366db5"); + { + _lights.SetColor(uid, Color.FromHex("#366db5"), light); + } break; case DragonRiftState.AlmostFinished: sprite?.LayerSetColor(0, Color.FromHex("#cf4cff")); if (light != null) - light.Color = Color.FromHex("#9e2fc1"); + { + _lights.SetColor(uid, Color.FromHex("#9e2fc1"), light); + } break; case DragonRiftState.Finished: sprite?.LayerSetColor(0, Color.FromHex("#edbc36")); if (light != null) - light.Color = Color.FromHex("#cbaf20"); + { + _lights.SetColor(uid, Color.FromHex("#cbaf20"), light); + } break; } } diff --git a/Content.Client/Examine/ExamineSystem.cs b/Content.Client/Examine/ExamineSystem.cs index 914ec21527..59460cec56 100644 --- a/Content.Client/Examine/ExamineSystem.cs +++ b/Content.Client/Examine/ExamineSystem.cs @@ -22,6 +22,7 @@ using static Content.Shared.Interaction.SharedInteractionSystem; using static Robust.Client.UserInterface.Controls.BoxContainer; using Content.Shared.Interaction.Events; using Content.Shared.Item; +using Direction = Robust.Shared.Maths.Direction; namespace Content.Client.Examine { diff --git a/Content.Client/Explosion/ExplosionOverlaySystem.cs b/Content.Client/Explosion/ExplosionOverlaySystem.cs index 289d217202..60208ea1a0 100644 --- a/Content.Client/Explosion/ExplosionOverlaySystem.cs +++ b/Content.Client/Explosion/ExplosionOverlaySystem.cs @@ -1,8 +1,8 @@ using Content.Shared.Explosion; -using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; using Robust.Shared.GameStates; +using Robust.Shared.Graphics.RSI; using Robust.Shared.Prototypes; using Robust.Shared.Utility; @@ -17,6 +17,7 @@ public sealed class ExplosionOverlaySystem : EntitySystem [Dependency] private readonly IPrototypeManager _protoMan = default!; [Dependency] private readonly IResourceCache _resCache = default!; [Dependency] private readonly IOverlayManager _overlayMan = default!; + [Dependency] private readonly SharedPointLightSystem _lights = default!; /// /// For how many seconds should an explosion stay on-screen once it has finished expanding? @@ -71,9 +72,11 @@ public sealed class ExplosionOverlaySystem : EntitySystem // spawn in a client-side light source at the epicenter var lightEntity = Spawn("ExplosionLight", component.Epicenter); - var light = EnsureComp(lightEntity); - light.Energy = light.Radius = component.Intensity.Count; - light.Color = type.LightColor; + var light = _lights.EnsureLight(lightEntity); + + _lights.SetRadius(lightEntity, component.Intensity.Count, light); + _lights.SetEnergy(lightEntity, component.Intensity.Count, light); + _lights.SetColor(lightEntity, type.LightColor, light); textures.LightEntity = lightEntity; textures.FireColor = type.FireColor; @@ -82,7 +85,7 @@ public sealed class ExplosionOverlaySystem : EntitySystem var fireRsi = _resCache.GetResource(type.TexturePath).RSI; foreach (var state in fireRsi) { - textures.FireFrames.Add(state.GetFrames(RSI.State.Direction.South)); + textures.FireFrames.Add(state.GetFrames(RsiDirection.South)); if (textures.FireFrames.Count == type.FireStates) break; } diff --git a/Content.Client/Explosion/ExplosionVisualsTexturesComponent.cs b/Content.Client/Explosion/ExplosionVisualsTexturesComponent.cs index bbc7e66ef2..b8641e6cee 100644 --- a/Content.Client/Explosion/ExplosionVisualsTexturesComponent.cs +++ b/Content.Client/Explosion/ExplosionVisualsTexturesComponent.cs @@ -1,4 +1,5 @@ using Robust.Client.Graphics; +using Robust.Shared.Graphics; namespace Content.Client.Explosion; diff --git a/Content.Client/Flash/FlashOverlay.cs b/Content.Client/Flash/FlashOverlay.cs index f12ab3f5c9..433ee95e1c 100644 --- a/Content.Client/Flash/FlashOverlay.cs +++ b/Content.Client/Flash/FlashOverlay.cs @@ -4,6 +4,7 @@ using Robust.Client.Graphics; using Robust.Client.State; using Robust.Client.Player; using Robust.Shared.Enums; +using Robust.Shared.Graphics; using Robust.Shared.IoC; using Robust.Shared.Maths; using Robust.Shared.Prototypes; diff --git a/Content.Client/Hands/ShowHandItemOverlay.cs b/Content.Client/Hands/ShowHandItemOverlay.cs index aa9ccbf4be..3cb0cd58ff 100644 --- a/Content.Client/Hands/ShowHandItemOverlay.cs +++ b/Content.Client/Hands/ShowHandItemOverlay.cs @@ -7,7 +7,9 @@ using Robust.Client.Input; using Robust.Client.UserInterface; using Robust.Shared.Configuration; using Robust.Shared.Enums; +using Robust.Shared.Graphics; using Robust.Shared.Map; +using Direction = Robust.Shared.Maths.Direction; namespace Content.Client.Hands { diff --git a/Content.Client/Kitchen/UI/MicrowaveBoundUserInterface.cs b/Content.Client/Kitchen/UI/MicrowaveBoundUserInterface.cs index deadff91fc..518fbe095e 100644 --- a/Content.Client/Kitchen/UI/MicrowaveBoundUserInterface.cs +++ b/Content.Client/Kitchen/UI/MicrowaveBoundUserInterface.cs @@ -5,6 +5,7 @@ using JetBrains.Annotations; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.UserInterface.Controls; +using Robust.Shared.Graphics; namespace Content.Client.Kitchen.UI { diff --git a/Content.Client/Lathe/UI/RecipeControl.xaml.cs b/Content.Client/Lathe/UI/RecipeControl.xaml.cs index 2a17b52c66..87ebd6e338 100644 --- a/Content.Client/Lathe/UI/RecipeControl.xaml.cs +++ b/Content.Client/Lathe/UI/RecipeControl.xaml.cs @@ -3,6 +3,7 @@ using Robust.Client.AutoGenerated; using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Graphics; namespace Content.Client.Lathe.UI; diff --git a/Content.Client/Light/Components/LightBehaviourComponent.cs b/Content.Client/Light/Components/LightBehaviourComponent.cs index a7961347e3..a89ddda108 100644 --- a/Content.Client/Light/Components/LightBehaviourComponent.cs +++ b/Content.Client/Light/Components/LightBehaviourComponent.cs @@ -53,7 +53,7 @@ namespace Content.Client.Light.Components if (Enabled && _entMan.TryGetComponent(_parent, out PointLightComponent? light)) { - light.Enabled = true; + _entMan.System().SetEnabled(_parent, true, light); } OnInitialize(); @@ -63,7 +63,7 @@ namespace Content.Client.Light.Components { if (_entMan.TryGetComponent(_parent, out PointLightComponent? light)) { - light.Enabled = true; + _entMan.System().SetEnabled(_parent, true, light); } if (MinDuration > 0) diff --git a/Content.Client/Light/RgbLightControllerSystem.cs b/Content.Client/Light/RgbLightControllerSystem.cs index ccea86013d..a9ba34ca7d 100644 --- a/Content.Client/Light/RgbLightControllerSystem.cs +++ b/Content.Client/Light/RgbLightControllerSystem.cs @@ -17,6 +17,7 @@ namespace Content.Client.Light { [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly ItemSystem _itemSystem = default!; + [Dependency] private readonly SharedPointLightSystem _lights = default!; public override void Initialize() { @@ -156,7 +157,7 @@ namespace Content.Client.Light if (!Resolve(uid, ref rgb, ref sprite, ref light, false)) return; - light.Color = rgb.OriginalLightColor; + _lights.SetColor(uid, rgb.OriginalLightColor, light); if (rgb.Layers == null || rgb.OriginalLayerColors == null) return; @@ -173,7 +174,7 @@ namespace Content.Client.Light { var color = GetCurrentRgbColor(_gameTiming.RealTime, rgb.CreationTick.Value * _gameTiming.TickPeriod, rgb); - light.Color = color; + _lights.SetColor(light.Owner, color, light); if (rgb.Layers != null) { diff --git a/Content.Client/Parallax/Data/GeneratedParallaxTextureSource.cs b/Content.Client/Parallax/Data/GeneratedParallaxTextureSource.cs index 72b5d0155b..81f012d93c 100644 --- a/Content.Client/Parallax/Data/GeneratedParallaxTextureSource.cs +++ b/Content.Client/Parallax/Data/GeneratedParallaxTextureSource.cs @@ -9,6 +9,7 @@ using Robust.Client.Graphics; using Robust.Shared.Utility; using Robust.Shared.Configuration; using Robust.Shared.ContentPack; +using Robust.Shared.Graphics; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; diff --git a/Content.Client/Parallax/Data/IParallaxTextureSource.cs b/Content.Client/Parallax/Data/IParallaxTextureSource.cs index a18d63fe76..dc514c1304 100644 --- a/Content.Client/Parallax/Data/IParallaxTextureSource.cs +++ b/Content.Client/Parallax/Data/IParallaxTextureSource.cs @@ -1,6 +1,7 @@ using System.Threading; using System.Threading.Tasks; using Robust.Client.Graphics; +using Robust.Shared.Graphics; namespace Content.Client.Parallax.Data { diff --git a/Content.Client/Parallax/Data/ImageParallaxTextureSource.cs b/Content.Client/Parallax/Data/ImageParallaxTextureSource.cs index 4672559741..cec57b83a5 100644 --- a/Content.Client/Parallax/Data/ImageParallaxTextureSource.cs +++ b/Content.Client/Parallax/Data/ImageParallaxTextureSource.cs @@ -4,6 +4,7 @@ using JetBrains.Annotations; using Content.Client.Resources; using Content.Client.IoC; using Robust.Client.Graphics; +using Robust.Shared.Graphics; using Robust.Shared.Utility; namespace Content.Client.Parallax.Data; diff --git a/Content.Client/Parallax/ParallaxLayerPrepared.cs b/Content.Client/Parallax/ParallaxLayerPrepared.cs index 4bd186033a..a04bfa4d1a 100644 --- a/Content.Client/Parallax/ParallaxLayerPrepared.cs +++ b/Content.Client/Parallax/ParallaxLayerPrepared.cs @@ -1,6 +1,7 @@ using System; using Robust.Client.Graphics; using Content.Client.Parallax.Data; +using Robust.Shared.Graphics; namespace Content.Client.Parallax; diff --git a/Content.Client/Power/APC/ApcVisualizerSystem.cs b/Content.Client/Power/APC/ApcVisualizerSystem.cs index 6322117f44..23b9157ea3 100644 --- a/Content.Client/Power/APC/ApcVisualizerSystem.cs +++ b/Content.Client/Power/APC/ApcVisualizerSystem.cs @@ -6,6 +6,8 @@ namespace Content.Client.Power.APC; public sealed class ApcVisualizerSystem : VisualizerSystem { + [Dependency] private readonly SharedPointLightSystem _lights = default!; + protected override void OnAppearanceChange(EntityUid uid, ApcVisualsComponent comp, ref AppearanceChangeEvent args) { if (args.Sprite == null) @@ -43,8 +45,10 @@ public sealed class ApcVisualizerSystem : VisualizerSystem } } - if (TryComp(uid, out var light)) - light.Color = comp.ScreenColors[(sbyte)chargeState]; + if (TryComp(uid, out var light)) + { + _lights.SetColor(uid, comp.ScreenColors[(sbyte)chargeState], light); + } } else { @@ -61,8 +65,10 @@ public sealed class ApcVisualizerSystem : VisualizerSystem args.Sprite.LayerSetVisible(layer, false); } - if (TryComp(uid, out var light)) - light.Color = comp.EmaggedScreenColor; + if (TryComp(uid, out var light)) + { + _lights.SetColor(uid, comp.EmaggedScreenColor, light); + } } } } diff --git a/Content.Client/Power/PowerMonitoringWindow.xaml.cs b/Content.Client/Power/PowerMonitoringWindow.xaml.cs index 6629433598..5cc48395a3 100644 --- a/Content.Client/Power/PowerMonitoringWindow.xaml.cs +++ b/Content.Client/Power/PowerMonitoringWindow.xaml.cs @@ -9,6 +9,8 @@ using Robust.Client.Graphics; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Graphics; +using Robust.Shared.Graphics.RSI; using Robust.Shared.Prototypes; namespace Content.Client.Power; @@ -64,7 +66,7 @@ public sealed partial class PowerMonitoringWindow : DefaultWindow, IComputerWind IRsiStateLike? iconState = null; if (entityPrototype != null) iconState = _spriteSystem.GetPrototypeIcon(entityPrototype); - var icon = iconState?.GetFrame(RSI.State.Direction.South, 0); + var icon = iconState?.GetFrame(RsiDirection.South, 0); var item = list[i]; item.Text = $"{ent.NameLocalized} {Loc.GetString("power-monitoring-window-value", ("value", ent.Size))}"; item.Icon = icon; diff --git a/Content.Client/Preferences/UI/CharacterSetupGui.xaml.cs b/Content.Client/Preferences/UI/CharacterSetupGui.xaml.cs index e63a811f0e..1386146414 100644 --- a/Content.Client/Preferences/UI/CharacterSetupGui.xaml.cs +++ b/Content.Client/Preferences/UI/CharacterSetupGui.xaml.cs @@ -25,6 +25,7 @@ using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Prototypes; using static Robust.Client.UserInterface.Controls.BoxContainer; +using Direction = Robust.Shared.Maths.Direction; namespace Content.Client.Preferences.UI { diff --git a/Content.Client/Preferences/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Preferences/UI/HumanoidProfileEditor.xaml.cs index 076e4805c8..b40b30f5b0 100644 --- a/Content.Client/Preferences/UI/HumanoidProfileEditor.xaml.cs +++ b/Content.Client/Preferences/UI/HumanoidProfileEditor.xaml.cs @@ -32,6 +32,7 @@ using Robust.Shared.Random; using Robust.Shared.Timing; using Robust.Shared.Utility; using static Robust.Client.UserInterface.Controls.BoxContainer; +using Direction = Robust.Shared.Maths.Direction; namespace Content.Client.Preferences.UI { diff --git a/Content.Client/Resources/ResourceCacheExtensions.cs b/Content.Client/Resources/ResourceCacheExtensions.cs index b2808e007e..be8b8fed3b 100644 --- a/Content.Client/Resources/ResourceCacheExtensions.cs +++ b/Content.Client/Resources/ResourceCacheExtensions.cs @@ -1,6 +1,7 @@ using JetBrains.Annotations; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; +using Robust.Shared.Graphics; using Robust.Shared.Utility; namespace Content.Client.Resources diff --git a/Content.Client/Revenant/RevenantOverloadedLightsSystem.cs b/Content.Client/Revenant/RevenantOverloadedLightsSystem.cs index 2d7b8d3a62..9fd4e4f068 100644 --- a/Content.Client/Revenant/RevenantOverloadedLightsSystem.cs +++ b/Content.Client/Revenant/RevenantOverloadedLightsSystem.cs @@ -6,6 +6,8 @@ namespace Content.Client.Revenant; public sealed class RevenantOverloadedLightsSystem : SharedRevenantOverloadedLightsSystem { + [Dependency] private readonly SharedPointLightSystem _lights = default!; + public override void Initialize() { base.Initialize(); @@ -20,37 +22,37 @@ public sealed class RevenantOverloadedLightsSystem : SharedRevenantOverloadedLig var enumerator = EntityQueryEnumerator(); - while (enumerator.MoveNext(out var comp, out var light)) + while (enumerator.MoveNext(out var uid, out var comp, out var light)) { //this looks cool :HECK: - light.Energy = 2f * Math.Abs((float) Math.Sin(0.25 * Math.PI * comp.Accumulator)); + _lights.SetEnergy(uid, 2f * Math.Abs((float) Math.Sin(0.25 * Math.PI * comp.Accumulator)), light); } } private void OnStartup(EntityUid uid, RevenantOverloadedLightsComponent component, ComponentStartup args) { - var light = EnsureComp(uid); + var light = _lights.EnsureLight(uid); component.OriginalEnergy = light.Energy; component.OriginalEnabled = light.Enabled; - light.Enabled = component.OriginalEnabled; - Dirty(light); + _lights.SetEnabled(uid, component.OriginalEnabled, light); + Dirty(uid, light); } private void OnShutdown(EntityUid uid, RevenantOverloadedLightsComponent component, ComponentShutdown args) { - if (!TryComp(component.Owner, out var light)) + if (!_lights.TryGetLight(uid, out var light)) return; if (component.OriginalEnergy == null) { - RemComp(component.Owner); + RemComp(uid, light); return; } - light.Energy = component.OriginalEnergy.Value; - light.Enabled = component.OriginalEnabled; - Dirty(light); + _lights.SetEnergy(uid, component.OriginalEnergy.Value, light); + _lights.SetEnabled(uid, component.OriginalEnabled, light); + Dirty(uid, light); } protected override void OnZap(RevenantOverloadedLightsComponent component) diff --git a/Content.Client/SprayPainter/SprayPainterSystem.cs b/Content.Client/SprayPainter/SprayPainterSystem.cs index b625f4a667..4476e2a90a 100644 --- a/Content.Client/SprayPainter/SprayPainterSystem.cs +++ b/Content.Client/SprayPainter/SprayPainterSystem.cs @@ -4,6 +4,7 @@ using Robust.Client.ResourceManagement; using Robust.Shared.Serialization.TypeSerializers.Implementations; using Robust.Shared.Utility; using System.Linq; +using Robust.Shared.Graphics; namespace Content.Client.SprayPainter; diff --git a/Content.Client/Storage/UI/StorageWindow.cs b/Content.Client/Storage/UI/StorageWindow.cs index 1819f65860..9ea60aa03c 100644 --- a/Content.Client/Storage/UI/StorageWindow.cs +++ b/Content.Client/Storage/UI/StorageWindow.cs @@ -11,6 +11,7 @@ using Content.Shared.Stacks; using Robust.Client.UserInterface; using static Robust.Client.UserInterface.Controls.BoxContainer; using static Content.Shared.Storage.SharedStorageComponent; +using Direction = Robust.Shared.Maths.Direction; namespace Content.Client.Storage.UI { diff --git a/Content.Client/Store/Ui/StoreListingControl.xaml.cs b/Content.Client/Store/Ui/StoreListingControl.xaml.cs index 073d627439..bb600588e0 100644 --- a/Content.Client/Store/Ui/StoreListingControl.xaml.cs +++ b/Content.Client/Store/Ui/StoreListingControl.xaml.cs @@ -2,6 +2,7 @@ using Robust.Client.AutoGenerated; using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Graphics; namespace Content.Client.Store.Ui; diff --git a/Content.Client/Stylesheets/StyleNano.cs b/Content.Client/Stylesheets/StyleNano.cs index 78dbf9007e..a61eef97b8 100644 --- a/Content.Client/Stylesheets/StyleNano.cs +++ b/Content.Client/Stylesheets/StyleNano.cs @@ -14,6 +14,7 @@ using Robust.Client.ResourceManagement; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.Graphics; using static Robust.Client.UserInterface.StylesheetHelpers; namespace Content.Client.Stylesheets diff --git a/Content.Client/Toggleable/ToggleableLightVisualsSystem.cs b/Content.Client/Toggleable/ToggleableLightVisualsSystem.cs index 47c0157499..e3c17a4fd5 100644 --- a/Content.Client/Toggleable/ToggleableLightVisualsSystem.cs +++ b/Content.Client/Toggleable/ToggleableLightVisualsSystem.cs @@ -13,6 +13,7 @@ namespace Content.Client.Toggleable; public sealed class ToggleableLightVisualsSystem : VisualizerSystem { [Dependency] private readonly SharedItemSystem _itemSys = default!; + [Dependency] private readonly SharedPointLightSystem _lights = default!; public override void Initialize() { @@ -40,9 +41,11 @@ public sealed class ToggleableLightVisualsSystem : VisualizerSystem(entIcon.Value).Icon? - .GetFrame(RSI.State.Direction.South, 0); + .GetFrame(RsiDirection.South, 0); } else if (action.Icon != null) { diff --git a/Content.Client/UserInterface/Systems/Actions/Controls/ActionButton.cs b/Content.Client/UserInterface/Systems/Actions/Controls/ActionButton.cs index 4bc0927818..2af079ccce 100644 --- a/Content.Client/UserInterface/Systems/Actions/Controls/ActionButton.cs +++ b/Content.Client/UserInterface/Systems/Actions/Controls/ActionButton.cs @@ -9,11 +9,13 @@ using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.Utility; +using Robust.Shared.Graphics; using Robust.Shared.Input; using Robust.Shared.Timing; using Robust.Shared.Utility; using static Robust.Client.UserInterface.Controls.BoxContainer; using static Robust.Client.UserInterface.Controls.TextureRect; +using Direction = Robust.Shared.Maths.Direction; namespace Content.Client.UserInterface.Systems.Actions.Controls; diff --git a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs index d0d21e4a6e..3f878d1383 100644 --- a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs +++ b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs @@ -6,6 +6,7 @@ using Robust.Client.Graphics; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Graphics; using Robust.Shared.Prototypes; namespace Content.Client.VendingMachines.UI diff --git a/Content.Client/Weapons/Ranged/Systems/GunSystem.AmmoCounter.cs b/Content.Client/Weapons/Ranged/Systems/GunSystem.AmmoCounter.cs index 288c730c41..dfb5418f11 100644 --- a/Content.Client/Weapons/Ranged/Systems/GunSystem.AmmoCounter.cs +++ b/Content.Client/Weapons/Ranged/Systems/GunSystem.AmmoCounter.cs @@ -8,6 +8,7 @@ using Robust.Client.Animations; using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; +using Robust.Shared.Graphics; namespace Content.Client.Weapons.Ranged.Systems; diff --git a/Content.Client/Weapons/Ranged/Systems/GunSystem.cs b/Content.Client/Weapons/Ranged/Systems/GunSystem.cs index 422d97c5b2..743ca562d2 100644 --- a/Content.Client/Weapons/Ranged/Systems/GunSystem.cs +++ b/Content.Client/Weapons/Ranged/Systems/GunSystem.cs @@ -312,8 +312,8 @@ public sealed partial class GunSystem : SharedGunSystem light.NetSyncEnabled = false; Lights.SetEnabled(uid, true, light); Lights.SetRadius(uid, 2f, light); - light.Color = Color.FromHex("#cc8e2b"); - light.Energy = 5f; + Lights.SetColor(uid, Color.FromHex("#cc8e2b"), light); + Lights.SetEnergy(uid, 5f, light); var animTwo = new Animation() { diff --git a/Content.Client/Weather/WeatherOverlay.cs b/Content.Client/Weather/WeatherOverlay.cs index 60571938e7..bd5627292a 100644 --- a/Content.Client/Weather/WeatherOverlay.cs +++ b/Content.Client/Weather/WeatherOverlay.cs @@ -7,6 +7,8 @@ using Robust.Client.Graphics; using Robust.Client.ResourceManagement; using Robust.Client.Utility; using Robust.Shared.Enums; +using Robust.Shared.Graphics; +using Robust.Shared.Graphics.RSI; using Robust.Shared.Map; using Robust.Shared.Physics.Components; using Robust.Shared.Prototypes; @@ -131,7 +133,7 @@ public sealed class WeatherOverlay : Overlay case SpriteSpecifier.Rsi rsi: var rsiActual = _cache.GetResource(rsi.RsiPath).RSI; rsiActual.TryGetState(rsi.RsiState, out var state); - var frames = state!.GetFrames(RSI.State.Direction.South); + var frames = state!.GetFrames(RsiDirection.South); var delays = state.GetDelays(); var totalDelay = delays.Sum(); var time = curTime.TotalSeconds % totalDelay; diff --git a/Content.Server/Anomaly/AnomalySystem.Vessel.cs b/Content.Server/Anomaly/AnomalySystem.Vessel.cs index 893a968258..02c435d242 100644 --- a/Content.Server/Anomaly/AnomalySystem.Vessel.cs +++ b/Content.Server/Anomaly/AnomalySystem.Vessel.cs @@ -156,7 +156,7 @@ public sealed partial class AnomalySystem return; Appearance.SetData(uid, AnomalyVesselVisuals.HasAnomaly, on, appearanceComponent); - if (TryComp(uid, out var pointLightComponent)) + if (_pointLight.TryGetLight(uid, out var pointLightComponent)) _pointLight.SetEnabled(uid, on, pointLightComponent); // arbitrary value for the generic visualizer to use. diff --git a/Content.Server/Botany/Systems/BotanySystem.Seed.cs b/Content.Server/Botany/Systems/BotanySystem.Seed.cs index a1291b85d2..b2cad7e012 100644 --- a/Content.Server/Botany/Systems/BotanySystem.Seed.cs +++ b/Content.Server/Botany/Systems/BotanySystem.Seed.cs @@ -26,11 +26,12 @@ namespace Content.Server.Botany.Systems; public sealed partial class BotanySystem : EntitySystem { - [Dependency] private readonly AppearanceSystem _appearance = default!; - [Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly IRobustRandom _robustRandom = default!; + [Dependency] private readonly AppearanceSystem _appearance = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly SharedPointLightSystem _light = default!; [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly FixtureSystem _fixtureSystem = default!; @@ -181,17 +182,17 @@ public sealed partial class BotanySystem : EntitySystem if (proto.Bioluminescent) { - var light = EnsureComp(entity); - light.Radius = proto.BioluminescentRadius; - light.Color = proto.BioluminescentColor; - light.CastShadows = false; // this is expensive, and botanists make lots of plants - Dirty(light); + var light = _light.EnsureLight(entity); + _light.SetRadius(entity, proto.BioluminescentRadius, light); + _light.SetColor(entity, proto.BioluminescentColor, light); + // TODO: Ayo why you copy-pasting code between here and plantholder? + _light.SetCastShadows(entity, false, light); // this is expensive, and botanists make lots of plants } if (proto.Slip) { var slippery = EnsureComp(entity); - EntityManager.Dirty(slippery); + Dirty(entity, slippery); EnsureComp(entity); // Need a fixture with a slip layer in order to actually do the slipping var fixtures = EnsureComp(entity); diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs index a59dddb712..275b80dd7f 100644 --- a/Content.Server/Botany/Systems/PlantHolderSystem.cs +++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs @@ -29,6 +29,7 @@ namespace Content.Server.Botany.Systems; public sealed class PlantHolderSystem : EntitySystem { + [Dependency] private readonly AtmosphereSystem _atmosphere = default!; [Dependency] private readonly BotanySystem _botany = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly MutationSystem _mutation = default!; @@ -36,10 +37,11 @@ public sealed class PlantHolderSystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; + [Dependency] private readonly SharedPointLightSystem _pointLight = default!; [Dependency] private readonly SolutionContainerSystem _solutionSystem = default!; + [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly AtmosphereSystem _atmosphere = default!; + public const float HydroponicsSpeedMultiplier = 1f; public const float HydroponicsConsumptionMultiplier = 2f; @@ -856,9 +858,9 @@ public sealed class PlantHolderSystem : EntitySystem if (component.Seed != null && component.Seed.Bioluminescent) { var light = EnsureComp(uid); - light.Radius = component.Seed.BioluminescentRadius; - light.Color = component.Seed.BioluminescentColor; - light.CastShadows = false; // this is expensive, and botanists make lots of plants + _pointLight.SetRadius(uid, component.Seed.BioluminescentRadius, light); + _pointLight.SetColor(uid, component.Seed.BioluminescentColor, light); + _pointLight.SetCastShadows(uid, false, light); Dirty(uid, light); } else diff --git a/Content.Server/Gravity/GravityGeneratorSystem.cs b/Content.Server/Gravity/GravityGeneratorSystem.cs index ad745ffa5d..1a9b2ad6e9 100644 --- a/Content.Server/Gravity/GravityGeneratorSystem.cs +++ b/Content.Server/Gravity/GravityGeneratorSystem.cs @@ -17,6 +17,7 @@ namespace Content.Server.Gravity [Dependency] private readonly AmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly GravitySystem _gravitySystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedPointLightSystem _lights = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; public override void Initialize() @@ -233,10 +234,10 @@ namespace Content.Server.Gravity var appearance = EntityManager.GetComponentOrNull(uid); _appearance.SetData(uid, GravityGeneratorVisuals.Charge, grav.Charge, appearance); - if (EntityManager.TryGetComponent(uid, out PointLightComponent? pointLight)) + if (_lights.TryGetLight(uid, out var pointLight)) { - pointLight.Enabled = grav.Charge > 0; - pointLight.Radius = MathHelper.Lerp(grav.LightRadiusMin, grav.LightRadiusMax, grav.Charge); + _lights.SetEnabled(uid, grav.Charge > 0, pointLight); + _lights.SetRadius(uid, MathHelper.Lerp(grav.LightRadiusMin, grav.LightRadiusMax, grav.Charge), pointLight); } if (!grav.Intact) diff --git a/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs b/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs index 22a27dc8c4..bc3e7e83e2 100644 --- a/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs +++ b/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs @@ -9,7 +9,6 @@ using Content.Shared.Examine; using Content.Shared.Light; using Content.Shared.Light.Components; using Robust.Server.GameObjects; -using Robust.Shared.GameStates; using Color = Robust.Shared.Maths.Color; namespace Content.Server.Light.EntitySystems; @@ -103,7 +102,7 @@ public sealed class EmergencyLightSystem : SharedEmergencyLightSystem if (CompOrNull(xform.GridUid)?.Station != ev.Station) continue; - pointLight.Color = details.EmergencyLightColor; + _pointLight.SetColor(uid, details.EmergencyLightColor, pointLight); _appearance.SetData(uid, EmergencyLightVisuals.Color, details.EmergencyLightColor, appearance); if (details.ForceEnableEmergencyLights && !light.ForciblyEnabled) diff --git a/Content.Server/Light/EntitySystems/HandheldLightSystem.cs b/Content.Server/Light/EntitySystems/HandheldLightSystem.cs index e74585f0b2..3ff115d14e 100644 --- a/Content.Server/Light/EntitySystems/HandheldLightSystem.cs +++ b/Content.Server/Light/EntitySystems/HandheldLightSystem.cs @@ -13,18 +13,20 @@ using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Shared.Containers; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Server.Light.EntitySystems { - [UsedImplicitly] public sealed class HandheldLightSystem : SharedHandheldLightSystem { + [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly ActionsSystem _actions = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly PowerCellSystem _powerCell = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPointLightSystem _lights = default!; // TODO: Ideally you'd be able to subscribe to power stuff to get events at certain percentages.. or something? // But for now this will be better anyway. @@ -196,12 +198,12 @@ namespace Content.Server.Light.EntitySystems public bool TurnOff(EntityUid uid, HandheldLightComponent component, bool makeNoise = true) { - if (!component.Activated || !TryComp(uid, out var pointLightComponent)) + if (!component.Activated || !_lights.TryGetLight(uid, out var pointLightComponent)) { return false; } - pointLightComponent.Enabled = false; + _lights.SetEnabled(uid, false, pointLightComponent); SetActivated(uid, false, component, makeNoise); component.Level = null; _activeLights.Remove(component); @@ -210,7 +212,7 @@ namespace Content.Server.Light.EntitySystems public bool TurnOn(EntityUid user, EntityUid uid, HandheldLightComponent component) { - if (component.Activated || !TryComp(uid, out var pointLightComponent)) + if (component.Activated || !_lights.TryGetLight(uid, out var pointLightComponent)) { return false; } @@ -233,7 +235,7 @@ namespace Content.Server.Light.EntitySystems return false; } - pointLightComponent.Enabled = true; + _lights.SetEnabled(uid, true, pointLightComponent); SetActivated(uid, true, component, true); _activeLights.Add(component); diff --git a/Content.Server/Light/EntitySystems/LitOnPoweredSystem.cs b/Content.Server/Light/EntitySystems/LitOnPoweredSystem.cs index b3961b15f9..752fb8f5fe 100644 --- a/Content.Server/Light/EntitySystems/LitOnPoweredSystem.cs +++ b/Content.Server/Light/EntitySystems/LitOnPoweredSystem.cs @@ -1,12 +1,13 @@ using Content.Server.Light.Components; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; -using Robust.Server.GameObjects; namespace Content.Server.Light.EntitySystems { public sealed class LitOnPoweredSystem : EntitySystem { + [Dependency] private readonly SharedPointLightSystem _lights = default!; + public override void Initialize() { base.Initialize(); @@ -16,17 +17,17 @@ namespace Content.Server.Light.EntitySystems private void OnPowerChanged(EntityUid uid, LitOnPoweredComponent component, ref PowerChangedEvent args) { - if (EntityManager.TryGetComponent(uid, out var light)) + if (_lights.TryGetLight(uid, out var light)) { - light.Enabled = args.Powered; + _lights.SetEnabled(uid, args.Powered, light); } } private void OnPowerSupply(EntityUid uid, LitOnPoweredComponent component, ref PowerNetBatterySupplyEvent args) { - if (EntityManager.TryGetComponent(uid, out var light)) + if (_lights.TryGetLight(uid, out var light)) { - light.Enabled = args.Supply; + _lights.SetEnabled(uid, args.Supply, light); } } } diff --git a/Content.Server/Light/EntitySystems/MatchstickSystem.cs b/Content.Server/Light/EntitySystems/MatchstickSystem.cs index b705fabce4..7fe8aa9237 100644 --- a/Content.Server/Light/EntitySystems/MatchstickSystem.cs +++ b/Content.Server/Light/EntitySystems/MatchstickSystem.cs @@ -14,9 +14,10 @@ namespace Content.Server.Light.EntitySystems public sealed class MatchstickSystem : EntitySystem { [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; - [Dependency] private readonly TransformSystem _transformSystem = default!; - [Dependency] private readonly SharedItemSystem _item = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedItemSystem _item = default!; + [Dependency] private readonly SharedPointLightSystem _lights = default!; + [Dependency] private readonly TransformSystem _transformSystem = default!; private HashSet _litMatches = new(); @@ -92,25 +93,25 @@ namespace Content.Server.Light.EntitySystems { component.CurrentState = value; - if (TryComp(component.Owner, out var pointLightComponent)) + if (_lights.TryGetLight(uid, out var pointLightComponent)) { - pointLightComponent.Enabled = component.CurrentState == SmokableState.Lit; + _lights.SetEnabled(uid, component.CurrentState == SmokableState.Lit, pointLightComponent); } - if (EntityManager.TryGetComponent(component.Owner, out ItemComponent? item)) + if (EntityManager.TryGetComponent(uid, out ItemComponent? item)) { switch (component.CurrentState) { case SmokableState.Lit: - _item.SetHeldPrefix(component.Owner, "lit", item); + _item.SetHeldPrefix(uid, "lit", item); break; default: - _item.SetHeldPrefix(component.Owner, "unlit", item); + _item.SetHeldPrefix(uid, "unlit", item); break; } } - if (EntityManager.TryGetComponent(component.Owner, out AppearanceComponent? appearance)) + if (EntityManager.TryGetComponent(uid, out AppearanceComponent? appearance)) { _appearance.SetData(uid, SmokingVisuals.Smoking, component.CurrentState, appearance); } diff --git a/Content.Server/Light/EntitySystems/PoweredLightSystem.cs b/Content.Server/Light/EntitySystems/PoweredLightSystem.cs index b84a2688e5..eb079ebbb6 100644 --- a/Content.Server/Light/EntitySystems/PoweredLightSystem.cs +++ b/Content.Server/Light/EntitySystems/PoweredLightSystem.cs @@ -41,6 +41,7 @@ namespace Content.Server.Light.EntitySystems [Dependency] private readonly SharedContainerSystem _containerSystem = default!; [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly PointLightSystem _pointLight = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; private static readonly TimeSpan ThunkDelay = TimeSpan.FromSeconds(2); @@ -74,9 +75,10 @@ namespace Content.Server.Light.EntitySystems private void OnMapInit(EntityUid uid, PoweredLightComponent light, MapInitEvent args) { + // TODO: Use ContainerFill dog if (light.HasLampOnSpawn != null) { - var entity = EntityManager.SpawnEntity(light.HasLampOnSpawn, EntityManager.GetComponent(light.Owner).Coordinates); + var entity = EntityManager.SpawnEntity(light.HasLampOnSpawn, EntityManager.GetComponent(uid).Coordinates); light.LightBulbContainer.Insert(entity); } // need this to update visualizers @@ -386,16 +388,16 @@ namespace Content.Server.Light.EntitySystems if (EntityManager.TryGetComponent(uid, out PointLightComponent? pointLight)) { - pointLight.Enabled = value; + _pointLight.SetEnabled(uid, value, pointLight); if (color != null) - pointLight.Color = color.Value; + _pointLight.SetColor(uid, color.Value, pointLight); if (radius != null) - pointLight.Radius = (float) radius; + _pointLight.SetRadius(uid, (float) radius, pointLight); if (energy != null) - pointLight.Energy = (float) energy; + _pointLight.SetEnergy(uid, (float) energy, pointLight); if (softness != null) - pointLight.Softness = (float) softness; + _pointLight.SetSoftness(uid, (float) softness, pointLight); } } diff --git a/Content.Server/Light/EntitySystems/UnpoweredFlashlightSystem.cs b/Content.Server/Light/EntitySystems/UnpoweredFlashlightSystem.cs index 6a7e7ba8a0..2be870ff0d 100644 --- a/Content.Server/Light/EntitySystems/UnpoweredFlashlightSystem.cs +++ b/Content.Server/Light/EntitySystems/UnpoweredFlashlightSystem.cs @@ -7,7 +7,6 @@ using Content.Shared.Light.Components; using Content.Shared.Mind.Components; using Content.Shared.Toggleable; using Content.Shared.Verbs; -using Robust.Server.GameObjects; using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Utility; @@ -16,11 +15,12 @@ namespace Content.Server.Light.EntitySystems { public sealed class UnpoweredFlashlightSystem : EntitySystem { + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; + [Dependency] private readonly SharedPointLightSystem _light = default!; public override void Initialize() { @@ -71,13 +71,13 @@ namespace Content.Server.Light.EntitySystems private void OnGotEmagged(EntityUid uid, UnpoweredFlashlightComponent component, ref GotEmaggedEvent args) { - if (!TryComp(uid, out var light)) + if (!_light.TryGetLight(uid, out var light)) return; if (_prototypeManager.TryIndex(component.EmaggedColorsPrototype, out var possibleColors)) { var pick = _random.Pick(possibleColors.Colors.Values); - light.Color = pick; + _light.SetColor(uid, pick, light); } args.Repeatable = true; @@ -86,11 +86,11 @@ namespace Content.Server.Light.EntitySystems public void ToggleLight(EntityUid uid, UnpoweredFlashlightComponent flashlight) { - if (!TryComp(uid, out var light)) + if (!_light.TryGetLight(uid, out var light)) return; flashlight.LightOn = !flashlight.LightOn; - light.Enabled = flashlight.LightOn; + _light.SetEnabled(uid, flashlight.LightOn, light); _appearance.SetData(uid, UnpoweredFlashlightVisuals.LightOn, flashlight.LightOn); diff --git a/Content.Server/Power/Generation/Teg/TegSystem.cs b/Content.Server/Power/Generation/Teg/TegSystem.cs index 4bd1c0a14c..9219f5f73c 100644 --- a/Content.Server/Power/Generation/Teg/TegSystem.cs +++ b/Content.Server/Power/Generation/Teg/TegSystem.cs @@ -270,10 +270,10 @@ public sealed class TegSystem : EntitySystem _appearance.SetData(uid, TegVisuals.CirculatorSpeed, speed); _appearance.SetData(uid, TegVisuals.CirculatorPower, powered); - if (TryComp(uid, out PointLightComponent? pointLight)) + if (_pointLight.TryGetLight(uid, out var pointLight)) { _pointLight.SetEnabled(uid, powered, pointLight); - pointLight.Color = speed == TegCirculatorSpeed.SpeedFast ? circ.LightColorFast : circ.LightColorSlow; + _pointLight.SetColor(uid, speed == TegCirculatorSpeed.SpeedFast ? circ.LightColorFast : circ.LightColorSlow, pointLight); } } diff --git a/Content.Server/Shuttles/Systems/ThrusterSystem.cs b/Content.Server/Shuttles/Systems/ThrusterSystem.cs index 24d326c94e..1fd9fabb80 100644 --- a/Content.Server/Shuttles/Systems/ThrusterSystem.cs +++ b/Content.Server/Shuttles/Systems/ThrusterSystem.cs @@ -1,4 +1,3 @@ -using System.Linq; using System.Numerics; using Content.Server.Audio; using Content.Server.Construction; @@ -12,9 +11,7 @@ using Content.Shared.Maps; using Content.Shared.Physics; using Content.Shared.Shuttles.Components; using Content.Shared.Temperature; -using Robust.Server.GameObjects; using Robust.Shared.Map; -using Robust.Shared.Map.Components; using Robust.Shared.Physics.Collision.Shapes; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Events; @@ -32,6 +29,7 @@ public sealed class ThrusterSystem : EntitySystem [Dependency] private readonly AmbientSoundSystem _ambient = default!; [Dependency] private readonly FixtureSystem _fixtureSystem = default!; [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly SharedPointLightSystem _light = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; // Essentially whenever thruster enables we update the shuttle's available impulses which are used for movement. @@ -287,9 +285,9 @@ public sealed class ThrusterSystem : EntitySystem _appearance.SetData(uid, ThrusterVisualState.State, true, appearance); } - if (EntityManager.TryGetComponent(uid, out PointLightComponent? pointLightComponent)) + if (_light.TryGetLight(uid, out var pointLightComponent)) { - pointLightComponent.Enabled = true; + _light.SetEnabled(uid, true, pointLightComponent); } _ambient.SetAmbience(uid, true); @@ -376,9 +374,9 @@ public sealed class ThrusterSystem : EntitySystem _appearance.SetData(uid, ThrusterVisualState.State, false, appearance); } - if (EntityManager.TryGetComponent(uid, out PointLightComponent? pointLightComponent)) + if (_light.TryGetLight(uid, out var pointLightComponent)) { - pointLightComponent.Enabled = false; + _light.SetEnabled(uid, false, pointLightComponent); } _ambient.SetAmbience(uid, false); diff --git a/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs b/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs index ac21342376..a0621ef63d 100644 --- a/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs +++ b/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs @@ -18,10 +18,11 @@ namespace Content.Server.Singularity.EntitySystems; public sealed class ContainmentFieldGeneratorSystem : EntitySystem { [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly TagSystem _tags = default!; - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly PhysicsSystem _physics = default!; [Dependency] private readonly AppearanceSystem _visualizer = default!; + [Dependency] private readonly PhysicsSystem _physics = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly SharedPointLightSystem _light = default!; + [Dependency] private readonly TagSystem _tags = default!; public override void Initialize() { @@ -325,9 +326,9 @@ public sealed class ContainmentFieldGeneratorSystem : EntitySystem /// public void UpdateConnectionLights(ContainmentFieldGeneratorComponent component) { - if (EntityManager.TryGetComponent(component.Owner, out var pointLightComponent)) + if (_light.TryGetLight(component.Owner, out var pointLightComponent)) { - pointLightComponent.Enabled = component.Connections.Count > 0; + _light.SetEnabled(component.Owner, component.Connections.Count > 0, pointLightComponent); } } diff --git a/Content.Server/Tools/ToolSystem.Welder.cs b/Content.Server/Tools/ToolSystem.Welder.cs index 7097bc4dc9..7e9c7181c5 100644 --- a/Content.Server/Tools/ToolSystem.Welder.cs +++ b/Content.Server/Tools/ToolSystem.Welder.cs @@ -22,11 +22,6 @@ namespace Content.Server.Tools { public sealed partial class ToolSystem { - [Dependency] private readonly IEntityManager _entityManager = default!; - - [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - private readonly HashSet _activeWelders = new(); private const float WelderUpdateTimer = 1f; @@ -65,7 +60,7 @@ namespace Content.Server.Tools WelderComponent? welder = null, SolutionContainerManagerComponent? solutionContainer = null, ItemComponent? item = null, - PointLightComponent? light = null, + SharedPointLightComponent? light = null, AppearanceComponent? appearance = null) { // Right now, we only need the welder. @@ -82,7 +77,7 @@ namespace Content.Server.Tools WelderComponent? welder = null, SolutionContainerManagerComponent? solutionContainer = null, ItemComponent? item = null, - PointLightComponent? light = null, + SharedPointLightComponent? light = null, AppearanceComponent? appearance = null, TransformComponent? transform = null) { @@ -90,7 +85,9 @@ namespace Content.Server.Tools return false; // Optional components. - Resolve(uid, ref item, ref light, ref appearance, false); + Resolve(uid, ref item,ref appearance, false); + + _light.ResolveLight(uid, ref light); if (!_solutionContainerSystem.TryGetSolution(uid, welder.FuelSolution, out var solution, solutionContainer)) return false; @@ -125,7 +122,9 @@ namespace Content.Server.Tools _appearanceSystem.SetData(uid, ToggleableLightVisuals.Enabled, true); if (light != null) - light.Enabled = true; + { + _light.SetEnabled(uid, true, light); + } _audioSystem.PlayPvs(welder.WelderOnSounds, uid, AudioParams.Default.WithVariation(0.125f).WithVolume(-5f)); @@ -135,7 +134,7 @@ namespace Content.Server.Tools _atmosphereSystem.HotspotExpose(gridUid, position, 700, 50, uid, true); } - _entityManager.Dirty(welder); + Dirty(uid, welder); _activeWelders.Add(uid); return true; @@ -144,7 +143,7 @@ namespace Content.Server.Tools public bool TryTurnWelderOff(EntityUid uid, EntityUid? user, WelderComponent? welder = null, ItemComponent? item = null, - PointLightComponent? light = null, + SharedPointLightComponent? light = null, AppearanceComponent? appearance = null) { if (!Resolve(uid, ref welder)) @@ -162,7 +161,7 @@ namespace Content.Server.Tools _adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(uid):welder} toggled off"); var ev = new WelderToggledEvent(false); - RaiseLocalEvent(welder.Owner, ev, false); + RaiseLocalEvent(uid, ev, false); var hotEvent = new IsHotEvent() {IsHot = false}; RaiseLocalEvent(uid, hotEvent); @@ -172,11 +171,13 @@ namespace Content.Server.Tools _appearanceSystem.SetData(uid, ToggleableLightVisuals.Enabled, false); if (light != null) - light.Enabled = false; + { + _light.SetEnabled(uid, false, light); + } _audioSystem.PlayPvs(welder.WelderOffSounds, uid, AudioParams.Default.WithVariation(0.125f).WithVolume(-5f)); - _entityManager.Dirty(welder); + Dirty(uid, welder); _activeWelders.Remove(uid); return true; @@ -184,7 +185,8 @@ namespace Content.Server.Tools private void OnWelderStartup(EntityUid uid, WelderComponent welder, ComponentStartup args) { - _entityManager.Dirty(welder); + // TODO: Delete this shit what + Dirty(welder); } private void OnWelderIsHotEvent(EntityUid uid, WelderComponent welder, IsHotEvent args) @@ -217,7 +219,9 @@ namespace Content.Server.Tools private void OnWelderSolutionChange(EntityUid uid, WelderComponent welder, SolutionChangedEvent args) { - _entityManager.Dirty(welder); + // TODO what + // ???? + Dirty(welder); } private void OnWelderActivate(EntityUid uid, WelderComponent welder, ActivateInWorldEvent args) @@ -310,7 +314,7 @@ namespace Content.Server.Tools if (solution.GetTotalPrototypeQuantity(welder.FuelReagent) <= FixedPoint2.Zero) TryTurnWelderOff(tool, null, welder); - _entityManager.Dirty(welder); + Dirty(welder); } _welderTimer -= WelderUpdateTimer; diff --git a/Content.Server/Tools/ToolSystem.cs b/Content.Server/Tools/ToolSystem.cs index dde6fd8175..a56dabaf8b 100644 --- a/Content.Server/Tools/ToolSystem.cs +++ b/Content.Server/Tools/ToolSystem.cs @@ -12,11 +12,14 @@ namespace Content.Server.Tools // TODO move tool system to shared, and make it a friend of Tool Component. public sealed partial class ToolSystem : SharedToolSystem { - [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!; [Dependency] private readonly IMapManager _mapManager = default!; - [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; + [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!; + [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly SharedAudioSystem _audioSystem = default!; + [Dependency] private readonly SharedPointLightSystem _light = default!; + [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; [Dependency] private readonly TransformSystem _transformSystem = default!; [Dependency] private readonly TurfSystem _turf = default!; diff --git a/Content.Shared/Medical/Cryogenics/SharedCryoPodSystem.cs b/Content.Shared/Medical/Cryogenics/SharedCryoPodSystem.cs index 3d5df87e68..03577d53ac 100644 --- a/Content.Shared/Medical/Cryogenics/SharedCryoPodSystem.cs +++ b/Content.Shared/Medical/Cryogenics/SharedCryoPodSystem.cs @@ -23,6 +23,7 @@ public abstract partial class SharedCryoPodSystem: EntitySystem [Dependency] private readonly MobStateSystem _mobStateSystem = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedContainerSystem _containerSystem = default!; + [Dependency] private readonly SharedPointLightSystem _light = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; public override void Initialize() @@ -51,14 +52,17 @@ public abstract partial class SharedCryoPodSystem: EntitySystem { if (!Resolve(uid, ref cryoPod)) return; + var cryoPodEnabled = HasComp(uid); - if (TryComp(uid, out var light)) + + if (_light.TryGetLight(uid, out var light)) { - light.Enabled = cryoPodEnabled && cryoPod.BodyContainer.ContainedEntity != null; + _light.SetEnabled(uid, cryoPodEnabled && cryoPod.BodyContainer.ContainedEntity != null, light); } if (!Resolve(uid, ref appearance)) return; + _appearanceSystem.SetData(uid, CryoPodComponent.CryoPodVisuals.ContainsEntity, cryoPod.BodyContainer.ContainedEntity == null, appearance); _appearanceSystem.SetData(uid, CryoPodComponent.CryoPodVisuals.IsOn, cryoPodEnabled, appearance); } diff --git a/Content.Shared/Revenant/EntitySystems/SharedRevenantOverloadedLightsSystem.cs b/Content.Shared/Revenant/EntitySystems/SharedRevenantOverloadedLightsSystem.cs index 4cb5b9dc96..40e6a53a00 100644 --- a/Content.Shared/Revenant/EntitySystems/SharedRevenantOverloadedLightsSystem.cs +++ b/Content.Shared/Revenant/EntitySystems/SharedRevenantOverloadedLightsSystem.cs @@ -13,7 +13,7 @@ public abstract class SharedRevenantOverloadedLightsSystem : EntitySystem var enumerator = EntityQueryEnumerator(); - while (enumerator.MoveNext(out var comp)) + while (enumerator.MoveNext(out var uid, out var comp)) { comp.Accumulator += frameTime; @@ -21,7 +21,7 @@ public abstract class SharedRevenantOverloadedLightsSystem : EntitySystem continue; OnZap(comp); - RemComp(comp.Owner, comp); + RemCompDeferred(uid, comp); } } diff --git a/Content.Shared/Security/Systems/DeployableBarrierSystem.cs b/Content.Shared/Security/Systems/DeployableBarrierSystem.cs index 699889586a..9d021c5219 100644 --- a/Content.Shared/Security/Systems/DeployableBarrierSystem.cs +++ b/Content.Shared/Security/Systems/DeployableBarrierSystem.cs @@ -61,7 +61,10 @@ public sealed class DeployableBarrierSystem : EntitySystem if (TryComp(uid, out SharedPullableComponent? pullable)) _pulling.TryStopPull(pullable); - if (TryComp(uid, out SharedPointLightComponent? light)) - _pointLight.SetEnabled(uid, isDeployed, light); + SharedPointLightComponent? pointLight = null; + if (_pointLight.ResolveLight(uid, ref pointLight)) + { + _pointLight.SetEnabled(uid, isDeployed, pointLight); + } } }