feat: show throbber while win count is loading
parent
e157502750
commit
e4d34632aa
42
src/main.zig
42
src/main.zig
|
@ -8,7 +8,6 @@ var context_global: *seizer.Context = undefined;
|
||||||
var window_global: seizer.Window = undefined;
|
var window_global: seizer.Window = undefined;
|
||||||
var canvas: seizer.Canvas = undefined;
|
var canvas: seizer.Canvas = undefined;
|
||||||
var card_tilemap: ?DeckSprites = null;
|
var card_tilemap: ?DeckSprites = null;
|
||||||
var invert_y: bool = false;
|
|
||||||
|
|
||||||
var draw_pile: std.ArrayListUnmanaged(Card) = .{};
|
var draw_pile: std.ArrayListUnmanaged(Card) = .{};
|
||||||
var draw_pile_exhausted = false;
|
var draw_pile_exhausted = false;
|
||||||
|
@ -34,8 +33,9 @@ const MENU_ITEMS = [_][]const u8{
|
||||||
"Quit",
|
"Quit",
|
||||||
};
|
};
|
||||||
|
|
||||||
var win_count: u32 = 0;
|
var win_count: ?u32 = null;
|
||||||
var win_triggered: bool = false;
|
var win_triggered: bool = false;
|
||||||
|
var frame_count: u64 = 0;
|
||||||
|
|
||||||
pub fn init(context: *seizer.Context) !void {
|
pub fn init(context: *seizer.Context) !void {
|
||||||
context_global = context;
|
context_global = context;
|
||||||
|
@ -52,8 +52,6 @@ pub fn init(context: *seizer.Context) !void {
|
||||||
canvas = try seizer.Canvas.init(context.gpa, .{});
|
canvas = try seizer.Canvas.init(context.gpa, .{});
|
||||||
errdefer canvas.deinit();
|
errdefer canvas.deinit();
|
||||||
|
|
||||||
invert_y = std.mem.eql(u8, context.backend.name, "linux");
|
|
||||||
|
|
||||||
card_tilemap = try assets.loadSolitaireCards(context.gpa);
|
card_tilemap = try assets.loadSolitaireCards(context.gpa);
|
||||||
|
|
||||||
try resetGame();
|
try resetGame();
|
||||||
|
@ -138,7 +136,7 @@ fn onWinCountRead(userdata: ?*anyopaque, result: seizer.Context.FileError![]cons
|
||||||
defer gpa.free(buffer);
|
defer gpa.free(buffer);
|
||||||
|
|
||||||
if (result) |bytes| {
|
if (result) |bytes| {
|
||||||
if (bytes.len >= @sizeOf(@TypeOf(win_count))) {
|
if (bytes.len >= @sizeOf(u32)) {
|
||||||
win_count = std.mem.readInt(u32, bytes[0..4], .little);
|
win_count = std.mem.readInt(u32, bytes[0..4], .little);
|
||||||
}
|
}
|
||||||
} else |_| {}
|
} else |_| {}
|
||||||
|
@ -214,11 +212,11 @@ fn destroy(window: seizer.Window) void {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render(window: seizer.Window) !void {
|
fn render(window: seizer.Window) !void {
|
||||||
if (haveWon() and !win_triggered) {
|
if (haveWon() and !win_triggered and win_count != null) {
|
||||||
win_count += 1;
|
win_count.? += 1;
|
||||||
|
|
||||||
const win_count_write_buffer = try gpa.create(u32);
|
const win_count_write_buffer = try gpa.create(u32);
|
||||||
std.mem.writeInt(u32, std.mem.asBytes(win_count_write_buffer), win_count, .little);
|
std.mem.writeInt(u32, std.mem.asBytes(win_count_write_buffer), win_count.?, .little);
|
||||||
context_global.writeFile(.{
|
context_global.writeFile(.{
|
||||||
.appname = APPNAME,
|
.appname = APPNAME,
|
||||||
.path = "win_count.bin",
|
.path = "win_count.bin",
|
||||||
|
@ -237,7 +235,6 @@ fn render(window: seizer.Window) !void {
|
||||||
canvas.begin(.{
|
canvas.begin(.{
|
||||||
.window_size = window.getSize(),
|
.window_size = window.getSize(),
|
||||||
.framebuffer_size = window.getFramebufferSize(),
|
.framebuffer_size = window.getFramebufferSize(),
|
||||||
.invert_y = invert_y,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const scale: u32 = if (canvas.window_size[1] <= 400) 1 else 2;
|
const scale: u32 = if (canvas.window_size[1] <= 400) 1 else 2;
|
||||||
|
@ -267,14 +264,35 @@ fn render(window: seizer.Window) !void {
|
||||||
(canvas.window_size[1] - space_taken_by_board[1]) / 2,
|
(canvas.window_size[1] - space_taken_by_board[1]) / 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
{
|
if (win_count) |w| {
|
||||||
_ = canvas.printText(
|
_ = canvas.printText(
|
||||||
.{
|
.{
|
||||||
canvas.window_size[0] - board_offset[0] - marginf - hand_offsetf[0],
|
canvas.window_size[0] - board_offset[0] - marginf - hand_offsetf[0],
|
||||||
board_offset[1] + marginf + hand_offsetf[1],
|
board_offset[1] + marginf + hand_offsetf[1],
|
||||||
},
|
},
|
||||||
"Win Count: {}",
|
"Win Count: {}",
|
||||||
.{win_count},
|
.{w},
|
||||||
|
.{ .@"align" = .right, .scale = scalef },
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
const throbber_character: u8 = switch ((frame_count / 5) % 8) {
|
||||||
|
0 => '-',
|
||||||
|
1 => '\\',
|
||||||
|
2 => '|',
|
||||||
|
3 => '/',
|
||||||
|
4 => '-',
|
||||||
|
5 => '\\',
|
||||||
|
6 => '|',
|
||||||
|
7 => '/',
|
||||||
|
else => unreachable,
|
||||||
|
};
|
||||||
|
_ = canvas.printText(
|
||||||
|
.{
|
||||||
|
canvas.window_size[0] - board_offset[0] - marginf - hand_offsetf[0],
|
||||||
|
board_offset[1] + marginf + hand_offsetf[1],
|
||||||
|
},
|
||||||
|
"Win Count: [{c}]",
|
||||||
|
.{throbber_character},
|
||||||
.{ .@"align" = .right, .scale = scalef },
|
.{ .@"align" = .right, .scale = scalef },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -432,6 +450,8 @@ fn render(window: seizer.Window) !void {
|
||||||
}
|
}
|
||||||
|
|
||||||
canvas.end();
|
canvas.end();
|
||||||
|
|
||||||
|
frame_count +%= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn haveWon() bool {
|
pub fn haveWon() bool {
|
||||||
|
|
Loading…
Reference in New Issue