Input

Input这个静态类型用来提供输入功能。基本的输入系统并不是基于事件绑定的,而是采用轮询的方式。这部分内容比较直观,一般来说看函数名就知道用法,但也会有几个坑。

Key Reading

There's a number of useful methods that detect keys being pressed down in different ways, all seeming to return a 'bool'. Most common are IsKeyDown, IsKeyPressed and IsKeyReleased

You can call them like so: Input.IsKeyDown(InputKey.TheKeyCode). See here for a list of all keycodes: link

You can also use the extension methods IsDown/IsPressed/IsReleased as such KeyCode.A.IsPressed()

Below, you may find an in-depth documentation of each.

Namespace

This page assumes an import like so: using TaleWorlds.InputSystem;

public static bool Input.IsKeyDown(InputKey key)

This checks to see if the specified [key] is currently being pressed, it returns true as long as the [key] is held down.

Example:

   if(Input.IsKeyDown(InputKey.Y))
   {

       //doSomething

   }

public static bool Input.IsKeyDownImmediate(InputKey key)

This acts as an intermediary check between IsKeyDown and IsKeyPressed

Example:

    if(Input.IsKeyDownImmediate(InputKey.Y))
    {

        //doSomething

    }

public static bool Input.IsKeyPressed(InputKey key)

This checks to see if the specified [key] has been pressed, it returns a bool once.

Example:

    if(Input.IsKeyPressed(InputKey.Y))
    {

        //doSomething

    }

public static bool Input.IsKeyReleased(InputKey key)

This checks to see if the specified [key] is not currently being pressed, it returns a bool once.

Example:

    if(Input.IsKeyReleased(InputKey.Y))
    {

        //doSomething

    }

To see how one could document the stages of a key using the above 3 methods: example

public static bool Input.IsControlOrShiftNotDown()

I do not believe there is any other method more self-explanatory than this. Returns true while neither Control or Shift are down.

public static bool Input.IsPressed(InputKey key)

Checks to see if a they specified [key] is currently pressed. Unlike IsDown, it can be used as Input.IsPressed() but not as an extension.

public static Vector2 Input.GetKeyState(InputKey key)

Checks and returns the current state of the specified [key] as a Vector2. I am not aware how this can be used.

Example:

  using System.Numerics; // WARNING, this assumes the existance of System.Numerics.Vectors.dll,
                         // which has to be installed manually.
  using Taleworlds.InputSystem;

  Vector2 test = new Vector2(Input.GetKeyState(InputKey.A));

  Vector2 compare = new Vector2(10, 10);

  if (Equals(test, compare))
    InformationManager.DisplayMessage(new InformationMessage("Help please I'm forced to write this doc!"));

public static string Input.GetKeyboardText()

Returns the text currently existing in the user's clipboard as a string.

public static bool Input.IsMouseActive

Checks to see if the mouse is currently active, if so returns true.

public static bool Input.IsMouseScrollChanged

Checks to see if the mouse scroll wheel is currently rotating, if so returns true.

public static float Input.MouseMoveX

Returns the horizontal position of the mouse as a float.

public static float Input.MouseMoveY

Returns the vertical position of the mouse as a float.

Examples

Monitoring a key's state

  protected override void OnApplicationTick(float dt)
  {
    int x = 0;
    int y = 0;
    int z = 0;
    //If X has been pressed, increment x by 1
    if(Input.IsKeyPressed(InputKey.X))
      x++;
    //For each tick that X is being held down, increment y by 1
    if(Input.IsKeyDown(InputKey.X))
      y++;
    //For each tick that X is untouched, increment z by 1
    if(Input.IsKeyReleased(InputKey.X))
      z++;
  }

Key Codes

As of Bannerlord 1.2.1 the following key codes are available:

public enum InputKey
{
    Invalid,
    Escape,
    D1,
    D2,
    D3,
    D4,
    D5,
    D6,
    D7,
    D8,
    D9,
    D0,
    Minus,
    Equals,
    BackSpace,
    Tab,
    Q,
    W,
    E,
    R,
    T,
    Y,
    U,
    I,
    O,
    P,
    OpenBraces,
    CloseBraces,
    Enter,
    LeftControl,
    A,
    S,
    D,
    F,
    G,
    H,
    J,
    K,
    L,
    SemiColon,
    Apostrophe,
    Tilde,
    LeftShift,
    BackSlash,
    Z,
    X,
    C,
    V,
    B,
    N,
    M,
    Comma,
    Period,
    Slash,
    RightShift,
    NumpadMultiply,
    LeftAlt,
    Space,
    CapsLock,
    F1,
    F2,
    F3,
    F4,
    F5,
    F6,
    F7,
    F8,
    F9,
    F10,
    Numpad7,
    Numpad8,
    Numpad9,
    NumpadMinus,
    Numpad4,
    Numpad5,
    Numpad6,
    NumpadPlus,
    Numpad1,
    Numpad2,
    Numpad3,
    Numpad0,
    NumpadPeriod,
    Extended,
    F11,
    F12,
    NumpadEnter,
    RightControl,
    NumpadSlash,
    RightAlt,
    NumLock,
    Home,
    Up,
    PageUp,
    Left,
    Right,
    End,
    Down,
    PageDown,
    Insert,
    Delete,
    ControllerLStick,
    ControllerRStick,
    LeftMouseButton,
    RightMouseButton,
    MiddleMouseButton,
    X1MouseButton,
    X2MouseButton,
    MouseScrollUp,
    MouseScrollDown,
    ControllerLStickUp,
    ControllerLStickDown,
    ControllerLStickLeft,
    ControllerLStickRight,
    ControllerRStickUp,
    ControllerRStickDown,
    ControllerRStickLeft,
    ControllerRStickRight,
    ControllerLUp,
    ControllerLDown,
    ControllerLLeft,
    ControllerLRight,
    ControllerRUp,
    ControllerRDown,
    ControllerRLeft,
    ControllerRRight,
    ControllerLBumper,
    ControllerRBumper,
    ControllerLOption,
    ControllerROption,
    ControllerLThumb,
    ControllerRThumb,
    ControllerLTrigger,
    ControllerRTrigger,
}

Last updated