Line 117: |
Line 117: |
| | | |
| ==Input== | | ==Input== |
− | SMAPI's <tt>SButton</tt> constants unify the [https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.buttons.aspx <tt>Buttons</tt>], [https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.keys.aspx <tt>Keys</tt>], [https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.mousestate.aspx <tt>MouseState</tt>], and <tt>InputButton</tt> constants. SMAPI events use this to let you handle controller, keyboard, and mouse input without needing separate code for each. See [[Modding:Key bindings]] for a list of values. | + | SMAPI's <tt>SButton</tt> constants uniquely represent controller, keyboard, and mouse button presses or clicks. See the [[../Input|Input]] page for more info. |
− | | |
− | SMAPI provides extensions to convert any of the other constants to <tt>SButton</tt>:
| |
− | <source lang="c#">
| |
− | SButton key = Keys.A.ToSButton(); // SButton.A
| |
− | SButton button = Buttons.A.ToSButton(); // SButton.ControllerA
| |
− | SButton input = new InputButton(true).ToSButton(); // SButton.MouseLeft
| |
− | </source>
| |
− | | |
− | You can also convert <tt>SButton</tt> to the other constants. This uses a <tt>TryGet</tt> approach since <tt>SButton</tt> is a superset of the others (e.g. you can't convert <tt>SButton.ControllerA</tt> to a keyboard value):
| |
− | <source lang="c#">
| |
− | SButton value = SButton.A;
| |
− | if (value.TryGetKeyboard(out Keys key))
| |
− | ...;
| |
− | if (value.TryGetController(out Buttons button))
| |
− | ...;
| |
− | if (value.TryGetStardewInput(out InputButton input))
| |
− | ...;
| |
− | </source>
| |
− | | |
− | Two last extensions let you check how the button is mapped in the game:
| |
− | <source lang="c#">
| |
− | SButton button = SButton.MouseLeft;
| |
− | if (button.IsUseToolButton())
| |
− | // use tool
| |
− | else if (button.IsActionButton())
| |
− | // perform action
| |
− | </source>
| |
− | | |
− | You can use <tt>SButton</tt> values directly in your [[../Config|config model]], and they'll be represented by their names:
| |
− | {| class="wikitable"
| |
− | | <source lang="c#">
| |
− | internal class ModConfig
| |
− | {
| |
− | public SButton DoThingButton { get; set; } = SButton.LeftControl;
| |
− | }
| |
− | </source>
| |
− | | →
| |
− | | <source lang="json">
| |
− | {
| |
− | "DoThingButton": "LeftControl"
| |
− | }
| |
− | </source>
| |
− | |}
| |
| | | |
| ==Semantic versions== | | ==Semantic versions== |