Skip to content

S07 Gamepad

// This is a simple program to show you how to get input from gamepads
// Use the sticks to move the rectangle around or press a button to change color

using Hybrid;

namespace App
{
    public class s07_gamepad : Hybrid.App
    {
        private float speed = 200;
        private bool pressed;
        private Rect rect;

        public override void OnInitialize()
        {
            rect = new Rect(0, 0, 128, 128);
        }

        public override void OnUpdate()
        {
            pressed = Gamepad.GetButton(0, Button.Back) ||
                      Gamepad.GetButton(0, Button.Start) ||
                      Gamepad.GetButton(0, Button.North) ||
                      Gamepad.GetButton(0, Button.East) ||
                      Gamepad.GetButton(0, Button.South) ||
                      Gamepad.GetButton(0, Button.West) ||
                      Gamepad.GetButton(0, Button.LeftStick) ||
                      Gamepad.GetButton(0, Button.RightStick) ||
                      Gamepad.GetButton(0, Button.LeftShoulder) ||
                      Gamepad.GetButton(0, Button.RightShoulder) ||
                      Gamepad.GetButton(0, Button.DpadUp) ||
                      Gamepad.GetButton(0, Button.DpadDown) ||
                      Gamepad.GetButton(0, Button.DpadLeft) ||
                      Gamepad.GetButton(0, Button.DpadRight) ||
                      Gamepad.GetAxis(0, Axis.LeftTrigger) > 0 ||
                      Gamepad.GetAxis(0, Axis.RightTrigger) > 0;

            rect.x += Gamepad.GetAxis(0, Axis.LeftStickX) * speed * Time.GetDeltaTime();
            rect.x += Gamepad.GetAxis(0, Axis.RightStickX) * speed * Time.GetDeltaTime();
            rect.y -= Gamepad.GetAxis(0, Axis.LeftStickY) * speed * Time.GetDeltaTime();
            rect.y -= Gamepad.GetAxis(0, Axis.RightStickY) * speed * Time.GetDeltaTime();

            rect.x = Maths.Clamp(rect.x, 0, Window.GetWidth() - rect.width);
            rect.y = Maths.Clamp(rect.y, 0, Window.GetHeight() - rect.height);
        }

        public override void OnRender()
        {
            Graphics.DrawBegin(new Color(0, 0, 0));
            Graphics.DrawRectangle(rect, pressed ? new Color(0, 1, 0) : new Color(1, 0, 0));
            Graphics.DrawFps(10, 10, new Color(1, 1, 1));
            Graphics.DrawEnd();
        }
    }