forked from space-wizards/space-station-14
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
light refactoring/rework (space-wizards#19314)
Co-authored-by: deltanedas <@deltanedas:kde.org>
- Loading branch information
1 parent
4e51fd4
commit 91cfabd
Showing
44 changed files
with
543 additions
and
546 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,8 @@ | ||
using Content.Shared.Light.Component; | ||
using Robust.Shared.GameObjects; | ||
using Robust.Shared.GameStates; | ||
using Content.Shared.Light.Components; | ||
|
||
namespace Content.Client.Light.Components; | ||
|
||
[RegisterComponent] | ||
[NetworkedComponent] | ||
public sealed partial class EmergencyLightComponent : SharedEmergencyLightComponent | ||
{ | ||
} | ||
|
||
public enum EmergencyLightVisualLayers | ||
{ | ||
Base, | ||
LightOff, | ||
LightOn, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
using Content.Shared.Light; | ||
using Content.Shared.Light.Components; | ||
using Robust.Client.Animations; | ||
using Robust.Client.GameObjects; | ||
using Robust.Shared.Animations; | ||
using Robust.Shared.GameObjects; | ||
using Robust.Shared.GameStates; | ||
using Robust.Shared.Maths; | ||
|
||
namespace Content.Client.Light.Systems; | ||
|
||
public sealed class RotatingLightSystem : SharedRotatingLightSystem | ||
{ | ||
private Animation GetAnimation(float speed) | ||
{ | ||
var third = 120f / speed; | ||
return new Animation() | ||
{ | ||
Length = TimeSpan.FromSeconds(360f / speed), | ||
AnimationTracks = | ||
{ | ||
new AnimationTrackComponentProperty | ||
{ | ||
ComponentType = typeof(PointLightComponent), | ||
InterpolationMode = AnimationInterpolationMode.Linear, | ||
Property = nameof(PointLightComponent.Rotation), | ||
KeyFrames = | ||
{ | ||
new AnimationTrackProperty.KeyFrame(Angle.Zero, 0), | ||
new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(120), third), | ||
new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(240), third), | ||
new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(360), third) | ||
} | ||
} | ||
} | ||
}; | ||
} | ||
|
||
private const string AnimKey = "rotating_light"; | ||
|
||
public override void Initialize() | ||
{ | ||
base.Initialize(); | ||
|
||
SubscribeLocalEvent<RotatingLightComponent, ComponentStartup>(OnStartup); | ||
SubscribeLocalEvent<RotatingLightComponent, AfterAutoHandleStateEvent>(OnAfterAutoHandleState); | ||
SubscribeLocalEvent<RotatingLightComponent, AnimationCompletedEvent>(OnAnimationComplete); | ||
} | ||
|
||
private void OnStartup(EntityUid uid, RotatingLightComponent comp, ComponentStartup args) | ||
{ | ||
var player = EnsureComp<AnimationPlayerComponent>(uid); | ||
PlayAnimation(uid, comp, player); | ||
} | ||
|
||
private void OnAfterAutoHandleState(EntityUid uid, RotatingLightComponent comp, ref AfterAutoHandleStateEvent args) | ||
{ | ||
if (!TryComp<AnimationPlayerComponent>(uid, out var player)) | ||
return; | ||
|
||
if (comp.Enabled) | ||
{ | ||
PlayAnimation(uid, comp, player); | ||
} | ||
else | ||
{ | ||
player.Stop(AnimKey); | ||
} | ||
} | ||
|
||
private void OnAnimationComplete(EntityUid uid, RotatingLightComponent comp, AnimationCompletedEvent args) | ||
{ | ||
PlayAnimation(uid, comp); | ||
} | ||
|
||
/// <summary> | ||
/// Play the light rotation animation. | ||
/// </summary> | ||
public void PlayAnimation(EntityUid uid, RotatingLightComponent? comp = null, AnimationPlayerComponent? player = null) | ||
{ | ||
if (!Resolve(uid, ref comp, ref player) || !comp.Enabled) | ||
return; | ||
|
||
if (!player.HasRunningAnimation(AnimKey)) | ||
{ | ||
player.Play(GetAnimation(comp.Speed), AnimKey); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
96 changes: 46 additions & 50 deletions
96
Content.Server/Light/Components/EmergencyLightComponent.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,62 +1,58 @@ | ||
using Content.Server.Light.EntitySystems; | ||
using Content.Shared.Light.Component; | ||
using Content.Shared.Light.Components; | ||
|
||
namespace Content.Server.Light.Components | ||
namespace Content.Server.Light.Components; | ||
|
||
/// <summary> | ||
/// Component that represents an emergency light, it has an internal battery that charges when the power is on. | ||
/// </summary> | ||
[RegisterComponent, Access(typeof(EmergencyLightSystem))] | ||
public sealed partial class EmergencyLightComponent : SharedEmergencyLightComponent | ||
{ | ||
[ViewVariables] | ||
public EmergencyLightState State; | ||
|
||
/// <summary> | ||
/// Component that represents an emergency light, it has an internal battery that charges when the power is on. | ||
/// Is this emergency light forced on for some reason and cannot be disabled through normal means | ||
/// (i.e. delta alert level?) | ||
/// </summary> | ||
[RegisterComponent, Access(typeof(EmergencyLightSystem))] | ||
public sealed partial class EmergencyLightComponent : SharedEmergencyLightComponent | ||
{ | ||
[ViewVariables] | ||
public EmergencyLightState State; | ||
|
||
/// <summary> | ||
/// Is this emergency light forced on for some reason and cannot be disabled through normal means | ||
/// (i.e. delta alert level?) | ||
/// </summary> | ||
public bool ForciblyEnabled = false; | ||
|
||
[ViewVariables(VVAccess.ReadWrite)] | ||
[DataField("wattage")] | ||
public float Wattage = 5; | ||
|
||
[ViewVariables(VVAccess.ReadWrite)] | ||
[DataField("chargingWattage")] | ||
public float ChargingWattage = 60; | ||
|
||
[ViewVariables(VVAccess.ReadWrite)] | ||
[DataField("chargingEfficiency")] | ||
public float ChargingEfficiency = 0.85f; | ||
|
||
public Dictionary<EmergencyLightState, string> BatteryStateText = new() | ||
{ | ||
{ EmergencyLightState.Full, "emergency-light-component-light-state-full" }, | ||
{ EmergencyLightState.Empty, "emergency-light-component-light-state-empty" }, | ||
{ EmergencyLightState.Charging, "emergency-light-component-light-state-charging" }, | ||
{ EmergencyLightState.On, "emergency-light-component-light-state-on" } | ||
}; | ||
} | ||
public bool ForciblyEnabled = false; | ||
|
||
public enum EmergencyLightState : byte | ||
{ | ||
Charging, | ||
Full, | ||
Empty, | ||
On | ||
} | ||
[ViewVariables(VVAccess.ReadWrite)] | ||
[DataField("wattage")] | ||
public float Wattage = 5; | ||
|
||
[ViewVariables(VVAccess.ReadWrite)] | ||
[DataField("chargingWattage")] | ||
public float ChargingWattage = 60; | ||
|
||
public sealed class EmergencyLightEvent : EntityEventArgs | ||
[ViewVariables(VVAccess.ReadWrite)] | ||
[DataField("chargingEfficiency")] | ||
public float ChargingEfficiency = 0.85f; | ||
|
||
public Dictionary<EmergencyLightState, string> BatteryStateText = new() | ||
{ | ||
public EmergencyLightComponent Component { get; } | ||
{ EmergencyLightState.Full, "emergency-light-component-light-state-full" }, | ||
{ EmergencyLightState.Empty, "emergency-light-component-light-state-empty" }, | ||
{ EmergencyLightState.Charging, "emergency-light-component-light-state-charging" }, | ||
{ EmergencyLightState.On, "emergency-light-component-light-state-on" } | ||
}; | ||
} | ||
|
||
public EmergencyLightState State { get; } | ||
public enum EmergencyLightState : byte | ||
{ | ||
Charging, | ||
Full, | ||
Empty, | ||
On | ||
} | ||
|
||
public EmergencyLightEvent(EmergencyLightComponent component, EmergencyLightState state) | ||
{ | ||
Component = component; | ||
State = state; | ||
} | ||
public sealed class EmergencyLightEvent : EntityEventArgs | ||
{ | ||
public EmergencyLightState State { get; } | ||
|
||
public EmergencyLightEvent(EmergencyLightState state) | ||
{ | ||
State = state; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.