diff --git a/tutorials/inputs/input_examples.rst b/tutorials/inputs/input_examples.rst index db37e1a59..d79be62a0 100644 --- a/tutorials/inputs/input_examples.rst +++ b/tutorials/inputs/input_examples.rst @@ -31,17 +31,34 @@ Examples: .. tabs:: .. code-tab:: gdscript GDScript - # input event - runs when the input happens func _input(event): if event.is_action_pressed("jump"): jump() - # polling - runs every frame func _physics_process(delta): if Input.is_action_pressed("move_right"): - # move as long as the key/button is pressed + # Move as long as the key/button is pressed. position.x += speed * delta + .. code-tab:: csharp + + public override void _Input(InputEvent inputEvent) + { + if (inputEvent.IsActionPressed("jump")) + { + Jump(); + } + } + + public override void _PhysicsProcess(float delta) + { + if (Input.IsActionPressed("move_right")) + { + // Move as long as the key/button is pressed. + position.x += speed * delta; + } + } + This gives you the flexibility to mix-and-match the type of input processing you do. @@ -64,6 +81,13 @@ attach the following script: func _input(event): print(event.as_text()) + .. code-tab:: csharp + + public override void _Input(InputEvent inputEvent) + { + GD.Print(inputEvent.AsText()); + } + As you press keys, move the mouse, and perform other inputs, you'll see each event scroll by in the output window. Here's an example of the output: @@ -102,6 +126,15 @@ avoid this, make sure to test the event type first: if event is InputEventMouseButton: print("mouse button event at ", event.position) + .. code-tab:: csharp + + public override void _Input(InputEvent inputEvent) + { + if (inputEvent is InputEventMouseButton mouseEvent) + { + GD.Print($"mouse button event at {mouseEvent.Position}"); + } + } InputMap -------- @@ -129,6 +162,16 @@ the action you're looking for: if event.is_action_pressed("my_action"): print("my_action occurred!") + .. code-tab:: csharp + + public override void _Input(InputEvent inputEvent) + { + if (inputEvent.IsActionPressed("my_action")) + { + GD.Print("my_action occurred!"); + } + } + Keyboard events --------------- @@ -145,6 +188,19 @@ the "T" key: if event.scancode == KEY_T: print("T was pressed") + .. code-tab:: csharp + + public override void _Input(InputEvent inputEvent) + { + if (inputEvent is InputEventKey keyEvent && keyEvent.Pressed) + { + if ((Keylist)keyEvent.Scancode == KeyList.T) + { + GD.Print("T was pressed"); + } + } + } + .. tip:: See :ref:`@GlobalScope_KeyList ` for a list of scancode constants. @@ -168,6 +224,21 @@ different when it's "Shift+T": else: print("T was pressed") + .. code-tab:: csharp + + public override void _Input(InputEvent inputEvent) + { + if (inputEvent is InputEventKey keyEvent && keyEvent.Pressed) + { + switch ((KeyList)keyEvent.Scancode) + { + case KeyList.T: + GD.Print(keyEvent.Shift ? "Shift+T was pressed" : "T was pressed"); + break; + } + } + } + .. tip:: See :ref:`@GlobalScope_KeyList ` for a list of scancode constants. @@ -198,6 +269,24 @@ also counts as a button - two buttons, to be precise, with both if event.button_index == BUTTON_WHEEL_UP and event.pressed: print("Wheel up") + .. code-tab:: csharp + + public override void _Input(InputEvent inputEvent) + { + if (inputEvent as InputEventMouseButton mouseEvent && mouseEvent.Pressed) + { + switch ((ButtonList)mouseEvent.ButtonIndex) + { + case ButtonList.Left: + GD.Print($"Left button was clicked at {mouseEvent.Position}"); + break; + case ButtonList.WheelUp: + GD.Print("Wheel up"); + break; + } + } + } + Mouse motion ~~~~~~~~~~~~ @@ -230,6 +319,38 @@ node: # While dragging, move the sprite with the mouse. $Sprite.position = event.position + .. code-tab:: csharp + + public override void _Input(InputEvent inputEvent) + { + var sprite = GetNodeOrNull("Sprite"); + if (sprite == null) + return;// No suitable node was found. + + if (inputEvent is InputEventMouseButton mouseEvent && (ButtonList)mouseEvent.ButtonIndex == ButtonList.Left) + { + if ((mouseEvent.Position - sprite.Position).Length() < clickRadius) + { + // Start dragging if the click is on the sprite. + if (!dragging && mouseEvent.Pressed) + dragging = !dragging; + } + // Stop dragging if the button is released. + if (dragging && !mouseEvent.Pressed) + { + dragging = false; + } + } + else + { + if (inputEvent is InputEventMouseMotion motionEvent) + { + // While dragging, move the sprite with the mouse. + sprite.Position = motionEvent.Position; + } + } + } + Touch events ------------