Changes

+ SButton docs
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>
 +
| &rarr;
 +
| <source lang="json">
 +
{
 +
  "DoThingButton": "LeftControl"
 +
}
 +
</source>
 
|}
 
|}
  
translators
8,403

edits