using Robust.Shared.GameObjects; namespace Content.Shared.Actions.Behaviors { /// /// Action which can be toggled on and off /// public interface IToggleAction : IActionBehavior { /// /// 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 SharedActionsComponent, /// this is just an additional level of safety to ensure implementations will always /// explicitly indicate if the toggle status should be changed. bool DoToggleAction(ToggleActionEventArgs args); } public class ToggleActionEventArgs : ActionEventArgs { /// /// True if the toggle is attempting to be toggled on, false if attempting to toggle off /// public readonly bool ToggledOn; /// /// Opposite of ToggledOn /// public bool ToggledOff => !ToggledOn; public ToggleActionEventArgs(IEntity performer, ActionType actionType, bool toggledOn) : base(performer, actionType) { ToggledOn = toggledOn; } } }