From 4bc73ac59191736945f2a4c44151c43c7dc3e18d Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Wed, 30 Mar 2022 18:57:35 +1300 Subject: [PATCH] Make flashlights, atmos hardsuit, and RGB use the new layer features (#6253) * Make flashlights, atmos hardsuit, and RGB use the new layer features * avoid self-conflict * fix rgb not updating on add * cleanup * Update Content.Client/Light/RgbLightControllerSystem.cs Co-authored-by: mirrorcult * cleanup diff Co-authored-by: mirrorcult --- .../Components/HandheldLightComponent.cs | 36 ++++- Content.Client/Light/HandheldLightSystem.cs | 84 +++++++++- .../Light/RgbLightControllerSystem.cs | 148 +++++++++++++----- .../EntitySystems/HandheldLightSystem.cs | 30 +--- .../Inventory/InventorySystem.Equip.cs | 3 - .../Component/RgbLightControllerComponent.cs | 31 +++- .../Component/SharedHandheldLightComponent.cs | 5 +- .../Light/SharedRgbLightControllerSystem.cs | 3 +- .../Clothing/Head/base_clothinghead.yml | 10 +- .../Entities/Clothing/Head/hardhats.yml | 2 + .../Clothing/Head/hardsuit-helmets.yml | 37 ++++- .../Entities/Objects/Misc/fluff_lights.yml | 5 + .../Entities/Objects/Tools/flashlights.yml | 21 ++- .../Entities/Objects/Tools/lantern.yml | 3 + .../atmospherics.rsi/equipped-head-light.png | Bin 0 -> 5800 bytes .../equipped-head-unshaded.png | Bin 0 -> 3704 bytes ...-equipped-HELMET.png => equipped-head.png} | Bin .../atmospherics.rsi/icon-unshaded.png | Bin 0 -> 2003 bytes .../atmospherics.rsi/inhand-left-light.png | Bin 0 -> 7029 bytes .../atmospherics.rsi/inhand-left-unshaded.png | Bin 0 -> 5169 bytes .../{off-inhand-left.png => inhand-left.png} | Bin .../atmospherics.rsi/inhand-right-light.png | Bin 0 -> 7309 bytes .../inhand-right-unshaded.png | Bin 0 -> 5960 bytes ...{off-inhand-right.png => inhand-right.png} | Bin .../atmospherics.rsi/light-overlay.png | Bin 0 -> 2583 bytes .../Head/Hardsuits/atmospherics.rsi/meta.json | 30 +++- .../atmospherics.rsi/on-equipped-HELMET.png | Bin 1586 -> 0 bytes .../atmospherics.rsi/on-inhand-left.png | Bin 1237 -> 0 bytes .../atmospherics.rsi/on-inhand-right.png | Bin 1246 -> 0 bytes .../flashlight.rsi/inhand-left-light.png | Bin 0 -> 1200 bytes .../{off-inhand-left.png => inhand-left.png} | Bin .../flashlight.rsi/inhand-right-light.png | Bin 0 -> 2119 bytes ...{off-inhand-right.png => inhand-right.png} | Bin .../Objects/Tools/flashlight.rsi/meta.json | 8 +- .../Tools/flashlight.rsi/on-inhand-left.png | Bin 324 -> 0 bytes .../Tools/flashlight.rsi/on-inhand-right.png | Bin 322 -> 0 bytes .../Tools/seclite.rsi/inhand-left-light.png | Bin 0 -> 1904 bytes .../{off-inhand-left.png => inhand-left.png} | Bin .../Tools/seclite.rsi/inhand-right-light.png | Bin 0 -> 1934 bytes ...{off-inhand-right.png => inhand-right.png} | Bin .../Objects/Tools/seclite.rsi/meta.json | 8 +- .../Tools/seclite.rsi/on-inhand-left.png | Bin 444 -> 0 bytes .../Tools/seclite.rsi/on-inhand-right.png | Bin 462 -> 0 bytes 43 files changed, 365 insertions(+), 99 deletions(-) create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-light.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-unshaded.png rename Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/{off-equipped-HELMET.png => equipped-head.png} (100%) create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/icon-unshaded.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left-light.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left-unshaded.png rename Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/{off-inhand-left.png => inhand-left.png} (100%) create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right-light.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right-unshaded.png rename Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/{off-inhand-right.png => inhand-right.png} (100%) create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/light-overlay.png delete mode 100644 Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/on-equipped-HELMET.png delete mode 100644 Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/on-inhand-left.png delete mode 100644 Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/on-inhand-right.png create mode 100644 Resources/Textures/Objects/Tools/flashlight.rsi/inhand-left-light.png rename Resources/Textures/Objects/Tools/flashlight.rsi/{off-inhand-left.png => inhand-left.png} (100%) create mode 100644 Resources/Textures/Objects/Tools/flashlight.rsi/inhand-right-light.png rename Resources/Textures/Objects/Tools/flashlight.rsi/{off-inhand-right.png => inhand-right.png} (100%) delete mode 100644 Resources/Textures/Objects/Tools/flashlight.rsi/on-inhand-left.png delete mode 100644 Resources/Textures/Objects/Tools/flashlight.rsi/on-inhand-right.png create mode 100644 Resources/Textures/Objects/Tools/seclite.rsi/inhand-left-light.png rename Resources/Textures/Objects/Tools/seclite.rsi/{off-inhand-left.png => inhand-left.png} (100%) create mode 100644 Resources/Textures/Objects/Tools/seclite.rsi/inhand-right-light.png rename Resources/Textures/Objects/Tools/seclite.rsi/{off-inhand-right.png => inhand-right.png} (100%) delete mode 100644 Resources/Textures/Objects/Tools/seclite.rsi/on-inhand-left.png delete mode 100644 Resources/Textures/Objects/Tools/seclite.rsi/on-inhand-right.png diff --git a/Content.Client/Light/Components/HandheldLightComponent.cs b/Content.Client/Light/Components/HandheldLightComponent.cs index eac211e864..448179e99a 100644 --- a/Content.Client/Light/Components/HandheldLightComponent.cs +++ b/Content.Client/Light/Components/HandheldLightComponent.cs @@ -1,4 +1,5 @@ using Content.Client.Items.Components; +using Content.Shared.Hands.Components; using Content.Shared.Light.Component; using Robust.Client.Graphics; using Robust.Client.UserInterface; @@ -6,9 +7,11 @@ using Robust.Client.UserInterface.Controls; using Robust.Shared.Analyzers; using Robust.Shared.GameObjects; using Robust.Shared.Maths; +using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.Timing; -using Robust.Shared.ViewVariables; +using System.Collections.Generic; using static Robust.Client.UserInterface.Controls.BoxContainer; +using static Robust.Shared.GameObjects.SharedSpriteComponent; namespace Content.Client.Light.Components { @@ -17,6 +20,37 @@ namespace Content.Client.Light.Components public sealed class HandheldLightComponent : SharedHandheldLightComponent, IItemStatus { public byte? Level; + public bool Activated; + + /// + /// Whether to automatically set item-prefixes when toggling the flashlight. + /// + /// + /// Flashlights should probably be using explicit unshaded sprite, in-hand and clothing layers, this is + /// mostly here for backwards compatibility. + /// + [DataField("addPrefix")] + public bool AddPrefix = false; + + /// + /// Sprite layer that will have it's visibility toggled when this item is toggled. + /// + [DataField("layer")] + public string Layer = "light"; + + /// + /// Layers to add to the sprite of the player that is holding this entity. + /// + [DataField("inhandVisuals")] + public Dictionary> InhandVisuals = new(); + + /// + /// Layers to add to the sprite of the player that is wearing this entity. + /// + [DataField("clothingVisuals")] + public readonly Dictionary> ClothingVisuals = new(); + + public Color Color { get; internal set; } public Control MakeControl() { diff --git a/Content.Client/Light/HandheldLightSystem.cs b/Content.Client/Light/HandheldLightSystem.cs index ee1b3b6bc4..fdb2899db0 100644 --- a/Content.Client/Light/HandheldLightSystem.cs +++ b/Content.Client/Light/HandheldLightSystem.cs @@ -1,16 +1,77 @@ +using Content.Client.Clothing; +using Content.Client.Items.Systems; using Content.Client.Light.Components; +using Content.Shared.Clothing; +using Content.Shared.Hands; +using Content.Shared.Item; using Content.Shared.Light.Component; -using Robust.Shared.GameObjects; +using Robust.Client.GameObjects; using Robust.Shared.GameStates; +using System.Linq; namespace Content.Client.Light; public sealed class HandheldLightSystem : EntitySystem { + [Dependency] private readonly ItemSystem _itemSys = default!; + public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnHandleState); + SubscribeLocalEvent(OnGetHeldVisuals, after: new[] { typeof(ItemSystem) } ); + SubscribeLocalEvent(OnGetEquipmentVisuals, after: new[] { typeof(ClothingSystem)}); + } + + /// + /// Add the unshaded light overlays to any clothing sprites. + /// + private void OnGetEquipmentVisuals(EntityUid uid, HandheldLightComponent component, GetEquipmentVisualsEvent args) + { + if (!component.Activated) + return; + + if (!component.ClothingVisuals.TryGetValue(args.Slot, out var layers)) + return; + + var i = 0; + foreach (var layer in layers) + { + var key = layer.MapKeys?.FirstOrDefault(); + if (key == null) + { + key = i == 0 ? $"{args.Slot}-light" : $"{args.Slot}-light-{i}"; + i++; + } + + args.Layers.Add((key, layer)); + } + } + + /// + /// Add the unshaded light overlays to any in-hand sprites. + /// + private void OnGetHeldVisuals(EntityUid uid, HandheldLightComponent component, GetInhandVisualsEvent args) + { + if (!component.Activated) + return; + + if (!component.InhandVisuals.TryGetValue(args.Location, out var layers)) + return; + + var i = 0; + var defaultKey = $"inhand-{args.Location.ToString().ToLowerInvariant()}-light"; + foreach (var layer in layers) + { + var key = layer.MapKeys?.FirstOrDefault(); + if (key == null) + { + key = i == 0 ? defaultKey : $"{defaultKey}-{i}"; + i++; + } + + args.Layers.Add((key, layer)); + } } private void OnHandleState(EntityUid uid, HandheldLightComponent component, ref ComponentHandleState args) @@ -19,5 +80,26 @@ public sealed class HandheldLightSystem : EntitySystem return; component.Level = state.Charge; + + if (state.Activated == component.Activated) + return; + + component.Activated = state.Activated; + _itemSys.VisualsChanged(uid); + + if (TryComp(component.Owner, out SpriteComponent? sprite)) + { + sprite.LayerSetVisible(component.Layer, state.Activated); + } + + if (TryComp(uid, out PointLightComponent? light)) + { + light.Enabled = state.Activated; + } + + // really hand-held lights should be using a separate unshaded layer. (see FlashlightVisualizer) + // this prefix stuff is largely for backwards compatibility with RSIs/yamls that have not been updated. + if (component.AddPrefix && TryComp(uid, out SharedItemComponent? item)) + item.EquippedPrefix = state.Activated ? "on" : "off"; } } diff --git a/Content.Client/Light/RgbLightControllerSystem.cs b/Content.Client/Light/RgbLightControllerSystem.cs index 05e846c6d8..e77483bd3e 100644 --- a/Content.Client/Light/RgbLightControllerSystem.cs +++ b/Content.Client/Light/RgbLightControllerSystem.cs @@ -1,20 +1,21 @@ -using System; using System.Linq; -using Content.Shared.Item; +using Content.Client.Items.Systems; +using Content.Shared.Clothing; +using Content.Shared.Hands; +using Content.Shared.Inventory.Events; using Content.Shared.Light; using Content.Shared.Light.Component; using Robust.Client.GameObjects; -using Robust.Shared.GameObjects; using Robust.Shared.GameStates; -using Robust.Shared.IoC; -using Robust.Shared.Maths; using Robust.Shared.Timing; +using static Robust.Client.GameObjects.SpriteComponent; namespace Content.Client.Light { public sealed class RgbLightControllerSystem : SharedRgbLightControllerSystem { [Dependency] private IGameTiming _gameTiming = default!; + [Dependency] private ItemSystem _itemSystem = default!; public override void Initialize() { @@ -23,77 +24,137 @@ namespace Content.Client.Light SubscribeLocalEvent(OnHandleState); SubscribeLocalEvent(OnComponentShutdown); SubscribeLocalEvent(OnComponentStart); + + SubscribeLocalEvent(OnGotUnequipped); + + SubscribeLocalEvent(OnEquipmentVisualsUpdated); + SubscribeLocalEvent(OnHeldVisualsUpdated); } private void OnComponentStart(EntityUid uid, RgbLightControllerComponent rgb, ComponentStartup args) { - if (TryComp(uid, out PointLightComponent? light)) - rgb.OriginalLightColor = light.Color; + GetOriginalColors(uid, rgb); - if (TryComp(uid, out SharedItemComponent? item)) - rgb.OriginalItemColor = item.Color; - - GetOriginalSpriteColors(uid, rgb); + // trigger visuals updated events + _itemSystem.VisualsChanged(uid); } private void OnComponentShutdown(EntityUid uid, RgbLightControllerComponent rgb, ComponentShutdown args) { - if (TryComp(uid, out PointLightComponent? light)) - light.Color = rgb.OriginalLightColor; + ResetOriginalColors(uid, rgb); - if (TryComp(uid, out SharedItemComponent? item)) - item.Color = rgb.OriginalItemColor; - - ResetSpriteColors(uid, rgb); + // and reset any in-hands or clothing sprites + _itemSystem.VisualsChanged(uid); } + private void OnGotUnequipped(EntityUid uid, RgbLightControllerComponent rgb, GotUnequippedEvent args) + { + rgb.Holder = null; + rgb.HolderLayers = null; + } + + private void OnHeldVisualsUpdated(EntityUid uid, RgbLightControllerComponent rgb, HeldVisualsUpdatedEvent args) + { + if (args.RevealedLayers.Count == 0) + { + rgb.Holder = null; + rgb.HolderLayers = null; + return; + } + + rgb.Holder = args.User; + rgb.HolderLayers = new(); + + if (!TryComp(args.User, out SpriteComponent? sprite)) + return; + + foreach (var key in args.RevealedLayers) + { + if (!sprite.LayerMapTryGet(key, out var index) || sprite[index] is not Layer layer) + continue; + + if (layer.ShaderPrototype == "unshaded") + rgb.HolderLayers.Add(key); + } + } + + private void OnEquipmentVisualsUpdated(EntityUid uid, RgbLightControllerComponent rgb, EquipmentVisualsUpdatedEvent args) + { + rgb.Holder = args.Equipee; + rgb.HolderLayers = new(); + + if (!TryComp(args.Equipee, out SpriteComponent? sprite)) + return; + + foreach (var key in args.RevealedLayers) + { + if (!sprite.LayerMapTryGet(key, out var index) || sprite[index] is not Layer layer) + continue; + + if (layer.ShaderPrototype == "unshaded") + rgb.HolderLayers.Add(key); + } + } private void OnHandleState(EntityUid uid, RgbLightControllerComponent rgb, ref ComponentHandleState args) { if (args.Current is not RgbLightControllerState state) return; - ResetSpriteColors(uid, rgb); + ResetOriginalColors(uid, rgb); rgb.CycleRate = state.CycleRate; rgb.Layers = state.Layers; + GetOriginalColors(uid, rgb); - // get the new original sprite colors (necessary if rgb.Layers was updated). - GetOriginalSpriteColors(uid, rgb); } - private void GetOriginalSpriteColors(EntityUid uid, RgbLightControllerComponent? rgb = null, SpriteComponent? sprite = null) + private void GetOriginalColors(EntityUid uid, RgbLightControllerComponent? rgb = null, PointLightComponent? light = null, SpriteComponent? sprite = null) { - if (!Resolve(uid, ref rgb, ref sprite)) + if (!Resolve(uid, ref rgb, ref sprite, ref light)) return; + rgb.OriginalLightColor = light.Color; + rgb.OriginalLayerColors = new(); + + var layerCount = sprite.AllLayers.Count(); + + // if layers is null, get unshaded layers if (rgb.Layers == null) { - rgb.OriginalSpriteColor = sprite.Color; - rgb.OriginalLayerColors = null; + rgb.Layers = new(); + + for (var i = 0; i < layerCount; i++) + { + if (sprite[i] is Layer layer && layer.ShaderPrototype == "unshaded") + { + rgb.Layers.Add(i); + rgb.OriginalLayerColors[i] = layer.Color; + } + } return; } - var spriteLayerCount = sprite.AllLayers.Count(); - rgb.OriginalLayerColors = new(rgb.Layers.Count); - - foreach (var layer in rgb.Layers.ToArray()) + foreach (var index in rgb.Layers.ToArray()) { - if (layer < spriteLayerCount) - rgb.OriginalLayerColors[layer] = sprite[layer].Color; + if (index < layerCount) + rgb.OriginalLayerColors[index] = sprite[index].Color; else - rgb.Layers.Remove(layer); + { + // admeme fuck-ups or bad yaml? + Logger.Warning($"RGB light attempted to use invalid sprite index {index} on entity {ToPrettyString(uid)}"); + rgb.Layers.Remove(index); + } } } - private void ResetSpriteColors(EntityUid uid, RgbLightControllerComponent? rgb = null, SpriteComponent? sprite = null) + private void ResetOriginalColors(EntityUid uid, RgbLightControllerComponent? rgb = null, PointLightComponent? light = null, SpriteComponent? sprite = null) { - if (!Resolve(uid, ref rgb, ref sprite)) + if (!Resolve(uid, ref rgb, ref sprite, ref light)) return; + light.Color = rgb.OriginalLightColor; + if (rgb.Layers == null || rgb.OriginalLayerColors == null) - { - sprite.Color = rgb.OriginalSpriteColor; return; - } foreach (var (layer, color) in rgb.OriginalLayerColors) { @@ -109,9 +170,7 @@ namespace Content.Client.Light light.Color = color; - if (rgb.Layers == null) - sprite.Color = color; - else + if (rgb.Layers != null) { foreach (var layer in rgb.Layers) { @@ -119,9 +178,14 @@ namespace Content.Client.Light } } - // not all rgb is hand-held (Hence, not part of EntityQuery) - if (TryComp(rgb.Owner, out SharedItemComponent? item)) - item.Color = color; + // is the entity being held by someone? + if (rgb.HolderLayers == null || !TryComp(rgb.Holder, out SpriteComponent? holderSprite)) + continue; + + foreach (var layer in rgb.HolderLayers) + { + holderSprite.LayerSetColor(layer, color); + } } } diff --git a/Content.Server/Light/EntitySystems/HandheldLightSystem.cs b/Content.Server/Light/EntitySystems/HandheldLightSystem.cs index 2bbcf5770c..e380a14896 100644 --- a/Content.Server/Light/EntitySystems/HandheldLightSystem.cs +++ b/Content.Server/Light/EntitySystems/HandheldLightSystem.cs @@ -5,7 +5,6 @@ using Content.Server.PowerCell; using Content.Shared.Actions; using Content.Shared.Examine; using Content.Shared.Interaction; -using Content.Shared.Item; using Content.Shared.Light.Component; using Content.Shared.Rounding; using Content.Shared.Toggleable; @@ -67,7 +66,7 @@ namespace Content.Server.Light.EntitySystems private void OnGetState(EntityUid uid, HandheldLightComponent component, ref ComponentGetState args) { - args.State = new SharedHandheldLightComponent.HandheldLightComponentState(GetLevel(component)); + args.State = new SharedHandheldLightComponent.HandheldLightComponentState(component.Activated, GetLevel(component)); } private byte? GetLevel(HandheldLightComponent component) @@ -169,8 +168,8 @@ namespace Content.Server.Light.EntitySystems { if (!component.Activated) return false; - SetState(component, false); component.Activated = false; + _actionSystem.SetToggled(component.ToggleAction, false); _activeLights.Remove(component); component.LastLevel = null; component.Dirty(EntityManager); @@ -203,36 +202,15 @@ namespace Content.Server.Light.EntitySystems } component.Activated = true; - SetState(component, true); + _actionSystem.SetToggled(component.ToggleAction, true); _activeLights.Add(component); component.LastLevel = GetLevel(component); - component.Dirty(EntityManager); + Dirty(component); SoundSystem.Play(Filter.Pvs(component.Owner), component.TurnOnSound.GetSound(), component.Owner); return true; } - private void SetState(HandheldLightComponent component, bool on) - { - // TODO: Oh dear - if (EntityManager.TryGetComponent(component.Owner, out SpriteComponent? sprite)) - { - sprite.LayerSetVisible(1, on); - } - - if (EntityManager.TryGetComponent(component.Owner, out PointLightComponent? light)) - { - light.Enabled = on; - } - - if (EntityManager.TryGetComponent(component.Owner, out SharedItemComponent? item)) - { - item.EquippedPrefix = on ? "on" : "off"; - } - - _actionSystem.SetToggled(component.ToggleAction, on); - } - public void TryUpdate(HandheldLightComponent component, float frameTime) { if (!_powerCell.TryGetBatteryFromSlot(component.Owner, out var battery)) diff --git a/Content.Shared/Inventory/InventorySystem.Equip.cs b/Content.Shared/Inventory/InventorySystem.Equip.cs index 9ac83b056b..58b98afd1b 100644 --- a/Content.Shared/Inventory/InventorySystem.Equip.cs +++ b/Content.Shared/Inventory/InventorySystem.Equip.cs @@ -84,9 +84,6 @@ public abstract partial class InventorySystem if(!TryGetSlot(uid, args.Container.ID, out var slotDef, inventory: component)) return; - // un-rotate entities. needed for things like directional flashlights on hardsuit helmets - Transform(args.Entity).LocalRotation = 0; - var equippedEvent = new DidEquipEvent(uid, args.Entity, slotDef); RaiseLocalEvent(uid, equippedEvent); diff --git a/Content.Shared/Light/Component/RgbLightControllerComponent.cs b/Content.Shared/Light/Component/RgbLightControllerComponent.cs index 770269c1b8..6fa65f8130 100644 --- a/Content.Shared/Light/Component/RgbLightControllerComponent.cs +++ b/Content.Shared/Light/Component/RgbLightControllerComponent.cs @@ -6,12 +6,17 @@ using Robust.Shared.Serialization; using Robust.Shared.Serialization.Manager.Attributes; using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; namespace Content.Shared.Light.Component; /// -/// Networked ~~solely for admemes~~ for completely legitimate reasons, like hacked energy swords. +/// Makes the color of lights on an entity fluctuate. Will update point-light color and modulate some or all of the +/// sprite layers. Will also modulate the color of any unshaded layers that this entity contributes to a wearer or holder. /// +/// +/// Networked ~~solely for admemes~~ for completely legitimate reasons, like hacked energy swords. +/// [NetworkedComponent] [RegisterComponent] [Friend(typeof(SharedRgbLightControllerSystem))] @@ -21,23 +26,37 @@ public sealed class RgbLightControllerComponent : Robust.Shared.GameObjects.Comp public float CycleRate { get; set; } = 0.1f; /// - /// What layers of the sprite to modulate? If null, will affect the whole sprite. + /// What layers of the sprite to modulate? If null, will affect only unshaded layers. /// [DataField("layers")] public List? Layers; - // original colors when rgb was added. Used to revert Colors when removed. + /// + /// Original light color from befor the rgb was aded. Used to revert colors when removed. + /// public Color OriginalLightColor; - public Color OriginalItemColor; - public Color OriginalSpriteColor; + + /// + /// Original colors of the sprite layersfrom before the rgb was added. Used to revert colors when removed. + /// public Dictionary? OriginalLayerColors; + + /// + /// User that is holding or wearing this entity + /// + public EntityUid? Holder; + + /// + /// List of unshaded layers on the holder/wearer that are being modulated. + /// + public List? HolderLayers; } [Serializable, NetSerializable] public sealed class RgbLightControllerState : ComponentState { public readonly float CycleRate; - public readonly List? Layers; + public List? Layers; public RgbLightControllerState(float cycleRate, List? layers) { diff --git a/Content.Shared/Light/Component/SharedHandheldLightComponent.cs b/Content.Shared/Light/Component/SharedHandheldLightComponent.cs index 0202cd5a27..0dbf940465 100644 --- a/Content.Shared/Light/Component/SharedHandheldLightComponent.cs +++ b/Content.Shared/Light/Component/SharedHandheldLightComponent.cs @@ -17,8 +17,11 @@ namespace Content.Shared.Light.Component { public byte? Charge { get; } - public HandheldLightComponentState(byte? charge) + public bool Activated { get; } + + public HandheldLightComponentState(bool activated, byte? charge) { + Activated = activated; Charge = charge; } } diff --git a/Content.Shared/Light/SharedRgbLightControllerSystem.cs b/Content.Shared/Light/SharedRgbLightControllerSystem.cs index 32c1fc9841..6f04937c8b 100644 --- a/Content.Shared/Light/SharedRgbLightControllerSystem.cs +++ b/Content.Shared/Light/SharedRgbLightControllerSystem.cs @@ -1,6 +1,7 @@ using Content.Shared.Light.Component; using Robust.Shared.GameObjects; using Robust.Shared.GameStates; +using System; using System.Collections.Generic; namespace Content.Shared.Light; @@ -33,7 +34,7 @@ public abstract class SharedRgbLightControllerSystem : EntitySystem if (!Resolve(uid, ref rgb)) return; - rgb.CycleRate = rate; + rgb.CycleRate = Math.Clamp(0.01f, rate, 1); // lets not give people seizures rgb.Dirty(); } } diff --git a/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml b/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml index 4eab41e436..dba182d8d1 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml @@ -58,20 +58,26 @@ name: base hardsuit helmet with light components: - type: Sprite - netsync: true + netsync: false layers: - state: icon - state: icon-flash visible: false + map: [ "light" ] - type: Clothing HeldPrefix: off - type: PointLight + netsync: false enabled: false - radius: 3 + radius: 6 + energy: 2 + mask: /Textures/Effects/LightMasks/cone.png + autoRot: true - type: Appearance visuals: - type: FlashLightVisualizer - type: HandheldLight + addPrefix: true toggleAction: name: action-name-toggle-light description: action-description-toggle-light diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardhats.yml b/Resources/Prototypes/Entities/Clothing/Head/hardhats.yml index f100c5087e..edbcef7b4c 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardhats.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardhats.yml @@ -10,6 +10,7 @@ - state: light-icon shader: unshaded visible: false + map: [ "light" ] - type: Clothing HeldPrefix: off - type: PointLight @@ -19,6 +20,7 @@ visuals: - type: FlashLightVisualizer - type: HandheldLight + addPrefix: true toggleAction: name: action-name-toggle-light description: action-description-toggle-light diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml index a4038e43bc..d2c05e3bfc 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml @@ -5,9 +5,44 @@ description: A special hardsuit helmet designed for working in low-pressure, high thermal environments. components: - type: Sprite + netsync: false sprite: Clothing/Head/Hardsuits/atmospherics.rsi + layers: + - state: icon + - state: icon-unshaded + shader: unshaded + - state: light-overlay + visible: false + shader: unshaded + map: [ "light" ] + - type: HandheldLight + addPrefix: false + inhandVisuals: + left: + - state: inhand-left-light + shader: unshaded + right: + - state: inhand-right-light + shader: unshaded + clothingVisuals: + head: + - state: equipped-head-light + shader: unshaded - type: Clothing - sprite: Clothing/Head/Hardsuits/atmospherics.rsi + clothingVisuals: + head: + - state: equipped-head + - state: equipped-head-unshaded + shader: unshaded + inhandVisuals: + left: + - state: inhand-left + - state: inhand-left-unshaded + shader: unshaded + right: + - state: inhand-right + - state: inhand-right-unshaded + shader: unshaded - type: entity parent: ClothingHeadHardsuitBase diff --git a/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml b/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml index 8a422b132d..91dec0beb1 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml @@ -5,6 +5,7 @@ abstract: true components: - type: HandheldLight + addPrefix: true toggleAction: name: action-name-toggle-light description: action-description-toggle-light @@ -31,6 +32,7 @@ - state: lamp-on shader: unshaded visible: false + map: [ "light" ] - type: Item sprite: Objects/Misc/Lights/lamp.rsi - type: PointLight @@ -53,6 +55,7 @@ - state: bananalamp_on shader: unshaded visible: false + map: [ "light" ] - type: PointLight enabled: false radius: 3 @@ -74,6 +77,7 @@ - state: lampgreen-on shader: unshaded visible: false + map: [ "light" ] - type: Item sprite: Objects/Misc/Lights/lampgreen.rsi - type: PointLight @@ -96,6 +100,7 @@ - state: floodlight_on shader: unshaded visible: false + map: [ "light" ] - type: Physics - type: Fixtures fixtures: diff --git a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml index ac2ec7e79b..0583ab1326 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml @@ -9,6 +9,14 @@ - Flashlight - DroneUsable - type: HandheldLight + addPrefix: false + inhandVisuals: + left: + - state: inhand-left-light + shader: unshaded + right: + - state: inhand-right-light + shader: unshaded toggleAction: name: action-name-toggle-light description: action-description-toggle-light @@ -26,10 +34,11 @@ - state: flashlight-overlay shader: unshaded visible: false + map: [ "light" ] - type: Item sprite: Objects/Tools/flashlight.rsi - HeldPrefix: off - type: PointLight + netsync: false enabled: false mask: /Textures/Effects/LightMasks/cone.png autoRot: true @@ -47,6 +56,15 @@ - type: PowerCellSlot cellSlot: startingItem: PowerCellSmallSuper + - type: HandheldLight + addPrefix: false + inhandVisuals: + left: + - state: inhand-left-light + shader: unshaded + right: + - state: inhand-right-light + shader: unshaded - type: Sprite sprite: Objects/Tools/seclite.rsi layers: @@ -54,6 +72,7 @@ - state: seclite-overlay shader: unshaded visible: false + map: [ "light" ] - type: Item sprite: Objects/Tools/seclite.rsi - type: PointLight diff --git a/Resources/Prototypes/Entities/Objects/Tools/lantern.yml b/Resources/Prototypes/Entities/Objects/Tools/lantern.yml index 3c96a8f58d..67ea2ae2aa 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/lantern.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/lantern.yml @@ -5,6 +5,7 @@ description: The holy light guides the way. components: - type: HandheldLight + addPrefix: true toggleAction: name: action-name-toggle-light description: action-description-toggle-light @@ -18,10 +19,12 @@ - state: lantern-on shader: unshaded visible: false + map: [ "light" ] - type: Item sprite: Objects/Tools/lantern.rsi HeldPrefix: off - type: PointLight + netsync: false enabled: false radius: 3 energy: 2.5 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-light.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-light.png new file mode 100644 index 0000000000000000000000000000000000000000..9f75f28c05622dede650ae8287d0d7025528a8a5 GIT binary patch literal 5800 zcmaJ_XD}R&)4oIW-plDEx)8mb-b-+L7mn!V)I$g&Iw88#OOR+$6Ez|F=}xZ^y%XV- zzu)(F-r0Hf+1Z)>_Uz8=6RW4IMubm~4*&p&G}M(19$EfB;9@`KDrfH%0Dw#qZfNRj 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-unshaded.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/equipped-head-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..4ba7fc7b745471560057e8afaead7f12ed7b38a6 GIT binary patch literal 3704 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 W)e8Ux>Wi)b0000 zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|ak}M|-{O1%t0w5&8ao7~$8~FH6QPn-&cyA9n?|JGyQHpO%ldtUcyI;L0qI|Wd`#H3GTrV%%x&QOL zr+sYe({oWcV=?BV9P*|_5qI%b$p15SlnHk{XRj&hL=AVQulO!JtDl_rtbOub>~}l8 zyCOunJIE&=-R+4#wbOH%{AN-5So!Tm=Gfxv@5Og!tD5a=cfANaCE?!GV=JeIjsvcw zGfZ$P{uy;WSHo4Y#RXmCNG)Y}+fqp@^<-(Ea;6CrOWs*g<~%c{EKUyj{)S0*hW)@bi+_(!#5f%{@*QlqjWT%1&{0PleS$u-OrA1z*4buXdC@}nFIgH^U2XN9 zHmJ1A<}F)y-EDUR*Nm(fo0wX)X8noUjp{pU=@W9_MlIc_Ib!AX(+||ptooQDxty?L z2E=knKwKRG5IQ?%v8Gb8Bj=dKmJt-3fm&h*XC+4r2$r2PTY6&mf!sH73tWB(xBNBa zf)zg>!@!^G;2j~L z3MCV?x5datd9H;buyJdut6S6Eb#9S?m9|=s7^1wg7e$0j^fU_}-m&$z>i}@RNgNz;EApzjA_Q@p|nNQ0L7*SD+Gstg2T_ZIw$RkcI0Fw&XGyBTrhNl@3w~( z5CJ*K;6^Mv6Rl|y5cP;pkT9-O_>$|fq|s`_lj>$0!jRm($H~RgdTei;0pX0e!Wg06 zc8ga?#~&<_jbI7DCu6y*AwqfBEhcHxl1|2Y&RV=)>JcQwQ@J3eb~j9f9HJlAT`u6I zNa4WgvqMPOs5OJ!YuP3{d2H@d)?R?X6%0;~2xAXm&@e10VHTdHiD62A8ymrgh%eR4;tU)t#bWZF9i^cYt7Bn${`uVOun!hh)JDXf?zJ_xXYx#Q%x)FCrJ-8j_m=r7MtK z+JcYPPN3n$7Y*Y~u?@qpAy{M+Ptloea@-NFc)*8Q)G)bsh*0FFd>LuhQest{~wIOA>;H}HbInL$4-9n|n?_%!ju z!o;N`S|RiJ3^7DSS@%I!zaYrr`-=Uo5^{`#Yv7~`NHEXF7I;1wv`Oa!AGjX=ASbo4 zAqkA*%Yz5BpJ26s-(sU#8V%W}t^hSb9z6IG4kVKGF-e^edJJC(vo*&ANfh1_qzzE* z+Dy`fq;8OSLHvOz7>{grYzQP4U4C#*WY{qAVpeT)e^+e7&!6_tL)2RzIJ?R7Y{nUe z=8-#)X*eeu<1ne75i}1q@4lO5m>NA3;C3jBa|9UyzUYtNCFJ;fa<&lvpXk3Z5d>y6 z2-)8W<15?A#Swh~001gbOjJbx&M#|L8KQzFIdN&hn=M9=h2ga~AU``)shn6xA!(NL zY1{K@^YdR!7Ol4YtpET30d!JMQvg8b*k%9#00Cl4M??UK1szBL000SaNLh0L04^f{ z04^f|c%?sf00007bV*G`2j&431Sd2Ss#Qw>001LNL_t(2&tqU11z5o9GiP?;SFvi( l=~V;_;og95>aHOd5CANS2l-pmQQZIl002ovPDHLkV1g7#qHF*F literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left-light.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-left-light.png new file mode 100644 index 0000000000000000000000000000000000000000..9ee768d5ee07ac75f1edc85f801f65d9d0238b90 GIT binary patch literal 7029 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right-unshaded.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..6c80725c0a713cc64b2b58202b8658a53df41fcc GIT binary patch literal 5960 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 X@15vqC+{2=;9n@cSCg-lH4XhAr?Zik literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/off-inhand-right.png rename to Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/inhand-right.png diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/light-overlay.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/light-overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..5347ab016e2a6fc23ef698009fbab50770c35205 GIT binary patch literal 2583 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 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/atmospherics.rsi/on-inhand-right.png deleted file mode 100644 index 77b15e837d76abe64daa32585940ef35207ce1bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1246 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wkP*5S+ zBgmJ5p-Pp3p`n?9;pcxK{gQ#9)PRBERRRNp)eHs(@%%~gN8K10SW-M)978H@y_p^F z6CEmXpniLah;`TDnH#(t^HRcMH{51me?85BSwgt^!y~UVLUJa?T>4H<7ue65cykCY z7JNK8FlLVOK8Fv!XD+a^9#$w>qIma_#>NsIqiu({xVK$z|28f9*nC~@jL7rT?>w1P zeBRdb{`;Eezt7DN3leEf5tH@QV`^YfVBlcDpeD2^Eo?Zn!8iKGgB4QDKUSSqziOT0 z>YE?BTx5#J^CdIBy!!rKTX@~#x0`3Zd-2LvB6|A`&IR2X`Mow%bKmbb4+~0QdXVwh zn#;knQS;V|FwOmeRmv;NPn?SS%g?_mWZ|n-27eB{(oA4{a_7(Ah!kc9HE+Kkt}62R zl>r=C_1t^!8vgt&zJ3dHWuS5g!v?0M4mTUJSDlOqICn2cnc?%idWIXbb5oAQ2&+ov zvtAe8TA%gb{fueGXW6~Z45<#BA9{c;-^%bBsOQyx zV=!GTms@*BR(?W}l|VA%<6qXBG(p0&t>}M(YX27i{it!^?oAn zKlDwCeEZ}OX99l#v(fa#^8Kb+K_7XeFSUg&@VmWfk&n)%#=SS)_PvYN{Qr2f`F{2} z7r%+9O0nuR{Q0S#K5JbsKl6o{>F&|bMHsjn73S_WUs^G1htxAOuI8_Nk&zrMn)aKt zqyD{)-|lI??83#b#nu{j2bg!LcFm1q$WmEwFz{>Uixz3E#(0P8`MsyD5_F%+r^zmu z+PCiBb>&}`O0J0v*}5$%U2|`_Z43J8zEMb5Wo^m!aF46LYt15l2E=lB=6s&L(Vcg0 zlCcWb0NFq|=vFn%~)<4I7O?8<0?kD`~>gp|?cvrqwchb&X zBeQk2`-R(wn67aLX8n9K$$mxL#Hk`P7M)+=$G560d&>58Z4)nuZHTN{2TUX#JKLP{ z&DFK%AA7u8d~fyk6KrvBDm;I_|FU=TuaM?#irNqA)`T@FKa+BcdH7}JVY9fi^Nww> zIQTX2!g8rkCZV>sG$(chD?UrhFy`K1zHjvm9m|vxkrnLv!QYRa-V;0L^wg7cE9Uzg zo*}35bUU}q>WZbdpE~g6rcSU-~3I$MT2nyN`yYNA7mo{rYZs@a(n?T63-i`!8i;@#N+8eg8P% zoo?FnKc^YQ{@$H?*8T^xv~G*gNlvdv>o-Fp?xfCteg+=Sh3S01+?au76N9I#pUXO@ GgeCwjk21jk diff --git a/Resources/Textures/Objects/Tools/flashlight.rsi/inhand-left-light.png b/Resources/Textures/Objects/Tools/flashlight.rsi/inhand-left-light.png new file mode 100644 index 0000000000000000000000000000000000000000..cb42c3eb65aecec0519701dc406b630a0b828307 GIT binary patch literal 1200 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 S*>VGDD}$%2pUXO@geCxlY=Gnd diff --git a/Resources/Textures/Objects/Tools/flashlight.rsi/on-inhand-right.png b/Resources/Textures/Objects/Tools/flashlight.rsi/on-inhand-right.png deleted file mode 100644 index 812a0186fe9eed8e461a58eec0bd1bd6c2ab9a78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 322 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 UY4tWp0{{R307*qoM6N<$f<}3fk^lez literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/seclite.rsi/off-inhand-right.png b/Resources/Textures/Objects/Tools/seclite.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/Objects/Tools/seclite.rsi/off-inhand-right.png rename to Resources/Textures/Objects/Tools/seclite.rsi/inhand-right.png diff --git a/Resources/Textures/Objects/Tools/seclite.rsi/meta.json b/Resources/Textures/Objects/Tools/seclite.rsi/meta.json index f06d071347..86f25b0b7a 100644 --- a/Resources/Textures/Objects/Tools/seclite.rsi/meta.json +++ b/Resources/Textures/Objects/Tools/seclite.rsi/meta.json @@ -17,19 +17,19 @@ "name": "seclite-overlay" }, { - "name": "off-inhand-left", + "name": "inhand-left", "directions": 4 }, { - "name": "off-inhand-right", + "name": "inhand-right", "directions": 4 }, { - "name": "on-inhand-left", + "name": "inhand-left-light", "directions": 4 }, { - "name": "on-inhand-right", + "name": "inhand-right-light", "directions": 4 }, { diff --git a/Resources/Textures/Objects/Tools/seclite.rsi/on-inhand-left.png b/Resources/Textures/Objects/Tools/seclite.rsi/on-inhand-left.png deleted file mode 100644 index 3bbdfefaf018202b937e860e3ae223aae2556cdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R58 zr;B4q#hkaZ_VzYAh_pOkGMPhBSwW$g^?H-`4y*M{+Y3Z3)D@b!YVJ+FzDZ~9ne){d zAJ0s0IQ!|y?}&uvpDdO_3`HsoPdpe-Ok|j#%&6ebMF8d&JF=OrhGd1$q{pFYW`P$b{f8P2`erfMxiP_(4R_>~2 z3;rBDo8xi+@%KCId6@U?*T`eKq%-4kjYPR@z2*G+_dhwgi|Bpi%=fv=c z=j@xjI($}U&y_!+r}&BM^&f{Y&WSU(`T}{IO!GGi#WVv0rHZjW_s9{$%M3F$fYHI= M>FVdQ&MBb@0ABL3r~m)} diff --git a/Resources/Textures/Objects/Tools/seclite.rsi/on-inhand-right.png b/Resources/Textures/Objects/Tools/seclite.rsi/on-inhand-right.png deleted file mode 100644 index ad27d43a70ec224be35e45f8e3abcca976dcb394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 462 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R4& zr;B4q#hkaZ4Evf51YG}nP1IPpc)^0xoZq-C56&z0pP>DQ^HT7IgPfZrjtWM49AH~h z@xNZw<=lzSM$?qf$~g3~G{|r=SPC%|sW3e8U^p?6VS+NFf;$sXLMJjrTg&Pb@7x0t&l!r=GY2$hFR879|EOYN9=dtbV056g@t?T(XF9AmF{aBhwdW({ll zTjO=C8K@+3+V}65* zJ}I@S>$@iVuWn^@$=;Z{cS8S|&3@igPS_yy##rfC*ul+Dcqeanc+<&WxR3S51cWnj zxqo}ZjWo7-4|NYLW#2Da?GazfGVR-g?Fs80dGi_dY=3NhW4Qt>`QCYjV{fQ?LMH#c zsS}!|X2&+Kullg>qZ3co8nF#a*xw5qUs-TWO?1QY^}<;JkJtX^Y}*lcKgxjv7+x2+ bf3RNRK4N%w!_t$$2x9Pb^>bP0l+XkKb}qhA