Fix the flashlight's power bar and status with no battery (#1862)

Co-authored-by: Víctor Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
This commit is contained in:
DrSmugleaf
2020-08-23 13:19:40 +02:00
committed by GitHub
parent a4a25a9975
commit 814daaba4c
3 changed files with 17 additions and 4 deletions

View File

@@ -13,7 +13,10 @@ namespace Content.Client.GameObjects.Components
[RegisterComponent] [RegisterComponent]
public sealed class HandheldLightComponent : SharedHandheldLightComponent, IItemStatus public sealed class HandheldLightComponent : SharedHandheldLightComponent, IItemStatus
{ {
private bool _hasCell;
[ViewVariables] public float? Charge { get; private set; } [ViewVariables] public float? Charge { get; private set; }
[ViewVariables] protected override bool HasCell => _hasCell;
public Control MakeControl() public Control MakeControl()
{ {
@@ -26,6 +29,7 @@ namespace Content.Client.GameObjects.Components
return; return;
Charge = cast.Charge; Charge = cast.Charge;
_hasCell = cast.HasCell;
} }
private sealed class StatusControl : Control private sealed class StatusControl : Control

View File

@@ -53,6 +53,8 @@ namespace Content.Server.GameObjects.Components.Interactable
[ViewVariables] [ViewVariables]
public bool Activated { get; private set; } public bool Activated { get; private set; }
[ViewVariables] protected override bool HasCell => Cell != null;
async Task<bool> IInteractUsing.InteractUsing(InteractUsingEventArgs eventArgs) async Task<bool> IInteractUsing.InteractUsing(InteractUsingEventArgs eventArgs)
{ {
if (!eventArgs.Using.HasComponent<BatteryComponent>()) return false; if (!eventArgs.Using.HasComponent<BatteryComponent>()) return false;
@@ -211,6 +213,8 @@ namespace Content.Server.GameObjects.Components.Interactable
return; return;
} }
Dirty();
if (!user.TryGetComponent(out HandsComponent? hands)) if (!user.TryGetComponent(out HandsComponent? hands))
{ {
return; return;
@@ -229,17 +233,17 @@ namespace Content.Server.GameObjects.Components.Interactable
{ {
if (Cell == null) if (Cell == null)
{ {
return new HandheldLightComponentState(null); return new HandheldLightComponentState(null, false);
} }
if (Wattage > Cell.CurrentCharge) if (Wattage > Cell.CurrentCharge)
{ {
// Practically zero. // Practically zero.
// This is so the item status works correctly. // This is so the item status works correctly.
return new HandheldLightComponentState(0); return new HandheldLightComponentState(0, HasCell);
} }
return new HandheldLightComponentState(Cell.CurrentCharge / Cell.MaxCharge); return new HandheldLightComponentState(Cell.CurrentCharge / Cell.MaxCharge, HasCell);
} }
[Verb] [Verb]

View File

@@ -9,15 +9,20 @@ namespace Content.Shared.GameObjects.Components
public sealed override string Name => "HandheldLight"; public sealed override string Name => "HandheldLight";
public sealed override uint? NetID => ContentNetIDs.HANDHELD_LIGHT; public sealed override uint? NetID => ContentNetIDs.HANDHELD_LIGHT;
protected abstract bool HasCell { get; }
[Serializable, NetSerializable] [Serializable, NetSerializable]
protected sealed class HandheldLightComponentState : ComponentState protected sealed class HandheldLightComponentState : ComponentState
{ {
public HandheldLightComponentState(float? charge) : base(ContentNetIDs.HANDHELD_LIGHT) public HandheldLightComponentState(float? charge, bool hasCell) : base(ContentNetIDs.HANDHELD_LIGHT)
{ {
Charge = charge; Charge = charge;
HasCell = hasCell;
} }
public float? Charge { get; } public float? Charge { get; }
public bool HasCell { get; }
} }
} }
} }