Update dice state handling (#23643)

* Auto generate dice component state handling, and update data field annotations

* Missed one.
This commit is contained in:
Trevor Day
2024-01-06 17:30:21 -08:00
committed by GitHub
parent 8b107b5a9f
commit 39e59cb77f
2 changed files with 9 additions and 25 deletions

View File

@@ -5,40 +5,33 @@ using Robust.Shared.Serialization;
namespace Content.Shared.Dice; namespace Content.Shared.Dice;
[RegisterComponent, NetworkedComponent, Access(typeof(SharedDiceSystem))] [RegisterComponent, NetworkedComponent, Access(typeof(SharedDiceSystem))]
[AutoGenerateComponentState(true)]
public sealed partial class DiceComponent : Component public sealed partial class DiceComponent : Component
{ {
[DataField("sound")] [DataField]
public SoundSpecifier Sound { get; private set; } = new SoundCollectionSpecifier("Dice"); public SoundSpecifier Sound { get; private set; } = new SoundCollectionSpecifier("Dice");
/// <summary> /// <summary>
/// Multiplier for the value of a die. Applied after the <see cref="Offset"/>. /// Multiplier for the value of a die. Applied after the <see cref="Offset"/>.
/// </summary> /// </summary>
[DataField("multiplier")] [DataField]
public int Multiplier { get; private set; } = 1; public int Multiplier { get; private set; } = 1;
/// <summary> /// <summary>
/// Quantity that is subtracted from the value of a die. Can be used to make dice that start at "0". Applied /// Quantity that is subtracted from the value of a die. Can be used to make dice that start at "0". Applied
/// before the <see cref="Multiplier"/> /// before the <see cref="Multiplier"/>
/// </summary> /// </summary>
[DataField("offset")] [DataField]
public int Offset { get; private set; } = 0; public int Offset { get; private set; } = 0;
[DataField("sides")] [DataField]
public int Sides { get; private set; } = 20; public int Sides { get; private set; } = 20;
/// <summary> /// <summary>
/// The currently displayed value. /// The currently displayed value.
/// </summary> /// </summary>
[DataField("currentValue")] [DataField]
[AutoNetworkedField]
public int CurrentValue { get; set; } = 20; public int CurrentValue { get; set; } = 20;
[Serializable, NetSerializable]
public sealed class DiceState : ComponentState
{
public readonly int CurrentValue;
public DiceState(int value)
{
CurrentValue = value;
}
}
} }

View File

@@ -14,23 +14,14 @@ public abstract class SharedDiceSystem : EntitySystem
SubscribeLocalEvent<DiceComponent, UseInHandEvent>(OnUseInHand); SubscribeLocalEvent<DiceComponent, UseInHandEvent>(OnUseInHand);
SubscribeLocalEvent<DiceComponent, LandEvent>(OnLand); SubscribeLocalEvent<DiceComponent, LandEvent>(OnLand);
SubscribeLocalEvent<DiceComponent, ExaminedEvent>(OnExamined); SubscribeLocalEvent<DiceComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<DiceComponent, ComponentGetState>(OnGetState); SubscribeLocalEvent<DiceComponent, AfterAutoHandleStateEvent>(OnDiceAfterHandleState);
SubscribeLocalEvent<DiceComponent, ComponentHandleState>(OnHandleState);
} }
private void OnHandleState(EntityUid uid, DiceComponent component, ref ComponentHandleState args) private void OnDiceAfterHandleState(EntityUid uid, DiceComponent component, ref AfterAutoHandleStateEvent args)
{ {
if (args.Current is DiceComponent.DiceState state)
component.CurrentValue = state.CurrentValue;
UpdateVisuals(uid, component); UpdateVisuals(uid, component);
} }
private void OnGetState(EntityUid uid, DiceComponent component, ref ComponentGetState args)
{
args.State = new DiceComponent.DiceState(component.CurrentValue);
}
private void OnUseInHand(EntityUid uid, DiceComponent component, UseInHandEvent args) private void OnUseInHand(EntityUid uid, DiceComponent component, UseInHandEvent args)
{ {
if (args.Handled) if (args.Handled)