From eec14bc99ce71798b4482381d0c3a843fc99ced1 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Fri, 26 Feb 2021 01:03:41 +0100 Subject: [PATCH] Input system more DRY, add Tab (`\t`) support. --- level.kble | Bin 0 -> 518 bytes src/main.zig | 30 ++++++++++++++---------------- 2 files changed, 14 insertions(+), 16 deletions(-) create mode 100644 level.kble diff --git a/level.kble b/level.kble new file mode 100644 index 0000000000000000000000000000000000000000..7874dc194046c3e7a335e41e983e79f66ec45bf2 GIT binary patch literal 518 zcmd6hi4A}-3Z8hvaU{m0Z61O?m17Lb=~=&I4b$PN~FhIL*wgJuW{C%85*XF kE#_aYPE@1uqCHLTjLF%D2hB9*`!Z>aTWrt(TL1t6 literal 0 HcmV?d00001 diff --git a/src/main.zig b/src/main.zig index 7701285..747277e 100644 --- a/src/main.zig +++ b/src/main.zig @@ -24,6 +24,7 @@ const ActionCat = actions.ActionCat; const Mode = @import("modes.zig").Mode; const char_range = 255; +const input_buffer_len = 255; pub fn main() void { const level_path: [*:0]const u8 = if (std.os.argv.len > 1) @@ -120,7 +121,6 @@ pub fn main() void { } // Create input buffer. - const input_buffer_len = 255; var input_buffer: [input_buffer_len]u32 = undefined; comptime { var i: u8 = 0; @@ -132,28 +132,18 @@ pub fn main() void { while (!ray.WindowShouldClose()) { { - // TODO: apply DRY // Get keyboard input. var key = ray.GetCharPressed(); // Check if more characters have been pressed. while (key != 0) { - // Add key to buffer. - input_buffer[input_cursor] = @intCast(u32, key); - input_cursor += 1; - // Avoid writing out of memory. - if (input_cursor >= input_buffer_len) - input_cursor = input_buffer_len - 1; - + add_key_to_buffer(&input_buffer, &input_cursor, key); key = ray.GetCharPressed(); } // Check for special keys, not detected by GetCharPressed. - if (ray.IsKeyDown(ray.KEY_ENTER)) { - input_buffer[input_cursor] = '\n'; - input_cursor += 1; - // Avoid writing out of memory. - if (input_cursor >= input_buffer_len) - input_cursor = input_buffer_len - 1; - } + if (ray.IsKeyPressed(ray.KEY_ENTER)) + add_key_to_buffer(&input_buffer, &input_cursor, '\n'); + if (ray.IsKeyPressed(ray.KEY_TAB)) + add_key_to_buffer(&input_buffer, &input_cursor, '\t'); } // Process buffer content. @@ -274,3 +264,11 @@ pub fn main() void { mouse.draw(scale, camera); } } + +fn add_key_to_buffer(input_buffer: *[input_buffer_len]u32, input_cursor: *u8, key: c_int) void { + input_buffer[input_cursor.*] = @intCast(u32, key); + input_cursor.* += 1; + // Avoid writing out of memory. + if (input_cursor.* >= input_buffer_len) + input_cursor.* = input_buffer_len - 1; +}