diff --git a/src/gui/windows/save_selection.zig b/src/gui/windows/save_selection.zig index e5467724..afe96071 100644 --- a/src/gui/windows/save_selection.zig +++ b/src/gui/windows/save_selection.zig @@ -24,9 +24,7 @@ const padding: f32 = 8; const width: f32 = 128; var buttonNameArena: std.heap.ArenaAllocator = undefined; -fn openWorld(namePtr: usize) void { - const nullTerminatedName: [*:0]const u8 = @ptrFromInt(namePtr); - const name = std.mem.span(nullTerminatedName); +pub fn openWorld(name: []const u8) void { std.log.info("TODO: Open world {s}", .{name}); main.server.thread = std.Thread.spawn(.{}, main.server.start, .{name}) catch |err| { std.log.err("Encountered error while starting server thread: {s}", .{@errorName(err)}); @@ -60,6 +58,12 @@ fn openWorld(namePtr: usize) void { // } catch(InterruptedException e) {} } +fn openWorldWrap(namePtr: usize) void { // TODO: Improve this situation. Maybe it makes sense to always use 2 arguments in the Callback. + const nullTerminatedName: [*:0]const u8 = @ptrFromInt(namePtr); + const name = std.mem.span(nullTerminatedName); + openWorld(name); +} + fn flawedDeleteWorld(name: []const u8) !void { var saveDir = try std.fs.cwd().openDir("saves", .{}); defer saveDir.close(); @@ -128,7 +132,7 @@ pub fn onOpen() Allocator.Error!void { const name = try buttonNameArena.allocator().dupeZ(u8, entry.name); // Null terminate, so we can later recover the string from just the pointer. const buttonName = try std.fmt.allocPrint(buttonNameArena.allocator(), "Play {s}", .{decodedName}); - try row.add(try Button.initText(.{0, 0}, 128, buttonName, .{.callback = &openWorld, .arg = @intFromPtr(name.ptr)})); + try row.add(try Button.initText(.{0, 0}, 128, buttonName, .{.callback = &openWorldWrap, .arg = @intFromPtr(name.ptr)})); try row.add(try Button.initText(.{8, 0}, 64, "delete", .{.callback = &deleteWorld, .arg = @intFromPtr(name.ptr)})); row.finish(.{0, 0}, .center); try list.add(row); diff --git a/src/main.zig b/src/main.zig index dcaa2c28..b3bde17f 100644 --- a/src/main.zig +++ b/src/main.zig @@ -718,6 +718,11 @@ pub fn main() !void { Window.GLFWCallbacks.framebufferSize(undefined, Window.width, Window.height); var lastTime = std.time.nanoTimestamp(); + if(settings.developerAutoEnterWorld.len != 0) { + // Speed up the dev process by entering the world directly. + gui.windowlist.save_selection.openWorld(settings.developerAutoEnterWorld); + } + while(c.glfwWindowShouldClose(Window.window) == 0) { { // Check opengl errors: const err = c.glGetError(); diff --git a/src/settings.zig b/src/settings.zig index 6f9f3d96..355f50c6 100644 --- a/src/settings.zig +++ b/src/settings.zig @@ -38,6 +38,9 @@ pub var guiScale: ?f32 = null; pub var musicVolume: f32 = 1; +pub var developerAutoEnterWorld: []const u8 = ""; + + pub fn init() !void { const json: JsonElement = main.files.readToJson(main.threadAllocator, "settings.json") catch |err| blk: { if(err == error.FileNotFound) break :blk JsonElement{.JsonNull={}};