|
@@ -0,0 +1,1129 @@
|
|
|
|
+#+build windows
|
|
|
|
+/*
|
|
|
|
+ Bindings for Windows Game Input GDK:
|
|
|
|
+ https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/input/overviews/input-overview
|
|
|
|
+
|
|
|
|
+ Windows SDK 10.0.26100.0 is at least required to link with.
|
|
|
|
+*/
|
|
|
|
+package windows_game_input
|
|
|
|
+
|
|
|
|
+foreign import wgi {
|
|
|
|
+ "system:gameinput.lib",
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+import "core:c"
|
|
|
|
+import "core:sys/windows"
|
|
|
|
+
|
|
|
|
+// Enums
|
|
|
|
+GameInputArcadeStickButtons_Flag :: enum c.int {
|
|
|
|
+ Menu = 0,
|
|
|
|
+ View = 1,
|
|
|
|
+ Up = 2,
|
|
|
|
+ Down = 3,
|
|
|
|
+ Left = 4,
|
|
|
|
+ Right = 5,
|
|
|
|
+ Action1 = 6,
|
|
|
|
+ Action2 = 7,
|
|
|
|
+ Action3 = 8,
|
|
|
|
+ Action4 = 9,
|
|
|
|
+ Action5 = 10,
|
|
|
|
+ Action6 = 11,
|
|
|
|
+ Special1 = 12,
|
|
|
|
+ Special2 = 13
|
|
|
|
+}
|
|
|
|
+GameInputArcadeStickButtons :: bit_set[GameInputArcadeStickButtons_Flag; c.int]
|
|
|
|
+
|
|
|
|
+GameInputBatteryStatus :: enum c.int {
|
|
|
|
+ Unknown = -1,
|
|
|
|
+ NotPresent = 0,
|
|
|
|
+ Discharging = 1,
|
|
|
|
+ Idle = 2,
|
|
|
|
+ Charging = 3
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputDeviceCapabilities_Flag :: enum c.int {
|
|
|
|
+ Audio = 0,
|
|
|
|
+ PluginModule = 1,
|
|
|
|
+ PowerOff = 2,
|
|
|
|
+ Synchronization = 3,
|
|
|
|
+ Wireless = 4
|
|
|
|
+}
|
|
|
|
+GameInputDeviceCapabilities :: bit_set[GameInputDeviceCapabilities_Flag; c.int]
|
|
|
|
+
|
|
|
|
+GameInputDeviceFamily :: enum c.int {
|
|
|
|
+ Virtual = -1,
|
|
|
|
+ Aggregate = 0,
|
|
|
|
+ XboxOne = 1,
|
|
|
|
+ Xbox360 = 2,
|
|
|
|
+ Hid = 3,
|
|
|
|
+ I8042 = 4
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputDeviceStatus_Flag :: enum c.int {
|
|
|
|
+ Connected = 0,
|
|
|
|
+ InputEnabled = 1,
|
|
|
|
+ OutputEnabled = 2,
|
|
|
|
+ RawIoEnabled = 3,
|
|
|
|
+ AudioCapture = 4,
|
|
|
|
+ AudioRender = 5,
|
|
|
|
+ Synchronized = 6,
|
|
|
|
+ Wireless = 7,
|
|
|
|
+ UserIdle = 20,
|
|
|
|
+}
|
|
|
|
+GameInputDeviceStatus :: bit_set[GameInputDeviceStatus_Flag; c.int]
|
|
|
|
+
|
|
|
|
+GameInputEnumerationKind :: enum c.int {
|
|
|
|
+ NoEnumeration = 0,
|
|
|
|
+ AsyncEnumeration = 1,
|
|
|
|
+ BlockingEnumeration = 2
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputFeedbackAxes_Flag :: enum c.int {
|
|
|
|
+ LinearX = 0,
|
|
|
|
+ LinearY = 1,
|
|
|
|
+ LinearZ = 2,
|
|
|
|
+ AngularX = 3,
|
|
|
|
+ AngularY = 4,
|
|
|
|
+ AngularZ = 5,
|
|
|
|
+ Normal = 6
|
|
|
|
+}
|
|
|
|
+GameInputFeedbackAxes :: bit_set[GameInputFeedbackAxes_Flag; c.int]
|
|
|
|
+
|
|
|
|
+GameInputFeedbackEffectState :: enum c.int {
|
|
|
|
+ Stopped = 0,
|
|
|
|
+ Running = 1,
|
|
|
|
+ Paused = 2
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputFlightStickButtons_Flag :: enum c.int {
|
|
|
|
+ None = 0,
|
|
|
|
+ Menu = 1,
|
|
|
|
+ View = 2,
|
|
|
|
+ FirePrimary = 3,
|
|
|
|
+ FireSecondary = 4
|
|
|
|
+}
|
|
|
|
+GameInputFlightStickButtons :: bit_set[GameInputFlightStickButtons_Flag; c.int]
|
|
|
|
+
|
|
|
|
+GameInputFocusPolicy_Flag :: enum c.int {
|
|
|
|
+ DisableBackgroundInput = 0,
|
|
|
|
+ ExclusiveForegroundInput = 1,
|
|
|
|
+ DisableBackgroundGuideButton = 2,
|
|
|
|
+ ExclusiveForegroundGuideButton = 3,
|
|
|
|
+ DisableBackgroundShareButton = 4,
|
|
|
|
+ ExclusiveForegroundShareButton = 5
|
|
|
|
+}
|
|
|
|
+GameInputFocusPolicy :: bit_set[GameInputFocusPolicy_Flag; c.int]
|
|
|
|
+
|
|
|
|
+GameInputForceFeedbackEffectKind :: enum c.int {
|
|
|
|
+ Constant = 0,
|
|
|
|
+ Ramp = 1,
|
|
|
|
+ SineWave = 2,
|
|
|
|
+ SquareWave = 3,
|
|
|
|
+ TriangleWave = 4,
|
|
|
|
+ SawtoothUpWave = 5,
|
|
|
|
+ SawtoothDownWave = 6,
|
|
|
|
+ Spring = 7,
|
|
|
|
+ Friction = 8,
|
|
|
|
+ Damper = 9,
|
|
|
|
+ Inertia = 10
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputGamepadButtons_Flag :: enum c.int {
|
|
|
|
+ Menu = 0,
|
|
|
|
+ View = 1,
|
|
|
|
+ A = 2,
|
|
|
|
+ B = 3,
|
|
|
|
+ X = 4,
|
|
|
|
+ Y = 5,
|
|
|
|
+ DPadUp = 6,
|
|
|
|
+ DPadDown = 7,
|
|
|
|
+ DPadLeft = 8,
|
|
|
|
+ DPadRight = 9,
|
|
|
|
+ LeftShoulder = 10,
|
|
|
|
+ RightShoulder = 11,
|
|
|
|
+ LeftThumbstick = 12,
|
|
|
|
+ RightThumbstick = 13
|
|
|
|
+}
|
|
|
|
+GameInputGamepadButtons :: bit_set[GameInputGamepadButtons_Flag; c.int]
|
|
|
|
+
|
|
|
|
+GameInputKeyboardKind :: enum c.int {
|
|
|
|
+ UnknownKeyboard = -1,
|
|
|
|
+ AnsiKeyboard = 0,
|
|
|
|
+ IsoKeyboard = 1,
|
|
|
|
+ KsKeyboard = 2,
|
|
|
|
+ AbntKeyboard = 3,
|
|
|
|
+ JisKeyboard = 4
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputKind_Flag :: enum c.int {
|
|
|
|
+ RawDeviceReport = 0,
|
|
|
|
+ ControllerAxis = 1,
|
|
|
|
+ ControllerButton = 2,
|
|
|
|
+ ControllerSwitch = 3,
|
|
|
|
+ Keyboard = 4,
|
|
|
|
+ Mouse = 5,
|
|
|
|
+ Touch = 8,
|
|
|
|
+ Motion = 12,
|
|
|
|
+ ArcadeStick = 16,
|
|
|
|
+ FlightStick = 17,
|
|
|
|
+ Gamepad = 18,
|
|
|
|
+ RacingWheel = 19,
|
|
|
|
+ UiNavigation = 20
|
|
|
|
+}
|
|
|
|
+GameInputKind :: bit_set[GameInputKind_Flag; c.int]
|
|
|
|
+GameInputKind_Controller : GameInputKind : { .ControllerAxis, .ControllerButton, .ControllerSwitch }
|
|
|
|
+
|
|
|
|
+GameInputLabel :: enum c.int {
|
|
|
|
+ Unknown = -1,
|
|
|
|
+ None = 0,
|
|
|
|
+ XboxGuide = 1,
|
|
|
|
+ XboxBack = 2,
|
|
|
|
+ XboxStart = 3,
|
|
|
|
+ XboxMenu = 4,
|
|
|
|
+ XboxView = 5,
|
|
|
|
+ XboxA = 7,
|
|
|
|
+ XboxB = 8,
|
|
|
|
+ XboxX = 9,
|
|
|
|
+ XboxY = 10,
|
|
|
|
+ XboxDPadUp = 11,
|
|
|
|
+ XboxDPadDown = 12,
|
|
|
|
+ XboxDPadLeft = 13,
|
|
|
|
+ XboxDPadRight = 14,
|
|
|
|
+ XboxLeftShoulder = 15,
|
|
|
|
+ XboxLeftTrigger = 16,
|
|
|
|
+ XboxLeftStickButton = 17,
|
|
|
|
+ XboxRightShoulder = 18,
|
|
|
|
+ XboxRightTrigger = 19,
|
|
|
|
+ XboxRightStickButton = 20,
|
|
|
|
+ XboxPaddle1 = 21,
|
|
|
|
+ XboxPaddle2 = 22,
|
|
|
|
+ XboxPaddle3 = 23,
|
|
|
|
+ XboxPaddle4 = 24,
|
|
|
|
+ LetterA = 25,
|
|
|
|
+ LetterB = 26,
|
|
|
|
+ LetterC = 27,
|
|
|
|
+ LetterD = 28,
|
|
|
|
+ LetterE = 29,
|
|
|
|
+ LetterF = 30,
|
|
|
|
+ LetterG = 31,
|
|
|
|
+ LetterH = 32,
|
|
|
|
+ LetterI = 33,
|
|
|
|
+ LetterJ = 34,
|
|
|
|
+ LetterK = 35,
|
|
|
|
+ LetterL = 36,
|
|
|
|
+ LetterM = 37,
|
|
|
|
+ LetterN = 38,
|
|
|
|
+ LetterO = 39,
|
|
|
|
+ LetterP = 40,
|
|
|
|
+ LetterQ = 41,
|
|
|
|
+ LetterR = 42,
|
|
|
|
+ LetterS = 43,
|
|
|
|
+ LetterT = 44,
|
|
|
|
+ LetterU = 45,
|
|
|
|
+ LetterV = 46,
|
|
|
|
+ LetterW = 47,
|
|
|
|
+ LetterX = 48,
|
|
|
|
+ LetterY = 49,
|
|
|
|
+ LetterZ = 50,
|
|
|
|
+ Number0 = 51,
|
|
|
|
+ Number1 = 52,
|
|
|
|
+ Number2 = 53,
|
|
|
|
+ Number3 = 54,
|
|
|
|
+ Number4 = 55,
|
|
|
|
+ Number5 = 56,
|
|
|
|
+ Number6 = 57,
|
|
|
|
+ Number7 = 58,
|
|
|
|
+ Number8 = 59,
|
|
|
|
+ Number9 = 60,
|
|
|
|
+ ArrowUp = 61,
|
|
|
|
+ ArrowUpRight = 62,
|
|
|
|
+ ArrowRight = 63,
|
|
|
|
+ ArrowDownRight = 64,
|
|
|
|
+ ArrowDown = 65,
|
|
|
|
+ ArrowDownLLeft = 66,
|
|
|
|
+ ArrowLeft = 67,
|
|
|
|
+ ArrowUpLeft = 68,
|
|
|
|
+ ArrowUpDown = 69,
|
|
|
|
+ ArrowLeftRight = 70,
|
|
|
|
+ ArrowUpDownLeftRight = 71,
|
|
|
|
+ ArrowClockwise = 72,
|
|
|
|
+ ArrowCounterClockwise = 73,
|
|
|
|
+ ArrowReturn = 74,
|
|
|
|
+ IconBranding = 75,
|
|
|
|
+ IconHome = 76,
|
|
|
|
+ IconMenu = 77,
|
|
|
|
+ IconCross = 78,
|
|
|
|
+ IconCircle = 79,
|
|
|
|
+ IconSquare = 80,
|
|
|
|
+ IconTriangle = 81,
|
|
|
|
+ IconStar = 82,
|
|
|
|
+ IconDPadUp = 83,
|
|
|
|
+ IconDPadDown = 84,
|
|
|
|
+ IconDPadLeft = 85,
|
|
|
|
+ IconDPadRight = 86,
|
|
|
|
+ IconDialClockwise = 87,
|
|
|
|
+ IconDialCounterClockwise = 88,
|
|
|
|
+ IconSliderLeftRight = 89,
|
|
|
|
+ IconSliderUpDown = 90,
|
|
|
|
+ IconWheelUpDown = 91,
|
|
|
|
+ IconPlus = 92,
|
|
|
|
+ IconMinus = 93,
|
|
|
|
+ IconSuspension = 94,
|
|
|
|
+ Home = 95,
|
|
|
|
+ Guide = 96,
|
|
|
|
+ Mode = 97,
|
|
|
|
+ Select = 98,
|
|
|
|
+ Menu = 99,
|
|
|
|
+ View = 100,
|
|
|
|
+ Back = 101,
|
|
|
|
+ Start = 102,
|
|
|
|
+ Options = 103,
|
|
|
|
+ Share = 104,
|
|
|
|
+ Up = 105,
|
|
|
|
+ Down = 106,
|
|
|
|
+ Left = 107,
|
|
|
|
+ Right = 108,
|
|
|
|
+ LB = 109,
|
|
|
|
+ LT = 110,
|
|
|
|
+ LSB = 111,
|
|
|
|
+ L1 = 112,
|
|
|
|
+ L2 = 113,
|
|
|
|
+ L3 = 114,
|
|
|
|
+ RB = 115,
|
|
|
|
+ RT = 116,
|
|
|
|
+ RSB = 117,
|
|
|
|
+ R1 = 118,
|
|
|
|
+ R2 = 119,
|
|
|
|
+ R3 = 120,
|
|
|
|
+ P1 = 121,
|
|
|
|
+ P2 = 122,
|
|
|
|
+ P3 = 123,
|
|
|
|
+ P4 = 124
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputLocation :: enum c.int {
|
|
|
|
+ Unknown = -1,
|
|
|
|
+ Chassis = 0,
|
|
|
|
+ Display = 1,
|
|
|
|
+ Axis = 2,
|
|
|
|
+ Button = 3,
|
|
|
|
+ Switch = 4,
|
|
|
|
+ Key = 5,
|
|
|
|
+ TouchPad = 6
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputMotionAccuracy :: enum c.int {
|
|
|
|
+ AccuracyUnknown = -1,
|
|
|
|
+ Unavailable = 0,
|
|
|
|
+ Unreliable = 1,
|
|
|
|
+ Approximate = 2,
|
|
|
|
+ Accurate = 3
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputMouseButtons_Flag :: enum c.int {
|
|
|
|
+ LeftButton = 0,
|
|
|
|
+ RightButton = 1,
|
|
|
|
+ MiddleButton = 2,
|
|
|
|
+ Button4 = 3,
|
|
|
|
+ Button5 = 4,
|
|
|
|
+ WheelTiltLeft = 5,
|
|
|
|
+ WheelTiltRight = 6
|
|
|
|
+}
|
|
|
|
+GameInputMouseButtons :: bit_set[GameInputMouseButtons_Flag; c.int]
|
|
|
|
+
|
|
|
|
+GameInputRacingWheelButtons_Flag :: enum c.int {
|
|
|
|
+ Menu = 0,
|
|
|
|
+ View = 1,
|
|
|
|
+ PreviousGear = 2,
|
|
|
|
+ NextGear = 3,
|
|
|
|
+ DpadUp = 4,
|
|
|
|
+ DpadDown = 5,
|
|
|
|
+ DpadLeft = 6,
|
|
|
|
+ DpadRight = 7
|
|
|
|
+}
|
|
|
|
+GameInputRacingWheelButtons :: bit_set[GameInputRacingWheelButtons_Flag; c.int]
|
|
|
|
+
|
|
|
|
+GameInputRawDeviceItemCollectionKind :: enum c.int {
|
|
|
|
+ UnknownItemCollection = -1,
|
|
|
|
+ PhysicalItemCollection = 0,
|
|
|
|
+ ApplicationItemCollection = 1,
|
|
|
|
+ LogicalItemCollection = 2,
|
|
|
|
+ ReportItemCollection = 3,
|
|
|
|
+ NamedArrayItemCollection = 4,
|
|
|
|
+ UsageSwitchItemCollection = 5,
|
|
|
|
+ UsageModifierItemCollection = 6
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputRawDevicePhysicalUnitKind :: enum c.int {
|
|
|
|
+ Unknown = -1,
|
|
|
|
+ None = 0,
|
|
|
|
+ Time = 1,
|
|
|
|
+ Frequency = 2,
|
|
|
|
+ Length = 3,
|
|
|
|
+ Velocity = 4,
|
|
|
|
+ Acceleration = 5,
|
|
|
|
+ Mass = 6,
|
|
|
|
+ Momentum = 7,
|
|
|
|
+ Force = 8,
|
|
|
|
+ Pressure = 9,
|
|
|
|
+ Angle = 10,
|
|
|
|
+ AngularVelocity = 11,
|
|
|
|
+ AngularAcceleration = 12,
|
|
|
|
+ AngularMass = 13,
|
|
|
|
+ AngularMomentum = 14,
|
|
|
|
+ AngularTorque = 15,
|
|
|
|
+ ElectricCurrent = 16,
|
|
|
|
+ ElectricCharge = 17,
|
|
|
|
+ ElectricPotential = 18,
|
|
|
|
+ Energy = 19,
|
|
|
|
+ Power = 20,
|
|
|
|
+ Temperature = 21,
|
|
|
|
+ LuminousIntensity = 22,
|
|
|
|
+ LuminousFlux = 23,
|
|
|
|
+ Illuminance = 24
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputRawDeviceReportItemFlag :: enum c.int {
|
|
|
|
+ ConstantItem = 0,
|
|
|
|
+ ArrayItem = 1,
|
|
|
|
+ RelativeItem = 2,
|
|
|
|
+ WraparoundItem = 3,
|
|
|
|
+ NonlinearItem = 4,
|
|
|
|
+ StableItem = 5,
|
|
|
|
+ NullableItem = 6,
|
|
|
|
+ VolatileItem = 7,
|
|
|
|
+ BufferedItem = 8
|
|
|
|
+}
|
|
|
|
+GameInputRawDeviceReportItemFlags :: bit_set[GameInputRawDeviceReportItemFlag; c.int]
|
|
|
|
+
|
|
|
|
+GameInputRawDeviceReportKind :: enum c.int {
|
|
|
|
+ InputReport = 0,
|
|
|
|
+ OutputReport = 1,
|
|
|
|
+ FeatureReport = 2
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputRumbleMotors_Flag :: enum c.int {
|
|
|
|
+ LowFrequency = 0,
|
|
|
|
+ HighFrequency = 1,
|
|
|
|
+ LeftTrigger = 2,
|
|
|
|
+ RightTrigger = 3
|
|
|
|
+}
|
|
|
|
+GameInputRumbleMotors :: bit_set[GameInputRumbleMotors_Flag; c.int]
|
|
|
|
+
|
|
|
|
+GameInputSwitchKind :: enum c.int {
|
|
|
|
+ UnknownSwitchKind = -1,
|
|
|
|
+ GameInput2WaySwitch = 0,
|
|
|
|
+ GameInput4WaySwitch = 1,
|
|
|
|
+ GameInput8WaySwitch = 2
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputSwitchPosition :: enum c.int {
|
|
|
|
+ Center = 0,
|
|
|
|
+ Up = 1,
|
|
|
|
+ UpRight = 2,
|
|
|
|
+ Right = 3,
|
|
|
|
+ DownRight = 4,
|
|
|
|
+ Down = 5,
|
|
|
|
+ DownLeft = 6,
|
|
|
|
+ Left = 7,
|
|
|
|
+ UpLeft = 8
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputSystemButtons_Flag :: enum c.int {
|
|
|
|
+ Guide = 0,
|
|
|
|
+ Share = 1
|
|
|
|
+}
|
|
|
|
+GameInputSystemButtons :: bit_set[GameInputSystemButtons_Flag; c.int]
|
|
|
|
+
|
|
|
|
+GameInputTouchShape :: enum c.int {
|
|
|
|
+ Unknown = -1,
|
|
|
|
+ Point = 0,
|
|
|
|
+ Shape1DLinear = 1,
|
|
|
|
+ Shape1DRadial = 2,
|
|
|
|
+ Shape1DIrregular = 3,
|
|
|
|
+ Shape2DRectangular = 4,
|
|
|
|
+ Shape2DElliptical = 5,
|
|
|
|
+ Shape2DIrregular = 6
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputUiNavigationButtons_Flag :: enum c.int {
|
|
|
|
+ Menu = 0,
|
|
|
|
+ View = 1,
|
|
|
|
+ Accept = 2,
|
|
|
|
+ Cancel = 3,
|
|
|
|
+ Up = 4,
|
|
|
|
+ Down = 5,
|
|
|
|
+ Left = 6,
|
|
|
|
+ Right = 7,
|
|
|
|
+ Context1 = 8,
|
|
|
|
+ Context2 = 9,
|
|
|
|
+ Context3 = 10,
|
|
|
|
+ Context4 = 11,
|
|
|
|
+ PageUp = 12,
|
|
|
|
+ PageDown = 13,
|
|
|
|
+ PageLeft = 14,
|
|
|
|
+ PageRight = 15,
|
|
|
|
+ ScrollUp = 16,
|
|
|
|
+ ScrollDown = 17,
|
|
|
|
+ ScrollLeft = 18,
|
|
|
|
+ ScrollRight = 19
|
|
|
|
+}
|
|
|
|
+GameInputUiNavigationButtons :: bit_set[GameInputUiNavigationButtons_Flag; c.int]
|
|
|
|
+
|
|
|
|
+// Structs
|
|
|
|
+
|
|
|
|
+APP_LOCAL_DEVICE_ID :: distinct [32]byte
|
|
|
|
+
|
|
|
|
+GameInputArcadeStickInfo :: struct {
|
|
|
|
+ menuButtonLabel: GameInputLabel,
|
|
|
|
+ viewButtonLabel: GameInputLabel,
|
|
|
|
+ stickUpLabel: GameInputLabel,
|
|
|
|
+ stickDownLabel: GameInputLabel,
|
|
|
|
+ stickLeftLabel: GameInputLabel,
|
|
|
|
+ stickRightLabel: GameInputLabel,
|
|
|
|
+ actionButton1Label: GameInputLabel,
|
|
|
|
+ actionButton2Label: GameInputLabel,
|
|
|
|
+ actionButton3Label: GameInputLabel,
|
|
|
|
+ actionButton4Label: GameInputLabel,
|
|
|
|
+ actionButton5Label: GameInputLabel,
|
|
|
|
+ actionButton6Label: GameInputLabel,
|
|
|
|
+ specialButton1Label: GameInputLabel,
|
|
|
|
+ specialButton2Label: GameInputLabel,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputArcadeStickState :: struct {
|
|
|
|
+ buttons: GameInputArcadeStickButtons,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputBatteryState :: struct {
|
|
|
|
+ chargeRate: f32,
|
|
|
|
+ maxChargeRate: f32,
|
|
|
|
+ remainingCapacity: f32,
|
|
|
|
+ fullChargeCapacity: f32,
|
|
|
|
+ status: GameInputBatteryStatus,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputControllerAxisInfo :: struct {
|
|
|
|
+ mappedInputKinds: GameInputKind,
|
|
|
|
+ label: GameInputLabel,
|
|
|
|
+ isContinuous: bool,
|
|
|
|
+ isNonlinear: bool,
|
|
|
|
+ isQuantized: bool,
|
|
|
|
+ hasRestValue: bool,
|
|
|
|
+ restValue: f32,
|
|
|
|
+ resolution: u64,
|
|
|
|
+ legacyDInputIndex: u16,
|
|
|
|
+ legacyHidIndex: u16,
|
|
|
|
+ rawReportIndex: u32,
|
|
|
|
+ inputReport: ^GameInputRawDeviceReportInfo,
|
|
|
|
+ inputReportItem: ^GameInputRawDeviceReportItemInfo,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputControllerButtonInfo :: struct {
|
|
|
|
+ mappedInputKinds: GameInputKind,
|
|
|
|
+ label: GameInputLabel,
|
|
|
|
+ legacyDInputIndex: u16,
|
|
|
|
+ legacyHidIndex: u16,
|
|
|
|
+ rawReportIndex: u32,
|
|
|
|
+ inputReport: ^GameInputRawDeviceReportInfo,
|
|
|
|
+ inputReportItem: ^GameInputRawDeviceReportItemInfo,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputControllerSwitchInfo :: struct {
|
|
|
|
+ mappedInputKinds: GameInputKind,
|
|
|
|
+ label: GameInputLabel,
|
|
|
|
+ positionLabels: [9]GameInputLabel,
|
|
|
|
+ kind: GameInputSwitchKind,
|
|
|
|
+ legacyDInputIndex: u16,
|
|
|
|
+ legacyHidIndex: u16,
|
|
|
|
+ rawReportIndex: u32,
|
|
|
|
+ inputReport: ^GameInputRawDeviceReportInfo,
|
|
|
|
+ inputReportItem: ^GameInputRawDeviceReportItemInfo,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputDeviceInfo :: struct {
|
|
|
|
+ infoSize: u32,
|
|
|
|
+ vendorId: u16,
|
|
|
|
+ productId: u16,
|
|
|
|
+ revisionNumber: u16,
|
|
|
|
+ interfaceNumber: u8,
|
|
|
|
+ collectionNumber: u8,
|
|
|
|
+ usage: GameInputUsage,
|
|
|
|
+ hardwareVersion: GameInputVersion,
|
|
|
|
+ firmwareVersion: GameInputVersion,
|
|
|
|
+ deviceId: APP_LOCAL_DEVICE_ID,
|
|
|
|
+ deviceRootId: APP_LOCAL_DEVICE_ID,
|
|
|
|
+ deviceFamily: GameInputDeviceFamily,
|
|
|
|
+ capabilities: GameInputDeviceCapabilities,
|
|
|
|
+ supportedInput: GameInputKind,
|
|
|
|
+ supportedRumbleMotors: GameInputRumbleMotors,
|
|
|
|
+ inputReportCount: u32,
|
|
|
|
+ outputReportCount: u32,
|
|
|
|
+ featureReportCount: u32,
|
|
|
|
+ controllerAxisCount: u32,
|
|
|
|
+ controllerButtonCount: u32,
|
|
|
|
+ controllerSwitchCount: u32,
|
|
|
|
+ touchPointCount: u32,
|
|
|
|
+ touchSensorCount: u32,
|
|
|
|
+ forceFeedbackMotorCount: u32,
|
|
|
|
+ hapticFeedbackMotorCount: u32,
|
|
|
|
+ deviceStringCount: u32,
|
|
|
|
+ deviceDescriptorSize: u32,
|
|
|
|
+ inputReportInfo: ^GameInputRawDeviceReportInfo,
|
|
|
|
+ outputReportInfo: ^GameInputRawDeviceReportInfo,
|
|
|
|
+ featureReportInfo: ^GameInputRawDeviceReportInfo,
|
|
|
|
+ controllerAxisInfo: ^GameInputControllerAxisInfo,
|
|
|
|
+ controllerButtonInfo: ^GameInputControllerButtonInfo,
|
|
|
|
+ controllerSwitchInfo: ^GameInputControllerSwitchInfo,
|
|
|
|
+ keyboardInfo: ^GameInputKeyboardInfo,
|
|
|
|
+ mouseInfo: ^GameInputMouseInfo,
|
|
|
|
+ touchSensorInfo: ^GameInputTouchSensorInfo,
|
|
|
|
+ motionInfo: ^GameInputMotionInfo,
|
|
|
|
+ arcadeStickInfo: ^GameInputArcadeStickInfo,
|
|
|
|
+ flightStickInfo: ^GameInputFlightStickInfo,
|
|
|
|
+ gamepadInfo: ^GameInputGamepadInfo,
|
|
|
|
+ racingWheelInfo: ^GameInputRacingWheelInfo,
|
|
|
|
+ uiNavigationInfo: ^GameInputUiNavigationInfo,
|
|
|
|
+ forceFeedbackMotorInfo: ^GameInputForceFeedbackMotorInfo,
|
|
|
|
+ hapticFeedbackMotorInfo: ^GameInputHapticFeedbackMotorInfo,
|
|
|
|
+ displayName: ^GameInputString,
|
|
|
|
+ deviceStrings: ^GameInputString,
|
|
|
|
+ deviceDescriptorData: rawptr,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputFlightStickInfo :: struct {
|
|
|
|
+ menuButtonLabel: GameInputLabel,
|
|
|
|
+ viewButtonLabel: GameInputLabel,
|
|
|
|
+ firePrimaryButtonLabel: GameInputLabel,
|
|
|
|
+ fireSecondaryButtonLabel: GameInputLabel,
|
|
|
|
+ hatSwitchKind: GameInputSwitchKind,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputFlightStickState :: struct {
|
|
|
|
+ buttons: GameInputFlightStickButtons,
|
|
|
|
+ hatSwitch: GameInputSwitchPosition,
|
|
|
|
+ roll: f32,
|
|
|
|
+ pitch: f32,
|
|
|
|
+ yaw: f32,
|
|
|
|
+ throttle: f32,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputForceFeedbackConditionParams :: struct {
|
|
|
|
+ magnitude: GameInputForceFeedbackMagnitude,
|
|
|
|
+ positiveCoefficient: f32,
|
|
|
|
+ negativeCoefficient: f32,
|
|
|
|
+ maxPositiveMagnitude: f32,
|
|
|
|
+ maxNegativeMagnitude: f32,
|
|
|
|
+ deadZone: f32,
|
|
|
|
+ bias: f32,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputForceFeedbackConstantParams :: struct {
|
|
|
|
+ envelope: GameInputForceFeedbackEnvelope,
|
|
|
|
+ magnitude: GameInputForceFeedbackMagnitude,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputForceFeedbackEnvelope :: struct {
|
|
|
|
+ attackDuration: u64,
|
|
|
|
+ sustainDuration: u64,
|
|
|
|
+ releaseDuration: u64,
|
|
|
|
+ attackGain: f32,
|
|
|
|
+ sustainGain: f32,
|
|
|
|
+ releaseGain: f32,
|
|
|
|
+ playCount: u32,
|
|
|
|
+ repeatDelay: u64,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputForceFeedbackMagnitude :: struct {
|
|
|
|
+ linearX: f32,
|
|
|
|
+ linearY: f32,
|
|
|
|
+ linearZ: f32,
|
|
|
|
+ angularX: f32,
|
|
|
|
+ angularY: f32,
|
|
|
|
+ angularZ: f32,
|
|
|
|
+ normal: f32,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputForceFeedbackMotorInfo :: struct {
|
|
|
|
+ supportedAxes: GameInputFeedbackAxes,
|
|
|
|
+ location: GameInputLocation,
|
|
|
|
+ locationId: u32,
|
|
|
|
+ maxSimultaneousEffects: u32,
|
|
|
|
+ isConstantEffectSupported: bool,
|
|
|
|
+ isRampEffectSupported: bool,
|
|
|
|
+ isSineWaveEffectSupported: bool,
|
|
|
|
+ isSquareWaveEffectSupported: bool,
|
|
|
|
+ isTriangleWaveEffectSupported: bool,
|
|
|
|
+ isSawtoothUpWaveEffectSupported: bool,
|
|
|
|
+ isSawtoothDownWaveEffectSupported: bool,
|
|
|
|
+ isSpringEffectSupported: bool,
|
|
|
|
+ isFrictionEffectSupported: bool,
|
|
|
|
+ isDamperEffectSupported: bool,
|
|
|
|
+ isInertiaEffectSupported: bool,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputForceFeedbackParams :: struct {
|
|
|
|
+ kind: GameInputForceFeedbackEffectKind,
|
|
|
|
+ using _: struct #raw_union {
|
|
|
|
+ constant: GameInputForceFeedbackConstantParams,
|
|
|
|
+ ramp: GameInputForceFeedbackRampParams,
|
|
|
|
+ sineWave: GameInputForceFeedbackPeriodicParams,
|
|
|
|
+ squareWave: GameInputForceFeedbackPeriodicParams,
|
|
|
|
+ triangleWave: GameInputForceFeedbackPeriodicParams,
|
|
|
|
+ sawtoothUpWave: GameInputForceFeedbackPeriodicParams,
|
|
|
|
+ sawtoothDownWave: GameInputForceFeedbackPeriodicParams,
|
|
|
|
+ spring: GameInputForceFeedbackConditionParams,
|
|
|
|
+ friction: GameInputForceFeedbackConditionParams,
|
|
|
|
+ damper: GameInputForceFeedbackConditionParams,
|
|
|
|
+ inertia: GameInputForceFeedbackConditionParams,
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputForceFeedbackPeriodicParams :: struct {
|
|
|
|
+ envelope: GameInputForceFeedbackEnvelope,
|
|
|
|
+ magnitude: GameInputForceFeedbackMagnitude,
|
|
|
|
+ frequency: f32,
|
|
|
|
+ phase: f32,
|
|
|
|
+ bias: f32,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputForceFeedbackRampParams :: struct {
|
|
|
|
+ envelope: GameInputForceFeedbackEnvelope,
|
|
|
|
+ startMagnitude: GameInputForceFeedbackMagnitude,
|
|
|
|
+ endMagnitude: GameInputForceFeedbackMagnitude,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputGamepadInfo :: struct {
|
|
|
|
+ menuButtonLabel: GameInputLabel,
|
|
|
|
+ viewButtonLabel: GameInputLabel,
|
|
|
|
+ aButtonLabel: GameInputLabel,
|
|
|
|
+ bButtonLabel: GameInputLabel,
|
|
|
|
+ xButtonLabel: GameInputLabel,
|
|
|
|
+ yButtonLabel: GameInputLabel,
|
|
|
|
+ dpadUpLabel: GameInputLabel,
|
|
|
|
+ dpadDownLabel: GameInputLabel,
|
|
|
|
+ dpadLeftLabel: GameInputLabel,
|
|
|
|
+ dpadRightLabel: GameInputLabel,
|
|
|
|
+ leftShoulderButtonLabel: GameInputLabel,
|
|
|
|
+ rightShoulderButtonLabel: GameInputLabel,
|
|
|
|
+ leftThumbstickButtonLabel: GameInputLabel,
|
|
|
|
+ rightThumbstickButtonLabel: GameInputLabel,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputGamepadState :: struct {
|
|
|
|
+ buttons: GameInputGamepadButtons,
|
|
|
|
+ leftTrigger: f32,
|
|
|
|
+ rightTrigger: f32,
|
|
|
|
+ leftThumbstickX: f32,
|
|
|
|
+ leftThumbstickY: f32,
|
|
|
|
+ rightThumbstickX: f32,
|
|
|
|
+ rightThumbstickY: f32,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputHapticFeedbackMotorInfo :: struct {
|
|
|
|
+ mappedRumbleMotor: GameInputRumbleMotors,
|
|
|
|
+ location: GameInputLocation,
|
|
|
|
+ locationId: u32,
|
|
|
|
+ waveformCount: u32,
|
|
|
|
+ waveformInfo: [^]GameInputHapticWaveformInfo,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputHapticFeedbackParams :: struct {
|
|
|
|
+ waveformIndex: u32,
|
|
|
|
+ duration: u64,
|
|
|
|
+ intensity: f32,
|
|
|
|
+ playCount: u32,
|
|
|
|
+ repeatDelay: u64,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputHapticWaveformInfo :: struct {
|
|
|
|
+ usage: GameInputUsage,
|
|
|
|
+ isDurationSupported: bool,
|
|
|
|
+ isIntensitySupported: bool,
|
|
|
|
+ isRepeatSupported: bool,
|
|
|
|
+ isRepeatDelaySupported: bool,
|
|
|
|
+ defaultDuration: u64,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputKeyboardInfo :: struct {
|
|
|
|
+ kind: GameInputKeyboardKind,
|
|
|
|
+ layout: u32,
|
|
|
|
+ keyCount: u32,
|
|
|
|
+ functionKeyCount: u32,
|
|
|
|
+ maxSimultaneousKeys: u32,
|
|
|
|
+ platformType: u32,
|
|
|
|
+ platformSubtype: u32,
|
|
|
|
+ nativeLanguage: ^GameInputString,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputKeyState :: struct {
|
|
|
|
+ scanCode: u32,
|
|
|
|
+ codePoint: u32,
|
|
|
|
+ virtualKey: u8,
|
|
|
|
+ isDeadKey: bool,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputMotionInfo :: struct {
|
|
|
|
+ maxAcceleration: f32,
|
|
|
|
+ maxAngularVelocity: f32,
|
|
|
|
+ maxMagneticFieldStrength: f32,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputMotionState :: struct {
|
|
|
|
+ accelerationX: f32,
|
|
|
|
+ accelerationY: f32,
|
|
|
|
+ accelerationZ: f32,
|
|
|
|
+ angularVelocityX: f32,
|
|
|
|
+ angularVelocityY: f32,
|
|
|
|
+ angularVelocityZ: f32,
|
|
|
|
+ magneticFieldX: f32,
|
|
|
|
+ magneticFieldY: f32,
|
|
|
|
+ magneticFieldZ: f32,
|
|
|
|
+ orientationW: f32,
|
|
|
|
+ orientationX: f32,
|
|
|
|
+ orientationY: f32,
|
|
|
|
+ orientationZ: f32,
|
|
|
|
+ accelerometerAccuracy: GameInputMotionAccuracy,
|
|
|
|
+ gyroscopeAccuracy: GameInputMotionAccuracy,
|
|
|
|
+ magnetometerAccuracy: GameInputMotionAccuracy,
|
|
|
|
+ orientationAccuracy: GameInputMotionAccuracy,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputMouseInfo :: struct {
|
|
|
|
+ supportedButtons: GameInputMouseButtons,
|
|
|
|
+ sampleRate: u32,
|
|
|
|
+ sensorDpi: u32,
|
|
|
|
+ hasWheelX: bool,
|
|
|
|
+ hasWheelY: bool,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputMouseState :: struct {
|
|
|
|
+ buttons: GameInputMouseButtons,
|
|
|
|
+ positionX: i64,
|
|
|
|
+ positionY: i64,
|
|
|
|
+ wheelX: i64,
|
|
|
|
+ wheelY: i64,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputRacingWheelInfo :: struct {
|
|
|
|
+ menuButtonLabel: GameInputLabel,
|
|
|
|
+ viewButtonLabel: GameInputLabel,
|
|
|
|
+ previousGearButtonLabel: GameInputLabel,
|
|
|
|
+ nextGearButtonLabel: GameInputLabel,
|
|
|
|
+ dpadUpLabel: GameInputLabel,
|
|
|
|
+ dpadDownLabel: GameInputLabel,
|
|
|
|
+ dpadLeftLabel: GameInputLabel,
|
|
|
|
+ dpadRightLabel: GameInputLabel,
|
|
|
|
+ hasClutch: bool,
|
|
|
|
+ hasHandbrake: bool,
|
|
|
|
+ hasPatternShifter: bool,
|
|
|
|
+ minPatternShifterGear: i32,
|
|
|
|
+ maxPatternShifterGear: i32,
|
|
|
|
+ maxWheelAngle: f32,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputRacingWheelState :: struct {
|
|
|
|
+ buttons: GameInputRacingWheelButtons,
|
|
|
|
+ patternShifterGear: i32,
|
|
|
|
+ wheel: f32,
|
|
|
|
+ throttle: f32,
|
|
|
|
+ brake: f32,
|
|
|
|
+ clutch: f32,
|
|
|
|
+ handbrake: f32,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputRawDeviceItemCollectionInfo :: struct {
|
|
|
|
+ kind: GameInputRawDeviceItemCollectionKind,
|
|
|
|
+ childCount: u32,
|
|
|
|
+ siblingCount: u32,
|
|
|
|
+ usageCount: u32,
|
|
|
|
+ usages: [^]GameInputUsage,
|
|
|
|
+ parent: ^GameInputRawDeviceItemCollectionInfo,
|
|
|
|
+ firstSibling: ^GameInputRawDeviceItemCollectionInfo,
|
|
|
|
+ previousSibling: ^GameInputRawDeviceItemCollectionInfo,
|
|
|
|
+ nextSibling: ^GameInputRawDeviceItemCollectionInfo,
|
|
|
|
+ lastSibling: ^GameInputRawDeviceItemCollectionInfo,
|
|
|
|
+ firstChild: ^GameInputRawDeviceItemCollectionInfo,
|
|
|
|
+ lastChild: ^GameInputRawDeviceItemCollectionInfo,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputRawDeviceReportInfo :: struct {
|
|
|
|
+ kind: GameInputRawDeviceReportKind,
|
|
|
|
+ id: u32,
|
|
|
|
+ size: u32,
|
|
|
|
+ itemCount: u32,
|
|
|
|
+ items: [^]GameInputRawDeviceReportItemInfo,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputRawDeviceReportItemInfo :: struct {
|
|
|
|
+ bitOffset: u32,
|
|
|
|
+ bitSize: u32,
|
|
|
|
+ logicalMin: i64,
|
|
|
|
+ logicalMax: i64,
|
|
|
|
+ physicalMin: f64,
|
|
|
|
+ physicalMax: f64,
|
|
|
|
+ physicalUnits: GameInputRawDevicePhysicalUnitKind,
|
|
|
|
+ rawPhysicalUnits: u32,
|
|
|
|
+ rawPhysicalUnitsExponent: i32,
|
|
|
|
+ flags: GameInputRawDeviceReportItemFlags,
|
|
|
|
+ usageCount: u32,
|
|
|
|
+ usages: [^]GameInputUsage,
|
|
|
|
+ collection: ^GameInputRawDeviceItemCollectionInfo,
|
|
|
|
+ itemString: ^GameInputString,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputRumbleParams :: struct {
|
|
|
|
+ lowFrequency: f32,
|
|
|
|
+ highFrequency: f32,
|
|
|
|
+ leftTrigger: f32,
|
|
|
|
+ rightTrigger: f32,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputString :: struct {
|
|
|
|
+ sizeInBytes: u32,
|
|
|
|
+ codePointCount: u32,
|
|
|
|
+ data: [^]byte,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputTouchSensorInfo :: struct {
|
|
|
|
+ mappedInputKinds: GameInputKind,
|
|
|
|
+ label: GameInputLabel,
|
|
|
|
+ location: GameInputLocation,
|
|
|
|
+ locationId: u32,
|
|
|
|
+ resolutionX: u64,
|
|
|
|
+ resolutionY: u64,
|
|
|
|
+ shape: GameInputTouchShape,
|
|
|
|
+ aspectRatio: f32,
|
|
|
|
+ orientation: f32,
|
|
|
|
+ physicalWidth: f32,
|
|
|
|
+ physicalHeight: f32,
|
|
|
|
+ maxPressure: f32,
|
|
|
|
+ maxProximity: f32,
|
|
|
|
+ maxTouchPoints: u32,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputTouchState :: struct {
|
|
|
|
+ touchId: u64,
|
|
|
|
+ sensorIndex: u32,
|
|
|
|
+ positionX: f32,
|
|
|
|
+ positionY: f32,
|
|
|
|
+ pressure: f32,
|
|
|
|
+ proximity: f32,
|
|
|
|
+ contactRectTop: f32,
|
|
|
|
+ contactRectLeft: f32,
|
|
|
|
+ contactRectRight: f32,
|
|
|
|
+ contactRectBottom: f32,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputUiNavigationInfo :: struct {
|
|
|
|
+ menuButtonLabel: GameInputLabel,
|
|
|
|
+ viewButtonLabel: GameInputLabel,
|
|
|
|
+ acceptButtonLabel: GameInputLabel,
|
|
|
|
+ cancelButtonLabel: GameInputLabel,
|
|
|
|
+ upButtonLabel: GameInputLabel,
|
|
|
|
+ downButtonLabel: GameInputLabel,
|
|
|
|
+ leftButtonLabel: GameInputLabel,
|
|
|
|
+ rightButtonLabel: GameInputLabel,
|
|
|
|
+ contextButton1Label: GameInputLabel,
|
|
|
|
+ contextButton2Label: GameInputLabel,
|
|
|
|
+ contextButton3Label: GameInputLabel,
|
|
|
|
+ contextButton4Label: GameInputLabel,
|
|
|
|
+ pageUpButtonLabel: GameInputLabel,
|
|
|
|
+ pageDownButtonLabel: GameInputLabel,
|
|
|
|
+ pageLeftButtonLabel: GameInputLabel,
|
|
|
|
+ pageRightButtonLabel: GameInputLabel,
|
|
|
|
+ scrollUpButtonLabel: GameInputLabel,
|
|
|
|
+ scrollDownButtonLabel: GameInputLabel,
|
|
|
|
+ scrollLeftButtonLabel: GameInputLabel,
|
|
|
|
+ scrollRightButtonLabel: GameInputLabel,
|
|
|
|
+ guideButtonLabel: GameInputLabel,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputUiNavigationState :: struct {
|
|
|
|
+ buttons: GameInputUiNavigationButtons,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputUsage :: struct {
|
|
|
|
+ page: u16,
|
|
|
|
+ id: u16,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputVersion :: struct {
|
|
|
|
+ major: u16,
|
|
|
|
+ minor: u16,
|
|
|
|
+ build: u16,
|
|
|
|
+ revision: u16,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// COM Interfaces
|
|
|
|
+
|
|
|
|
+IUnknown :: windows.IUnknown
|
|
|
|
+IUnknown_VTable :: windows.IUnknown_VTable
|
|
|
|
+IID :: windows.GUID
|
|
|
|
+
|
|
|
|
+IGameInput_UUID_STRING :: "11BE2A7E-4254-445A-9C09-FFC40F006918"
|
|
|
|
+IGameInput_UUID := &IID{0x11BE2A7E, 0x4254, 0x445A, {0x9C, 0x09, 0xFF, 0xC4, 0x0F, 0x00, 0x69, 0x18}}
|
|
|
|
+IGameInput :: struct #raw_union {
|
|
|
|
+ #subtype iunknown: IUnknown,
|
|
|
|
+ using igameinput_vtable: ^IGameInput_VTable,
|
|
|
|
+}
|
|
|
|
+IGameInput_VTable :: struct {
|
|
|
|
+ using iunknown_vtable: IUnknown_VTable,
|
|
|
|
+ GetCurrentTimestamp: proc "system" (this: ^IGameInput) -> u64,
|
|
|
|
+ GetCurrentReading: proc "system" (this: ^IGameInput, inputKind: GameInputKind, device: ^IGameInputDevice, reading: ^^IGameInputReading) -> HRESULT,
|
|
|
|
+ GetNextReading: proc "system" (this: ^IGameInput, referenceReading: ^IGameInputReading, inputKind: GameInputKind, device: ^IGameInputDevice, reading: ^^IGameInputReading) -> HRESULT,
|
|
|
|
+ GetPreviousReading: proc "system" (this: ^IGameInput, referenceReading: ^IGameInputReading, inputKind: GameInputKind, device: ^IGameInputDevice, reading: ^^IGameInputReading) -> HRESULT,
|
|
|
|
+ GetTemporalReading: proc "system" (this: ^IGameInput, timestamp: u64, device: ^IGameInputDevice, reading: ^^IGameInputReading) -> HRESULT,
|
|
|
|
+ RegisterReadingCallback: proc "system" (this: ^IGameInput, device: ^IGameInputDevice, inputKind: GameInputKind, analogThreshold: f32, ctx: rawptr, callbackFunc: GameInputReadingCallback, callbackToken: ^GameInputCallbackToken) -> HRESULT,
|
|
|
|
+ RegisterDeviceCallback: proc "system" (this: ^IGameInput, device: ^IGameInputDevice, inputKind: GameInputKind, statusFilter: GameInputDeviceStatus, enumerationKind: GameInputEnumerationKind, ctx: rawptr, callbackFunc: GameInputDeviceCallback, callbackToken: ^GameInputCallbackToken) -> HRESULT,
|
|
|
|
+ RegisterSystemButtonCallback: proc "system" (this: ^IGameInput, device: ^IGameInputDevice, buttonFilter: GameInputSystemButtons, ctx: rawptr, callbackFunc: GameInputSystemButtonCallback, callbackToken: ^GameInputCallbackToken) -> HRESULT,
|
|
|
|
+ RegisterKeyboardLayoutCallback: proc "system" (this: ^IGameInput, device: ^IGameInputDevice, ctx: rawptr, callbackFunc: GameInputKeyboardLayoutCallback, callbackToken: ^GameInputCallbackToken) -> HRESULT,
|
|
|
|
+ StopCallback: proc "system" (this: ^IGameInput, callbackToken: GameInputCallbackToken),
|
|
|
|
+ UnregisterCallback: proc "system" (this: ^IGameInput, callbackToken: GameInputCallbackToken, timeoutInMicroseconds: u64) -> bool,
|
|
|
|
+ CreateDispatcher: proc "system" (this: ^IGameInput, dispatcher: ^^IGameInputDispatcher) -> HRESULT,
|
|
|
|
+ CreateAggregateDevice: proc "system" (this: ^IGameInput, kind: GameInputKind, device: ^^IGameInputDevice) -> HRESULT,
|
|
|
|
+ FindDeviceFromId: proc "system" (this: ^IGameInput, value: ^APP_LOCAL_DEVICE_ID, device: ^^IGameInputDevice) -> HRESULT,
|
|
|
|
+ FindDeviceFromObject: proc "system" (this: ^IGameInput, value: ^IUnknown, device: ^^IGameInputDevice) -> HRESULT,
|
|
|
|
+ FindDeviceFromPlatformHandle: proc "system" (this: ^IGameInput, value: HANDLE, device: ^^IGameInputDevice) -> HRESULT,
|
|
|
|
+ FindDeviceFromPlatformString: proc "system" (this: ^IGameInput, value: windows.LPCWSTR, device: ^^IGameInputDevice) -> HRESULT,
|
|
|
|
+ EnableOemDeviceSupport: proc "system" (this: ^IGameInput, vendorId: u16, productId: u16, interfaceNumber: u8, collectionNumber: u8) -> HRESULT,
|
|
|
|
+ SetFocusPolicy: proc "system" (this: ^IGameInput, policy: GameInputFocusPolicy),
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+IGameInputReading_UUID_STRING :: "2156947A-E1FA-4DE0-A30B-D812931DBD8D"
|
|
|
|
+IGameInputReading_UUID := &IID{0x2156947A, 0xE1FA, 0x4DE0, {0xA3, 0x0B, 0xD8, 0x12, 0x93, 0x1D, 0x0BD, 0x8D}}
|
|
|
|
+IGameInputReading :: struct #raw_union {
|
|
|
|
+ #subtype iunknown: IUnknown,
|
|
|
|
+ using igameinputreading_vtable: ^IGameInputReading_VTable,
|
|
|
|
+}
|
|
|
|
+IGameInputReading_VTable :: struct {
|
|
|
|
+ using iunknown_vtable: IUnknown_VTable,
|
|
|
|
+ GetInputKind: proc "system" (this: ^IGameInputReading) -> GameInputKind,
|
|
|
|
+ GetSequenceNumber: proc "system" (this: ^IGameInputReading) -> u64,
|
|
|
|
+ GetTimestamp: proc "system" (this: ^IGameInputReading) -> u64,
|
|
|
|
+ GetDevice: proc "system" (this: ^IGameInputReading, device: ^^IGameInputDevice),
|
|
|
|
+ GetRawReport: proc "system" (this: ^IGameInputReading, report: ^^IGameInputRawDeviceReport) -> bool,
|
|
|
|
+ GetControllerAxisCount: proc "system" (this: ^IGameInputReading) -> u32,
|
|
|
|
+ GetControllerAxisState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]f32) -> u32,
|
|
|
|
+ GetControllerButtonCount: proc "system" (this: ^IGameInputReading) -> u32,
|
|
|
|
+ GetControllerButtonState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]bool) -> u32,
|
|
|
|
+ GetControllerSwitchCount: proc "system" (this: ^IGameInputReading) -> u32,
|
|
|
|
+ GetControllerSwitchState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]GameInputSwitchPosition) -> u32,
|
|
|
|
+ GetKeyCount: proc "system" (this: ^IGameInputReading) -> u32,
|
|
|
|
+ GetKeyState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]GameInputKeyState) -> u32,
|
|
|
|
+ GetMouseState: proc "system" (this: ^IGameInputReading, state: ^GameInputMouseState) -> bool,
|
|
|
|
+ GetTouchCount: proc "system" (this: ^IGameInputReading) -> u32,
|
|
|
|
+ GetTouchState: proc "system" (this: ^IGameInputReading, stateArrayCount: u32, stateArray: [^]GameInputTouchState) -> u32,
|
|
|
|
+ GetMotionState: proc "system" (this: ^IGameInputReading, state: ^GameInputMotionState) -> bool,
|
|
|
|
+ GetArcadeStickState: proc "system" (this: ^IGameInputReading, state: ^GameInputArcadeStickState) -> bool,
|
|
|
|
+ GetFlightStickState: proc "system" (this: ^IGameInputReading, state: ^GameInputFlightStickState) -> bool,
|
|
|
|
+ GetGamepadState: proc "system" (this: ^IGameInputReading, state: ^GameInputGamepadState) -> bool,
|
|
|
|
+ GetRacingWheelState: proc "system" (this: ^IGameInputReading, state: ^GameInputRacingWheelState) -> bool,
|
|
|
|
+ GetUiNavigationState: proc "system" (this: ^IGameInputReading, state: ^GameInputUiNavigationState) -> bool,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+IGameInputDevice_UUID_STRING :: "31DD86FB-4C1B-408A-868F-439B3CD47125"
|
|
|
|
+IGameInputDevice_UUID := &IID{0x31DD86FB, 0x4C1B, 0x408A, {0x86, 0x8F, 0x43, 0x9B, 0x3C, 0xD4, 0x71, 0x25}}
|
|
|
|
+IGameInputDevice :: struct #raw_union {
|
|
|
|
+ #subtype iunknown: IUnknown,
|
|
|
|
+ using igameinputdevice_vtable: ^IGameInputDevice_Vtable,
|
|
|
|
+}
|
|
|
|
+IGameInputDevice_Vtable :: struct {
|
|
|
|
+ using iunknown_vtable: IUnknown_VTable,
|
|
|
|
+ GetDeviceInfo: proc "system" (this: ^IGameInputDevice) -> ^GameInputDeviceInfo,
|
|
|
|
+ GetDeviceStatus: proc "system" (this: ^IGameInputDevice) -> GameInputDeviceStatus,
|
|
|
|
+ GetBatteryState: proc "system" (this: ^IGameInputDevice, state: ^GameInputBatteryState),
|
|
|
|
+ CreateForceFeedbackEffect: proc "system" (this: ^IGameInputDevice, motorIndex: u32, params: ^GameInputForceFeedbackParams, effect: ^^IGameInputForceFeedbackEffect) -> HRESULT,
|
|
|
|
+ IsForceFeedbackMotorPoweredOn: proc "system" (this: ^IGameInputDevice, motorIndex: u32) -> bool,
|
|
|
|
+ SetForceFeedbackMotorGain: proc "system" (this: ^IGameInputDevice, motorIndex: u32, masterGain: f32),
|
|
|
|
+ SetHapticMotorState: proc "system" (this: ^IGameInputDevice, motorIndex: u32, params: ^GameInputHapticFeedbackParams) -> HRESULT,
|
|
|
|
+ SetRumbleState: proc "system" (this: ^IGameInputDevice, params: ^GameInputRumbleParams),
|
|
|
|
+ SetInputSynchronizationState: proc "system" (this: ^IGameInputDevice, enabled: bool),
|
|
|
|
+ SendInputSynchronizationHint: proc "system" (this: ^IGameInputDevice),
|
|
|
|
+ PowerOff: proc "system" (this: ^IGameInputDevice),
|
|
|
|
+ CreateRawDeviceReport: proc "system" (this: ^IGameInputDevice, reportId: u32, reportKind: GameInputRawDeviceReportKind, report: ^^IGameInputRawDeviceReport) -> HRESULT,
|
|
|
|
+ GetRawDeviceFeature: proc "system" (this: ^IGameInputDevice, reportId: u32, report: ^^IGameInputRawDeviceReport) -> HRESULT,
|
|
|
|
+ SetRawDeviceFeature: proc "system" (this: ^IGameInputDevice, report: ^IGameInputRawDeviceReport) -> HRESULT,
|
|
|
|
+ SendRawDeviceOutput: proc "system" (this: ^IGameInputDevice, report: ^IGameInputRawDeviceReport) -> HRESULT,
|
|
|
|
+ SendRawDeviceOutputWithResponse: proc "system" (this: ^IGameInputDevice, requestReport: ^IGameInputRawDeviceReport, responseReport: ^^IGameInputRawDeviceReport) -> HRESULT,
|
|
|
|
+ ExecuteRawDeviceIoControl: proc "system" (this: ^IGameInputDevice, controlCode: u32, inputBufferSize: c.size_t, inputBuffer: rawptr, outputBufferSize: c.size_t, outputBuffer: rawptr, outputSize: ^c.size_t) -> HRESULT,
|
|
|
|
+ AcquireExclusiveRawDeviceAccess: proc "system" (this: ^IGameInputDevice, timeoutInMicroseconds: u64) -> bool,
|
|
|
|
+ ReleaseExclusiveRawDeviceAccess: proc "system" (this: ^IGameInputDevice),
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+IGameInputDispatcher_UUID_STRING :: "415EED2E-98CB-42C2-8F28-B94601074E31"
|
|
|
|
+IGameInputDispatcher_UUID := &IID{0x415EED2E, 0x98CB, 0x42C2, {0x8F, 0x28, 0xB9, 0x46, 0x01, 0x07, 0x4E, 0x31}}
|
|
|
|
+IGameInputDispatcher :: struct #raw_union {
|
|
|
|
+ #subtype iunknown: IUnknown,
|
|
|
|
+ using igameinputdispatcher_vtable: ^IGameInputDispatcher_Vtable,
|
|
|
|
+}
|
|
|
|
+IGameInputDispatcher_Vtable :: struct {
|
|
|
|
+ using iunknown_vtable: IUnknown_VTable,
|
|
|
|
+ Dispatch: proc "system" (this: ^IGameInputDispatcher, quotaInMicroseconds: u64) -> bool,
|
|
|
|
+ OpenWaitHandle: proc "system" (this: ^IGameInputDispatcher, waitHandle: ^HANDLE) -> HRESULT,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+IGameInputForceFeedbackEffect_UUID_STRING :: "51BDA05E-F742-45D9-B085-9444AE48381D"
|
|
|
|
+IGameInputForceFeedbackEffect_UUID := &IID{0x51BDA05E, 0xF742, 0x45D9, {0xB0, 0x85, 0x94, 0x44, 0xAE, 0x48, 0x38, 0x1D}}
|
|
|
|
+IGameInputForceFeedbackEffect :: struct #raw_union {
|
|
|
|
+ #subtype iunknown: IUnknown,
|
|
|
|
+ using igameinputforcefeedbackeffect_vtable: ^IGameInputForceFeedbackEffect_Vtable,
|
|
|
|
+}
|
|
|
|
+IGameInputForceFeedbackEffect_Vtable :: struct {
|
|
|
|
+ using iunknown_vtable: IUnknown_VTable,
|
|
|
|
+ GetDevice: proc "system" (this: ^IGameInputForceFeedbackEffect, device: ^^IGameInputDevice),
|
|
|
|
+ GetMotorIndex: proc "system" (this: ^IGameInputForceFeedbackEffect) -> u32,
|
|
|
|
+ GetGain: proc "system" (this: ^IGameInputForceFeedbackEffect) -> f32,
|
|
|
|
+ SetGain: proc "system" (this: ^IGameInputForceFeedbackEffect, gain: f32),
|
|
|
|
+ GetParams: proc "system" (this: ^IGameInputForceFeedbackEffect, params: ^GameInputForceFeedbackParams),
|
|
|
|
+ SetParams: proc "system" (this: ^IGameInputForceFeedbackEffect, params: ^GameInputForceFeedbackParams) -> bool,
|
|
|
|
+ GetState: proc "system" (this: ^IGameInputForceFeedbackEffect) -> GameInputFeedbackEffectState,
|
|
|
|
+ SetState: proc "system" (this: ^IGameInputForceFeedbackEffect, state: GameInputFeedbackEffectState),
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+IGameInputRawDeviceReport_UUID_STRING :: "61F08CF1-1FFC-40CA-A2B8-E1AB8BC5B6DC"
|
|
|
|
+IGameInputRawDeviceReport_UUID := &IID{0x61F08CF1, 0x1FFC, 0x40CA, {0xA2, 0xB8, 0xE1, 0xAB, 0x8B, 0xC5, 0xB6, 0xDC}}
|
|
|
|
+IGameInputRawDeviceReport :: struct #raw_union {
|
|
|
|
+ #subtype iunknown: IUnknown,
|
|
|
|
+ using igameinputrawdevicereport_vtable: ^IGameInputRawDeviceReport_Vtable,
|
|
|
|
+}
|
|
|
|
+IGameInputRawDeviceReport_Vtable :: struct {
|
|
|
|
+ using iunknown_vtable: IUnknown_VTable,
|
|
|
|
+ GetDevice: proc "system" (this: ^IGameInputRawDeviceReport, device: ^^IGameInputDevice),
|
|
|
|
+ GetReportInfo: proc "system" (this: ^IGameInputRawDeviceReport) -> ^GameInputRawDeviceReportInfo,
|
|
|
|
+ GetRawDataSize: proc "system" (this: ^IGameInputRawDeviceReport) -> c.size_t,
|
|
|
|
+ GetRawData: proc "system" (this: ^IGameInputRawDeviceReport, bufferSize: c.size_t, buffer: rawptr) -> c.size_t,
|
|
|
|
+ SetRawData: proc "system" (this: ^IGameInputRawDeviceReport, bufferSize: c.size_t, buffer: rawptr) -> bool,
|
|
|
|
+ GetItemValue: proc "system" (this: ^IGameInputRawDeviceReport, itemIndex: u32, value: ^u64) -> bool,
|
|
|
|
+ SetItemValue: proc "system" (this: ^IGameInputRawDeviceReport, itemIndex: u32, value: u64) -> bool,
|
|
|
|
+ ResetItemValue: proc "system" (this: ^IGameInputRawDeviceReport, itemIndex: u32) -> bool,
|
|
|
|
+ ResetAllItems: proc "system" (this: ^IGameInputRawDeviceReport) -> bool,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// Functions
|
|
|
|
+HRESULT :: windows.HRESULT
|
|
|
|
+HANDLE :: windows.HANDLE
|
|
|
|
+
|
|
|
|
+DEVICE_DISCONNECTED : HRESULT : -0x7C75FFFF
|
|
|
|
+DEVICE_NOT_FOUND : HRESULT : -0x7C75FFFE
|
|
|
|
+READING_NOT_FOUND : HRESULT : -0x7C75FFFD
|
|
|
|
+REFERENCE_READING_TOO_OLD : HRESULT : -0x7C75FFFC
|
|
|
|
+TIMESTAMP_OUT_OF_RANGE : HRESULT : -0x7C75FFFB
|
|
|
|
+INSUFFICIENT_FORCE_FEEDBACK_RESOURCES : HRESULT : -0x7C75FFFA
|
|
|
|
+
|
|
|
|
+GameInputCallbackToken :: distinct u64
|
|
|
|
+
|
|
|
|
+GAMEINPUT_CURRENT_CALLBACK_TOKEN_VALUE : GameInputCallbackToken : 0xFFFFFFFFFFFFFFFF
|
|
|
|
+GAMEINPUT_INVALID_CALLBACK_TOKEN_VALUE : GameInputCallbackToken : 0x0000000000000000
|
|
|
|
+
|
|
|
|
+@(default_calling_convention="system")
|
|
|
|
+foreign wgi {
|
|
|
|
+ GameInputCreate :: proc(gameInput: ^^IGameInput) -> HRESULT ---
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GameInputDeviceCallback :: #type proc "system" (callbackToken: GameInputCallbackToken, ctx: rawptr, device: ^IGameInputDevice, timestamp: u64, currentState: GameInputDeviceStatus, previousState: GameInputDeviceStatus)
|
|
|
|
+GameInputGuideButtonCallback :: #type proc "system" (callbackToken: GameInputCallbackToken, ctx: rawptr, device: ^IGameInputDevice, timestamp: u64, isPressed: bool)
|
|
|
|
+GameInputSystemButtonCallback :: #type proc "system" (callbackToken: GameInputCallbackToken, ctx: rawptr, device: ^IGameInputDevice, timestamp: u64, currentState: GameInputDeviceStatus, previousState: GameInputDeviceStatus)
|
|
|
|
+GameInputReadingCallback :: #type proc "system" (callbackToken: GameInputCallbackToken, ctx: rawptr, reading: ^IGameInputReading, hasOverrunOccured: bool)
|
|
|
|
+GameInputKeyboardLayoutCallback :: #type proc "system" (callbackToken: GameInputCallbackToken, ctx: rawptr, device: ^IGameInputDevice, timestamp: u64, currentState: GameInputDeviceStatus, previousState: GameInputDeviceStatus)
|
|
|
|
+
|