From 919053c5f1859b3a62b70ba85786557f4e7a2e49 Mon Sep 17 00:00:00 2001 From: Matz05 Date: Tue, 4 Jan 2022 22:25:37 -0700 Subject: [PATCH] Light bulb brightness (and other settings) change clientside PointLights (#5869) Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> --- .../Light/Components/LightBulbComponent.cs | 9 ++++ .../Light/Components/PoweredLightComponent.cs | 6 ++- .../Light/EntitySystems/PoweredLightSystem.cs | 23 ++++----- .../Entities/Objects/Power/lights.yml | 9 ++++ .../Structures/Wallmounts/lighting.yml | 50 ++++++++++++------- 5 files changed, 63 insertions(+), 34 deletions(-) diff --git a/Content.Server/Light/Components/LightBulbComponent.cs b/Content.Server/Light/Components/LightBulbComponent.cs index f632689169..a50a0c49e6 100644 --- a/Content.Server/Light/Components/LightBulbComponent.cs +++ b/Content.Server/Light/Components/LightBulbComponent.cs @@ -29,6 +29,15 @@ namespace Content.Server.Light.Components [DataField("BurningTemperature")] public int BurningTemperature = 1400; + [DataField("lightEnergy")] + public float lightEnergy = 0.8f; + + [DataField("lightRadius")] + public float lightRadius = 10; + + [DataField("lightSoftness")] + public float lightSoftness = 1; + [DataField("PowerUse")] public int PowerUse = 40; diff --git a/Content.Server/Light/Components/PoweredLightComponent.cs b/Content.Server/Light/Components/PoweredLightComponent.cs index 1ecde1882c..99f689e782 100644 --- a/Content.Server/Light/Components/PoweredLightComponent.cs +++ b/Content.Server/Light/Components/PoweredLightComponent.cs @@ -7,6 +7,8 @@ using Robust.Shared.Analyzers; using Robust.Shared.Containers; using Robust.Shared.GameObjects; using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Robust.Shared.Prototypes; using Robust.Shared.ViewVariables; namespace Content.Server.Light.Components @@ -25,8 +27,8 @@ namespace Content.Server.Light.Components [DataField("turnOnSound")] public SoundSpecifier TurnOnSound = new SoundPathSpecifier("/Audio/Machines/light_tube_on.ogg"); - [DataField("hasLampOnSpawn")] - public bool HasLampOnSpawn = true; + [DataField("hasLampOnSpawn", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? HasLampOnSpawn = null; [DataField("bulb")] public LightBulbType BulbType; diff --git a/Content.Server/Light/EntitySystems/PoweredLightSystem.cs b/Content.Server/Light/EntitySystems/PoweredLightSystem.cs index 8ff77a7704..e017f18d31 100644 --- a/Content.Server/Light/EntitySystems/PoweredLightSystem.cs +++ b/Content.Server/Light/EntitySystems/PoweredLightSystem.cs @@ -64,19 +64,11 @@ namespace Content.Server.Light.EntitySystems private void OnMapInit(EntityUid uid, PoweredLightComponent light, MapInitEvent args) { - if (light.HasLampOnSpawn) + if (light.HasLampOnSpawn != null) { - var prototype = light.BulbType switch - { - LightBulbType.Bulb => "LightBulb", - LightBulbType.Tube => "LightTube", - _ => throw new ArgumentOutOfRangeException() - }; - - var entity = EntityManager.SpawnEntity(prototype, EntityManager.GetComponent(light.Owner).Coordinates); + var entity = EntityManager.SpawnEntity(light.HasLampOnSpawn, EntityManager.GetComponent(light.Owner).Coordinates); light.LightBulbContainer.Insert(entity); } - // need this to update visualizers UpdateLight(uid, light); } @@ -158,7 +150,6 @@ namespace Content.Server.Light.EntitySystems return false; UpdateLight(uid, light); - return true; } @@ -260,7 +251,7 @@ namespace Content.Server.Light.EntitySystems case LightBulbState.Normal: if (powerReceiver.Powered && light.On) { - SetLight(uid, true, lightBulb.Color, light); + SetLight(uid, true, lightBulb.Color, light, lightBulb.lightRadius, lightBulb.lightEnergy, lightBulb.lightSoftness); appearance?.SetData(PoweredLightVisuals.BulbState, PoweredLightState.On); var time = _gameTiming.CurTime; if (time > light.LastThunk + ThunkDelay) @@ -363,7 +354,7 @@ namespace Content.Server.Light.EntitySystems SetState(uid, enabled, component); } - private void SetLight(EntityUid uid, bool value, Color? color = null, PoweredLightComponent? light = null) + private void SetLight(EntityUid uid, bool value, Color? color = null, PoweredLightComponent? light = null, float? radius = null, float? energy = null, float? softness=null) { if (!Resolve(uid, ref light)) return; @@ -377,6 +368,12 @@ namespace Content.Server.Light.EntitySystems if (color != null) pointLight.Color = color.Value; + if (radius != null) + pointLight.Radius = (float) radius; + if (energy != null) + pointLight.Energy = (float) energy; + if (softness != null) + pointLight.Softness = (float) softness; } } diff --git a/Resources/Prototypes/Entities/Objects/Power/lights.yml b/Resources/Prototypes/Entities/Objects/Power/lights.yml index 0126e4d101..13ff3f1a74 100644 --- a/Resources/Prototypes/Entities/Objects/Power/lights.yml +++ b/Resources/Prototypes/Entities/Objects/Power/lights.yml @@ -60,6 +60,9 @@ - type: LightBulb bulb: Bulb color: "#FFD1A3" # 4000K color temp + lightEnergy: 1.0 + lightRadius: 6 + lightSoftness: 1.1 - type: Sprite sprite: Objects/Power/light_bulb.rsi state: normal @@ -73,6 +76,9 @@ - type: LightBulb bulb: Tube color: "#FFE4CE" # 5000K color temp + lightEnergy: 0.8 + lightRadius: 10 + lightSoftness: 1 - type: Sprite sprite: Objects/Power/light_tube.rsi state: normal @@ -85,6 +91,9 @@ - type: LightBulb bulb: Tube color: "#EEEEFF" + lightEnergy: 4 + lightRadius: 10 + lightSoftness: 0.9 BurningTemperature: 350 PowerUse: 9 - type: Sprite diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/lighting.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/lighting.yml index d9afd39091..751b2c5693 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/lighting.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/lighting.yml @@ -61,14 +61,14 @@ - type: entity name: light - description: "A powered wall light emitting... light." - id: Poweredlight - suffix: Powered + description: "A light fixture. Draws power and produces light when equipped with a light tube." + id: PoweredlightEmpty + suffix: Empty, Powered parent: WallLight components: - type: Sprite sprite: Structures/Wallmounts/Lighting/light_tube.rsi - state: off + state: empty - type: PointLight enabled: false - type: PoweredLight @@ -88,15 +88,27 @@ path: "/Audio/Machines/light_tube_on.ogg" - type: entity - id: PoweredlightEmpty - description: "A wall light. It's empty." - suffix: Empty, Powered - parent: Poweredlight + id: Poweredlight + description: "A light fixture. Draws power and produces light when equipped with a light tube." + suffix: Powered + parent: PoweredlightEmpty components: - type: Sprite - state: empty + state: off - type: PoweredLight - hasLampOnSpawn: False + hasLampOnSpawn: LightTube + damage: + types: + Heat: 20 + +- type: entity + id: PoweredlightLED + description: "A light fixture. Draws power and produces light when equipped with a light tube." + suffix: LED tube, Powered + parent: Poweredlight + components: + - type: PoweredLight + hasLampOnSpawn: LedLightTube damage: types: Heat: 20 @@ -143,14 +155,14 @@ - type: entity name: small light - description: "A powered wall light emitting... light." - id: PoweredSmallLight - suffix: Powered + description: "A light fixture. Draws power and produces light when equipped with a light bulb." + id: PoweredSmallLightEmpty + suffix: Empty, Powered parent: SmallLight components: - type: Sprite sprite: Structures/Wallmounts/Lighting/light_small.rsi - state: off + state: empty - type: PointLight enabled: false offset: "0, -0.5" @@ -176,14 +188,14 @@ - type: PoweredLightVisualizer - type: entity - id: PoweredSmallLightEmpty - suffix: Empty, Powered - parent: PoweredSmallLight + id: PoweredSmallLight + suffix: Powered + parent: PoweredSmallLightEmpty components: - type: Sprite - state: empty + state: off - type: PoweredLight - hasLampOnSpawn: False + hasLampOnSpawn: LightBulb damage: types: Heat: 20