Power works with Anchorable (#1240)

Co-authored-by: py01 <pyronetics01@gmail.com>
This commit is contained in:
py01
2020-07-02 04:02:29 -06:00
committed by GitHub
parent 7291c318e4
commit 7b17698336
9 changed files with 118 additions and 8 deletions

View File

@@ -39,6 +39,13 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
public IPowerProvider Provider { get => _provider; set => SetProvider(value); }
private IPowerProvider _provider = PowerProviderComponent.NullProvider;
/// <summary>
/// If this should be considered for connection by <see cref="PowerProviderComponent"/>s.
/// </summary>
public bool Connectable => Anchored;
private bool Anchored => !Owner.TryGetComponent<PhysicsComponent>(out var physics) || physics.Anchored;
[ViewVariables]
public bool NeedsProvider { get; private set; } = true;
@@ -78,10 +85,19 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
{
TryFindAndSetProvider();
}
if (Owner.TryGetComponent<PhysicsComponent>(out var physics))
{
AnchorUpdate();
physics.AnchoredChanged += AnchorUpdate;
}
}
public override void OnRemove()
{
if (Owner.TryGetComponent<PhysicsComponent>(out var physics))
{
physics.AnchoredChanged -= AnchorUpdate;
}
_provider.RemoveReceiver(this);
base.OnRemove();
}
@@ -184,6 +200,21 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents
appearance.SetData(PowerDeviceVisuals.Powered, Powered);
}
}
private void AnchorUpdate()
{
if (Anchored)
{
if (NeedsProvider)
{
TryFindAndSetProvider();
}
}
else
{
ClearProvider();
}
}
}
public class PowerStateEventArgs : EventArgs