Add a secret option that allows skipping the menu and automatically entering a world.

This commit is contained in:
IntegratedQuantum 2023-08-27 17:39:54 +02:00
parent 7d4d110b03
commit 4327a50c5e
3 changed files with 16 additions and 4 deletions

View File

@ -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);

View File

@ -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();

View File

@ -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={}};