glfw: ziggify gamepad button enumerations
Helps hexops/mach#37 Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
parent
2154ee5aea
commit
210e12a437
4 changed files with 52 additions and 28 deletions
|
|
@ -9,7 +9,9 @@ const c = @import("c.zig").c;
|
||||||
const Window = @import("Window.zig");
|
const Window = @import("Window.zig");
|
||||||
const Error = @import("errors.zig").Error;
|
const Error = @import("errors.zig").Error;
|
||||||
const getError = @import("errors.zig").getError;
|
const getError = @import("errors.zig").getError;
|
||||||
|
const Action = @import("action.zig").Action;
|
||||||
const GamepadAxis = @import("gamepad_axis.zig").GamepadAxis;
|
const GamepadAxis = @import("gamepad_axis.zig").GamepadAxis;
|
||||||
|
const GamepadButton = @import("gamepad_button.zig").GamepadButton;
|
||||||
|
|
||||||
const Joystick = @This();
|
const Joystick = @This();
|
||||||
|
|
||||||
|
|
@ -44,6 +46,8 @@ pub const last = c.GLFW_JOYSTICK_LAST;
|
||||||
/// see also: gamepad, glfwGetGamepadState
|
/// see also: gamepad, glfwGetGamepadState
|
||||||
const GamepadState = extern struct {
|
const GamepadState = extern struct {
|
||||||
/// The states of each gamepad button (see gamepad_buttons), `glfw.Action.press` or `glfw.Action.release`.
|
/// The states of each gamepad button (see gamepad_buttons), `glfw.Action.press` or `glfw.Action.release`.
|
||||||
|
///
|
||||||
|
/// Use the enumeration helper e.g. `.getButton(.dpad_up)` to access these indices.
|
||||||
buttons: [15]u8,
|
buttons: [15]u8,
|
||||||
|
|
||||||
/// The states of each gamepad axis (see gamepad_axes), in the range -1.0 to 1.0 inclusive.
|
/// The states of each gamepad axis (see gamepad_axes), in the range -1.0 to 1.0 inclusive.
|
||||||
|
|
@ -51,9 +55,16 @@ const GamepadState = extern struct {
|
||||||
/// Use the enumeration helper e.g. `.getAxis(.left_x)` to access these indices.
|
/// Use the enumeration helper e.g. `.getAxis(.left_x)` to access these indices.
|
||||||
axes: [6]f32,
|
axes: [6]f32,
|
||||||
|
|
||||||
|
/// Returns the state of the specified gamepad button.
|
||||||
|
pub fn getButton(self: @This(), which: GamepadButton) Action {
|
||||||
|
_ = self;
|
||||||
|
return @intToEnum(Action, self.buttons[@intCast(usize, @enumToInt(which))]);
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the status of the specified gamepad axis, in the range -1.0 to 1.0 inclusive.
|
/// Returns the status of the specified gamepad axis, in the range -1.0 to 1.0 inclusive.
|
||||||
pub fn getAxis(self: @This(), which: GamepadAxis) f32 {
|
pub fn getAxis(self: @This(), which: GamepadAxis) f32 {
|
||||||
return self.axis[which];
|
_ = self;
|
||||||
|
return self.axes[@intCast(usize, @enumToInt(which))];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -548,5 +559,6 @@ test "getGamepadState" {
|
||||||
|
|
||||||
const joystick = glfw.Joystick{ .jid = glfw.Joystick.one };
|
const joystick = glfw.Joystick{ .jid = glfw.Joystick.one };
|
||||||
_ = joystick.getGamepadState() catch |err| std.debug.print("failed to get gamepad state, joysticks not supported? error={}\n", .{err});
|
_ = joystick.getGamepadState() catch |err| std.debug.print("failed to get gamepad state, joysticks not supported? error={}\n", .{err});
|
||||||
_ = (GamepadState{}).getAxis(.left_x);
|
_ = (std.mem.zeroes(GamepadState)).getAxis(.left_x);
|
||||||
|
_ = (std.mem.zeroes(GamepadState)).getButton(.dpad_up);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,5 +10,7 @@ pub const GamepadAxis = enum(c_int) {
|
||||||
right_y = c.GLFW_GAMEPAD_AXIS_RIGHT_Y,
|
right_y = c.GLFW_GAMEPAD_AXIS_RIGHT_Y,
|
||||||
left_trigger = c.GLFW_GAMEPAD_AXIS_LEFT_TRIGGER,
|
left_trigger = c.GLFW_GAMEPAD_AXIS_LEFT_TRIGGER,
|
||||||
right_trigger = c.GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER,
|
right_trigger = c.GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER,
|
||||||
last = .right_trigger,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Not in the GamepadAxis enumeration as it is a duplicate value which is forbidden.
|
||||||
|
pub const last = GamepadAxis.right_trigger;
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,37 @@
|
||||||
//! Gamepad buttons.
|
|
||||||
//!
|
|
||||||
//! See glfw.getGamepadState for how these are used.
|
|
||||||
|
|
||||||
const c = @import("c.zig").c;
|
const c = @import("c.zig").c;
|
||||||
|
|
||||||
pub const a = c.GLFW_GAMEPAD_BUTTON_A;
|
/// Gamepad buttons.
|
||||||
pub const b = c.GLFW_GAMEPAD_BUTTON_B;
|
///
|
||||||
pub const x = c.GLFW_GAMEPAD_BUTTON_X;
|
/// See glfw.getGamepadState for how these are used.
|
||||||
pub const y = c.GLFW_GAMEPAD_BUTTON_Y;
|
pub const GamepadButton = enum(c_int) {
|
||||||
pub const left_bumper = c.GLFW_GAMEPAD_BUTTON_LEFT_BUMPER;
|
a = c.GLFW_GAMEPAD_BUTTON_A,
|
||||||
pub const right_bumper = c.GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER;
|
b = c.GLFW_GAMEPAD_BUTTON_B,
|
||||||
pub const back = c.GLFW_GAMEPAD_BUTTON_BACK;
|
x = c.GLFW_GAMEPAD_BUTTON_X,
|
||||||
pub const start = c.GLFW_GAMEPAD_BUTTON_START;
|
y = c.GLFW_GAMEPAD_BUTTON_Y,
|
||||||
pub const guide = c.GLFW_GAMEPAD_BUTTON_GUIDE;
|
left_bumper = c.GLFW_GAMEPAD_BUTTON_LEFT_BUMPER,
|
||||||
pub const left_thumb = c.GLFW_GAMEPAD_BUTTON_LEFT_THUMB;
|
right_bumper = c.GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER,
|
||||||
pub const right_thumb = c.GLFW_GAMEPAD_BUTTON_RIGHT_THUMB;
|
back = c.GLFW_GAMEPAD_BUTTON_BACK,
|
||||||
pub const dpad_up = c.GLFW_GAMEPAD_BUTTON_DPAD_UP;
|
start = c.GLFW_GAMEPAD_BUTTON_START,
|
||||||
pub const dpad_right = c.GLFW_GAMEPAD_BUTTON_DPAD_RIGHT;
|
guide = c.GLFW_GAMEPAD_BUTTON_GUIDE,
|
||||||
pub const dpad_down = c.GLFW_GAMEPAD_BUTTON_DPAD_DOWN;
|
left_thumb = c.GLFW_GAMEPAD_BUTTON_LEFT_THUMB,
|
||||||
pub const dpad_left = c.GLFW_GAMEPAD_BUTTON_DPAD_LEFT;
|
right_thumb = c.GLFW_GAMEPAD_BUTTON_RIGHT_THUMB,
|
||||||
pub const last = dpad_left;
|
dpad_up = c.GLFW_GAMEPAD_BUTTON_DPAD_UP,
|
||||||
|
dpad_right = c.GLFW_GAMEPAD_BUTTON_DPAD_RIGHT,
|
||||||
|
dpad_down = c.GLFW_GAMEPAD_BUTTON_DPAD_DOWN,
|
||||||
|
dpad_left = c.GLFW_GAMEPAD_BUTTON_DPAD_LEFT,
|
||||||
|
};
|
||||||
|
|
||||||
pub const cross = a;
|
/// Not in the GamepadAxis enumeration as it is a duplicate value which is forbidden.
|
||||||
pub const circle = b;
|
pub const last = GamepadButton.dpad_left;
|
||||||
pub const square = x;
|
|
||||||
pub const triangle = y;
|
/// Not in the GamepadAxis enumeration as it is a duplicate value which is forbidden.
|
||||||
|
pub const cross = GamepadButton.a;
|
||||||
|
|
||||||
|
/// Not in the GamepadAxis enumeration as it is a duplicate value which is forbidden.
|
||||||
|
pub const circle = GamepadButton.b;
|
||||||
|
|
||||||
|
/// Not in the GamepadAxis enumeration as it is a duplicate value which is forbidden.
|
||||||
|
pub const square = GamepadButton.x;
|
||||||
|
|
||||||
|
/// Not in the GamepadAxis enumeration as it is a duplicate value which is forbidden.
|
||||||
|
pub const triangle = GamepadButton.y;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ const getError = @import("errors.zig").getError;
|
||||||
|
|
||||||
pub const Action = @import("action.zig").Action;
|
pub const Action = @import("action.zig").Action;
|
||||||
pub const GamepadAxis = @import("gamepad_axis.zig").GamepadAxis;
|
pub const GamepadAxis = @import("gamepad_axis.zig").GamepadAxis;
|
||||||
pub const gamepad_button = @import("gamepad_button.zig");
|
pub const GamepadButton = @import("gamepad_button.zig").GamepadButton;
|
||||||
pub const GammaRamp = @import("GammaRamp.zig");
|
pub const GammaRamp = @import("GammaRamp.zig");
|
||||||
pub const hat = @import("hat.zig");
|
pub const hat = @import("hat.zig");
|
||||||
pub const Image = @import("Image.zig");
|
pub const Image = @import("Image.zig");
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue