Calls separate zig module created for sending os level inputs
cpp
pub fn run(self: *LeaveStarterHouse, img: *const Img, bot: *Bot) !void {
try bot.game.input_manager.change(.right);
fn key_down(key: []const Zkey, action: bool) !void {
if (action) { // when it should be set to key down
for (key) |k| {
try Zinput.send_key_down(k);
}
return;
}
// for key up
for (key) |k| {
try Zinput.send_key_up(k);
}
}
pub fn change(self: *InputManager, new_state: Input) !void {
// input didnt change, do nothing
if (self.input == new_state) return;
// switching to none state, release all possible keys
if (new_state == .none) {
var iterator = self.keymap.iterator();
while (iterator.next()) |entry| {
try key_down(entry.value_ptr.*, false);
}
return;
}
// release current input keys
if (self.keymap.get(self.input)) |key| {
try key_down(key, false);
}
self.input = new_state;
// press new input keys
if (self.keymap.get(new_state)) |key| {
try key_down(key, true);
}
}