using Robust.Shared.Audio; using Robust.Shared.GameStates; namespace Content.Shared.Item.ItemToggle.Components; /// /// Handles generic item toggles, like a welder turning on and off, or an e-sword. /// /// /// If you need extended functionality (e.g. requiring power) then add a new component and use events: /// ItemToggleActivateAttemptEvent, ItemToggleDeactivateAttemptEvent or ItemToggleForceToggleEvent. /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class ItemToggleComponent : Component { /// /// The item's toggle state. /// [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] public bool Activated = false; /// /// Whether the item's toggle can be predicted by the client. /// /// /// /// If server-side systems affect the item's toggle, like charge/fuel systems, then the item is not predictable. /// [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] public bool Predictable = true; /// /// The noise this item makes when it is toggled on. /// [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] public SoundSpecifier? SoundActivate; /// /// The noise this item makes when it is toggled off. /// [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] public SoundSpecifier? SoundDeactivate; /// /// The noise this item makes when it is toggled on. /// [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] public SoundSpecifier? SoundFailToActivate; } /// /// Raised directed on an entity when its ItemToggle is attempted to be activated. /// [ByRefEvent] public record struct ItemToggleActivateAttemptEvent(EntityUid? User) { public bool Cancelled = false; public readonly EntityUid? User = User; } /// /// Raised directed on an entity when its ItemToggle is attempted to be deactivated. /// [ByRefEvent] public record struct ItemToggleDeactivateAttemptEvent(EntityUid? User) { public bool Cancelled = false; public readonly EntityUid? User = User; } /// /// Raised directed on an entity any sort of toggle is complete. /// [ByRefEvent] public readonly record struct ItemToggledEvent(bool Predicted, bool Activated, EntityUid? User) { public readonly bool Predicted = Predicted; public readonly bool Activated = Activated; public readonly EntityUid? User = User; } /// /// Raised directed on an entity when an itemtoggle is activated. /// [ByRefEvent] public readonly record struct ItemToggleActivatedEvent(EntityUid? User) { public readonly EntityUid? User = User; } /// /// Raised directed on an entity when an itemtoggle is deactivated. /// [ByRefEvent] public readonly record struct ItemToggleDeactivatedEvent(EntityUid? User) { public readonly EntityUid? User = User; }