using Robust.Shared.Interfaces.GameObjects; namespace Content.Shared.Actions { /// /// Item action which can be toggled on and off /// public interface IToggleItemAction : IItemActionBehavior { /// /// Invoked when the action will be toggled on/off. /// Implementation should perform the server side logic of whatever /// happens when it is toggled on / off. /// /// true if the attempt to toggle was successful, meaning the state should be toggled to the desired value. /// False to leave toggle status unchanged. This is NOT returning the new toggle status, it is only returning /// whether the attempt to toggle to the indicated status was successful. /// /// Note that it's still okay if the implementation directly modifies toggle status via ItemActionsComponent, /// this is just an additional level of safety to ensure implementations will always /// explicitly indicate if the toggle status should be changed. bool DoToggleAction(ToggleItemActionEventArgs args); } public class ToggleItemActionEventArgs : ItemActionEventArgs { /// /// True if the toggle was toggled on, false if it was toggled off /// public readonly bool ToggledOn; /// /// Opposite of ToggledOn /// public bool ToggledOff => !ToggledOn; public ToggleItemActionEventArgs(IEntity performer, bool toggledOn, IEntity item, ItemActionType actionType) : base(performer, item, actionType) { ToggledOn = toggledOn; } } }