diff --git a/build.zig.zon b/build.zig.zon index 1558e5c..3fb6c83 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -16,8 +16,8 @@ // internet connectivity. .dependencies = .{ .seizer = .{ - .url = "https://github.com/leroycep/seizer/archive/e065ae24f5ae4be546c6f1eb170677b0ac835452.tar.gz", - .hash = "12200e611cb9ea7aa15b43cc52a6ff31aa8dbcf33a360c858ea237a6df102ee8da6d", + .url = "https://github.com/leroycep/seizer/archive/78cba44f8d07492cb84939ad836746f7d82ae5e2.tar.gz", + .hash = "1220cbae20222089c1ec9b847ef3466f13a665707e8d0e8ea2b57ffda083fd9275b6", }, }, .paths = .{ diff --git a/src/main.zig b/src/main.zig index e37aa26..f57ffe8 100644 --- a/src/main.zig +++ b/src/main.zig @@ -24,6 +24,8 @@ var current_menu_fn: ?MenuFn = null; var win_count: ?u32 = null; var win_triggered: bool = false; var frame_count: u64 = 0; +var draw_required: bool = true; +var previous_framebuffer_size: [2]f32 = .{ 0, 0 }; pub fn init() !void { prng = std.rand.DefaultPrng.init(@bitCast(std.time.timestamp())); @@ -179,6 +181,17 @@ fn render(window: seizer.Window) !void { resetHistory(); win_triggered = true; + draw_required = true; + } + + const framebuffer_size = window.getFramebufferSize(); + + if (!std.mem.eql(f32, &framebuffer_size, &previous_framebuffer_size)) { + draw_required = true; + } + + if (!draw_required) { + return; } gl.clearColor(0.2, 0.4, 0.2, 1.0); @@ -186,7 +199,7 @@ fn render(window: seizer.Window) !void { canvas.begin(.{ .window_size = window.getSize(), - .framebuffer_size = window.getFramebufferSize(), + .framebuffer_size = framebuffer_size, }); const scale: u32 = if (canvas.window_size[1] <= 400) 1 else 2; @@ -400,6 +413,8 @@ fn render(window: seizer.Window) !void { canvas.end(); + try window.swapBuffers(); + frame_count +%= 1; } @@ -414,26 +429,9 @@ pub fn haveWon() bool { return true; } -pub fn makeStandardDeck(allocator: std.mem.Allocator) ![]Card { - var deck = try allocator.alloc(Card, 52); - errdefer allocator.free(deck); - - var next_index: usize = 0; - for (0..4) |suit| { - for (1..14) |rank| { - deck[next_index] = Card{ - .suit = @enumFromInt(suit), - .rank = @intCast(rank), - }; - next_index += 1; - } - } - - return deck; -} - pub fn deselect(pressed: bool) !void { if (!pressed) return; + draw_required = true; if (current_menu_fn) |menu_fn| { try menu_fn(.deselect); } @@ -444,6 +442,7 @@ pub fn deselect(pressed: bool) !void { pub fn doSelectOrPlace(pressed: bool) !void { if (!pressed) return; + draw_required = true; if (current_menu_fn) |menu_fn| { try menu_fn(.select); return; @@ -590,6 +589,7 @@ pub fn doSelectOrPlace(pressed: bool) !void { pub fn moveLeft(pressed: bool) !void { if (!pressed) return; + draw_required = true; if (current_menu_fn) |menu_fn| { _ = menu_fn; return; @@ -620,6 +620,7 @@ pub fn moveLeft(pressed: bool) !void { pub fn moveRight(pressed: bool) !void { if (!pressed) return; + draw_required = true; if (current_menu_fn) |menu_fn| { _ = menu_fn; return; @@ -650,6 +651,7 @@ pub fn moveRight(pressed: bool) !void { pub fn moveUp(pressed: bool) !void { if (!pressed) return; + draw_required = true; if (current_menu_fn) |menu_fn| { return try menu_fn(.up); @@ -687,6 +689,7 @@ pub fn moveUp(pressed: bool) !void { pub fn moveDown(pressed: bool) !void { if (!pressed) return; + draw_required = true; if (current_menu_fn) |menu_fn| { return try menu_fn(.down); } @@ -722,6 +725,7 @@ pub fn moveDown(pressed: bool) !void { pub fn undo(pressed: bool) !void { if (!pressed) return; + draw_required = true; if (history.items.len > 1) { _ = history.pop(); @@ -734,6 +738,7 @@ pub fn undo(pressed: bool) !void { pub fn toggleMenu(pressed: bool) !void { if (!pressed) return; + draw_required = true; if (current_menu_fn == null) { current_menu_fn = menuMain; } else {