Skip to content

Commit

Permalink
light refactoring/rework (space-wizards#19314)
Browse files Browse the repository at this point in the history
Co-authored-by: deltanedas <@deltanedas:kde.org>
  • Loading branch information
deltanedas authored Sep 4, 2023
1 parent 4e51fd4 commit 91cfabd
Show file tree
Hide file tree
Showing 44 changed files with 543 additions and 546 deletions.
2 changes: 1 addition & 1 deletion Content.Client/Guidebook/GuidebookSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
using Content.Client.Light;
using Content.Client.Verbs;
using Content.Shared.Interaction;
using Content.Shared.Light.Component;
using Content.Shared.Light.Components;
using Content.Shared.Speech;
using Content.Shared.Tag;
using Content.Shared.Verbs;
Expand Down
12 changes: 1 addition & 11 deletions Content.Client/Light/Components/EmergencyLightComponent.cs
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,
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Content.Client.Light.EntitySystems;
using Content.Shared.Light.Component;
using Content.Shared.Light.Components;
using Robust.Shared.Audio;

namespace Content.Client.Light.Components;
Expand Down
2 changes: 1 addition & 1 deletion Content.Client/Light/Components/HandheldLightComponent.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Numerics;
using Content.Shared.Light;
using Content.Shared.Light.Component;
using Content.Shared.Light.Components;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
Expand Down
2 changes: 1 addition & 1 deletion Content.Client/Light/Components/LightBehaviourComponent.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System.Linq;
using Content.Shared.Light.Component;
using Content.Shared.Light.Components;
using JetBrains.Annotations;
using Robust.Client.Animations;
using Robust.Client.GameObjects;
Expand Down
89 changes: 0 additions & 89 deletions Content.Client/Light/EmergencyLightSystem.cs

This file was deleted.

2 changes: 1 addition & 1 deletion Content.Client/Light/EntitySystems/EmergencyLightSystem.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Content.Client.Light.Components;
using Content.Shared.Light.Component;
using Content.Shared.Light.Components;
using Robust.Client.GameObjects;

namespace Content.Client.Light.EntitySystems;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Content.Client.Light.Components;
using Content.Shared.Light.Component;
using Content.Shared.Light.Components;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;

Expand Down
2 changes: 1 addition & 1 deletion Content.Client/Light/EntitySystems/LightBulbSystem.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Content.Shared.Light.Component;
using Content.Shared.Light.Components;
using Robust.Client.GameObjects;

namespace Content.Client.Light.Visualizers;
Expand Down
89 changes: 89 additions & 0 deletions Content.Client/Light/EntitySystems/RotatingLightSystem.cs
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);
}
}
}
1 change: 1 addition & 0 deletions Content.Client/Light/HandheldLightSystem.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Content.Client.Items;
using Content.Client.Light.Components;
using Content.Shared.Light;
using Content.Shared.Light.Components;
using Content.Shared.Toggleable;
using Robust.Client.Animations;
using Robust.Client.GameObjects;
Expand Down
2 changes: 1 addition & 1 deletion Content.Client/Light/RgbLightControllerSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
using Content.Shared.Hands;
using Content.Shared.Inventory.Events;
using Content.Shared.Light;
using Content.Shared.Light.Component;
using Content.Shared.Light.Components;
using Robust.Client.GameObjects;
using Robust.Shared.GameStates;
using Robust.Shared.Map.Components;
Expand Down
96 changes: 46 additions & 50 deletions Content.Server/Light/Components/EmergencyLightComponent.cs
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;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Content.Shared.Light.Component;
using Content.Shared.Light.Components;

namespace Content.Server.Light.Components
{
Expand Down
2 changes: 1 addition & 1 deletion Content.Server/Light/Components/LightBehaviourComponent.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Content.Shared.Light.Component;
using Content.Shared.Light.Components;

namespace Content.Server.Light.Components
{
Expand Down
2 changes: 1 addition & 1 deletion Content.Server/Light/Components/PoweredLightComponent.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Content.Server.Light.EntitySystems;
using Content.Shared.Damage;
using Content.Shared.DeviceLinking;
using Content.Shared.Light.Component;
using Content.Shared.Light.Components;
using Robust.Shared.Audio;
using Robust.Shared.Containers;
using Robust.Shared.Prototypes;
Expand Down
Loading

0 comments on commit 91cfabd

Please sign in to comment.