aboutsummaryrefslogtreecommitdiff
path: root/src/inputs.zig
blob: 4d2afa0e40ba5531c7d6c63e795707d9f0308063 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const std = @import("std");
const w4 = @import("wasm4.zig");

// This packed struct matches the buttons definitions in wasm4.zig
// so that a bitCast can give us named fields
pub const Buttons = packed struct {
    x: bool = false,
    y: bool = false,
    _: u2,
    left: bool = false,
    right: bool = false,
    up: bool = false,
    down: bool = false,
};

pub const Gamepad = struct {
    held: Buttons = .{},
    pressed: Buttons = .{},
    released: Buttons = .{},

    pub fn update(self: *Gamepad, buttons: u8) void {
        var previous = @bitCast(u8, self.held);
        self.held = @bitCast(Buttons, buttons);
        self.pressed = @bitCast(Buttons, buttons & (buttons ^ previous));
        self.released = @bitCast(Buttons, previous & (buttons ^ previous));
    }
};