Activatable UI component (#5184)
* Transfer most Instrument UI logic to a new component, ActivatableUIComponent * Move more ActivatableUIComponent stuff to ECS * ActivatableUI component ignore on client * ActivatableUI: Get rid of component interfaces where possible * Add in adminOnly attribute for activatable UIs This is so that porting #4926 to this will be easier * Transition Solar Control Computer to ActivatableUI * Move communications console to ActivatableUI * Move cargo console to ActivatableUI * Move ID card console to ActivatableUI * ActivatableUI: Make things more amiable to entity tests adding components weirdly * ActivatableUI: Use handling or lack thereof of events properly * ActivatableUI: component dependency issue resolution stuffs * ActivatableUISystem: Fix #5258 * More fixes because master did stuffo * Check for HandDeselectedEvent again because otherwise active-hand check doesn't work * Move just a bit more code into the system, introduce a workaround for #5258 * Purge the player status detection stuff * Oh and some obsolete stuff too
This commit is contained in:
@@ -1,6 +1,12 @@
|
||||
using System;
|
||||
using Content.Server.Solar.Components;
|
||||
using Content.Server.UserInterface;
|
||||
using Content.Shared.Solar;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Maths;
|
||||
|
||||
namespace Content.Server.Solar.EntitySystems
|
||||
{
|
||||
@@ -10,22 +16,53 @@ namespace Content.Server.Solar.EntitySystems
|
||||
[UsedImplicitly]
|
||||
internal sealed class PowerSolarControlConsoleSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private PowerSolarSystem _powerSolarSystem = default!;
|
||||
|
||||
/// <summary>
|
||||
/// Timer used to avoid updating the UI state every frame (which would be overkill)
|
||||
/// </summary>
|
||||
private float _updateTimer;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<SolarControlConsoleComponent, ServerBoundUserInterfaceMessage>(OnUIMessage);
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
_updateTimer += frameTime;
|
||||
if (_updateTimer >= 1)
|
||||
{
|
||||
_updateTimer -= 1;
|
||||
var state = new SolarControlConsoleBoundInterfaceState(_powerSolarSystem.TargetPanelRotation, _powerSolarSystem.TargetPanelVelocity, _powerSolarSystem.TotalPanelPower, _powerSolarSystem.TowardsSun);
|
||||
foreach (var component in EntityManager.EntityQuery<SolarControlConsoleComponent>())
|
||||
{
|
||||
component.UpdateUIState();
|
||||
component.Owner.GetUIOrNull(SolarControlConsoleUiKey.Key)?.SetState(state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnUIMessage(EntityUid uid, SolarControlConsoleComponent component, ServerBoundUserInterfaceMessage obj)
|
||||
{
|
||||
if (component.Deleted) return;
|
||||
switch (obj.Message)
|
||||
{
|
||||
case SolarControlConsoleAdjustMessage msg:
|
||||
if (double.IsFinite(msg.Rotation))
|
||||
{
|
||||
_powerSolarSystem.TargetPanelRotation = msg.Rotation.Reduced();
|
||||
}
|
||||
if (double.IsFinite(msg.AngularVelocity))
|
||||
{
|
||||
var degrees = msg.AngularVelocity.Degrees;
|
||||
degrees = Math.Clamp(degrees, -PowerSolarSystem.MaxPanelVelocityDegrees, PowerSolarSystem.MaxPanelVelocityDegrees);
|
||||
_powerSolarSystem.TargetPanelVelocity = Angle.FromDegrees(degrees);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user