Line 114: |
Line 114: |
| | <tt>DaysSinceStart</tt> | | | <tt>DaysSinceStart</tt> |
| | The number of days since the first day, inclusively (i.e. 01 spring Y1 = 1). | | | The number of days since the first day, inclusively (i.e. 01 spring Y1 = 1). |
| + | |} |
| + | |
| + | ==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 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> |
| |} | | |} |
| | | |