From fd0e9034318ed84666be78bc07afb0c2124147d5 Mon Sep 17 00:00:00 2001 From: IntegratedQuantum Date: Fri, 17 Mar 2023 11:25:46 +0100 Subject: [PATCH] Refactor: Simplify window creation by limiting it to a single window per namespace. --- src/gui/GuiWindow.zig | 3 ++- src/gui/gui.zig | 6 +++--- src/gui/windows/change_name.zig | 20 +++++++----------- src/gui/windows/controls.zig | 22 ++++++++------------ src/gui/windows/graphics.zig | 20 +++++++----------- src/gui/windows/healthbar.zig | 18 +++++++--------- src/gui/windows/hotbar.zig | 37 +++++++-------------------------- src/gui/windows/main.zig | 18 +++++++--------- src/gui/windows/multiplayer.zig | 20 +++++++----------- src/gui/windows/settings.zig | 20 +++++++----------- src/gui/windows/sound.zig | 20 +++++++----------- src/main.zig | 4 ---- 12 files changed, 76 insertions(+), 132 deletions(-) diff --git a/src/gui/GuiWindow.zig b/src/gui/GuiWindow.zig index 73f296c0..b1499bd8 100644 --- a/src/gui/GuiWindow.zig +++ b/src/gui/GuiWindow.zig @@ -56,7 +56,8 @@ relativePosition: [2]RelativePosition = .{.{.ratio = 0.5}, .{.ratio = 0.5}}, showTitleBar: bool = true, title: []const u8 = "", id: []const u8, -components: []GuiComponent, +components: []GuiComponent = &.{}, +isHud: bool = false, /// Called every frame. renderFn: *const fn()Allocator.Error!void = &defaultErrorFunction, diff --git a/src/gui/gui.zig b/src/gui/gui.zig index 0703a632..9c55f3b9 100644 --- a/src/gui/gui.zig +++ b/src/gui/gui.zig @@ -35,7 +35,7 @@ pub fn init(_allocator: Allocator) !void { hudWindows = std.ArrayList(*GuiWindow).init(allocator); openWindows = std.ArrayList(*GuiWindow).init(allocator); inline for(@typeInfo(windowlist).Struct.decls) |decl| { - try @field(windowlist, decl.name).init(); + try addWindow(&@field(windowlist, decl.name).window); } try GuiWindow.__init(); try Button.__init(); @@ -174,14 +174,14 @@ pub fn updateGuiScale() void { } } -pub fn addWindow(window: *GuiWindow, isHudWindow: bool) !void { +fn addWindow(window: *GuiWindow) !void { for(windowList.items) |other| { if(std.mem.eql(u8, window.id, other.id)) { std.log.err("Duplicate window id: {s}", .{window.id}); return; } } - if(isHudWindow) { + if(window.isHud) { try hudWindows.append(window); window.showTitleBar = false; } diff --git a/src/gui/windows/change_name.zig b/src/gui/windows/change_name.zig index f2dbbccb..eb05a432 100644 --- a/src/gui/windows/change_name.zig +++ b/src/gui/windows/change_name.zig @@ -13,19 +13,15 @@ const Label = @import("../components/Label.zig"); const TextInput = @import("../components/TextInput.zig"); const VerticalList = @import("../components/VerticalList.zig"); -var window: GuiWindow = undefined; var components: [1]GuiComponent = undefined; -pub fn init() !void { - window = GuiWindow{ - .contentSize = Vec2f{128, 256}, - .id = "cubyz:change_name", - .title = "Change Name", - .onOpenFn = &onOpen, - .onCloseFn = &onClose, - .components = &components, - }; - try gui.addWindow(&window, true); -} +pub var window = GuiWindow { + .contentSize = Vec2f{128, 256}, + .id = "cubyz:change_name", + .title = "Change Name", + .onOpenFn = &onOpen, + .onCloseFn = &onClose, + .components = &components, +}; const padding: f32 = 8; diff --git a/src/gui/windows/controls.zig b/src/gui/windows/controls.zig index e6d89902..d1a93ee2 100644 --- a/src/gui/windows/controls.zig +++ b/src/gui/windows/controls.zig @@ -11,20 +11,16 @@ const Button = @import("../components/Button.zig"); const Label = @import("../components/Label.zig"); const VerticalList = @import("../components/VerticalList.zig"); -var window: GuiWindow = undefined; var components: [1]GuiComponent = undefined; -pub fn init() !void { - window = GuiWindow{ - .contentSize = Vec2f{128, 256}, - .id = "cubyz:controls", - .title = "Controls", - .onOpenFn = &onOpen, - .onCloseFn = &onClose, - .renderFn = &render, - .components = &components, - }; - try gui.addWindow(&window, true); -} +pub var window = GuiWindow { + .contentSize = Vec2f{128, 256}, + .id = "cubyz:controls", + .title = "Controls", + .onOpenFn = &onOpen, + .onCloseFn = &onClose, + .renderFn = &render, + .components = &components, +}; const padding: f32 = 8; var selectedKey: ?*main.Key = null; diff --git a/src/gui/windows/graphics.zig b/src/gui/windows/graphics.zig index 87fd1c21..4be3ab17 100644 --- a/src/gui/windows/graphics.zig +++ b/src/gui/windows/graphics.zig @@ -13,19 +13,15 @@ const CheckBox = @import("../components/CheckBox.zig"); const Slider = @import("../components/Slider.zig"); const VerticalList = @import("../components/VerticalList.zig"); -var window: GuiWindow = undefined; var components: [1]GuiComponent = undefined; -pub fn init() !void { - window = GuiWindow{ - .contentSize = Vec2f{128, 256}, - .id = "cubyz:graphics", - .title = "Graphics", - .onOpenFn = &onOpen, - .onCloseFn = &onClose, - .components = &components, - }; - try gui.addWindow(&window, true); -} +pub var window = GuiWindow { + .contentSize = Vec2f{128, 256}, + .id = "cubyz:graphics", + .title = "Graphics", + .onOpenFn = &onOpen, + .onCloseFn = &onClose, + .components = &components, +}; const padding: f32 = 8; diff --git a/src/gui/windows/healthbar.zig b/src/gui/windows/healthbar.zig index 70823cae..d906866d 100644 --- a/src/gui/windows/healthbar.zig +++ b/src/gui/windows/healthbar.zig @@ -8,17 +8,13 @@ const gui = @import("../gui.zig"); const GuiWindow = gui.GuiWindow; const GuiComponent = gui.GuiComponent; -var healthbarWindow: GuiWindow = undefined; -pub fn init() !void { - healthbarWindow = GuiWindow{ - .contentSize = Vec2f{128, 16}, - .title = "Health Bar", - .id = "cubyz:healthbar", - .renderFn = &render, - .components = &[_]GuiComponent{}, - }; - try gui.addWindow(&healthbarWindow, true); -} +pub var window = GuiWindow { + .contentSize = Vec2f{128, 16}, + .title = "Health Bar", + .id = "cubyz:healthbar", + .renderFn = &render, + .isHud = true, +}; pub fn render() Allocator.Error!void { diff --git a/src/gui/windows/hotbar.zig b/src/gui/windows/hotbar.zig index 8c23b4a1..f0d8cf2e 100644 --- a/src/gui/windows/hotbar.zig +++ b/src/gui/windows/hotbar.zig @@ -8,35 +8,14 @@ const gui = @import("../gui.zig"); const GuiComponent = gui.GuiComponent; const GuiWindow = gui.GuiWindow; -var hotbarWindow: GuiWindow = undefined; -var hotbarWindow2: GuiWindow = undefined; -var hotbarWindow3: GuiWindow = undefined; -pub fn init() !void { - hotbarWindow = GuiWindow { - .contentSize = Vec2f{64*8, 64}, - .title = "Hotbar", - .id = "cubyz:hotbar", - .renderFn = &render, - .components = &[_]GuiComponent{}, - }; - try gui.addWindow(&hotbarWindow, true); - hotbarWindow2 = GuiWindow { - .contentSize = Vec2f{64*8, 64}, - .title = "Hotbar2", - .id = "cubyz:hotbar2", - .renderFn = &render, - .components = &[_]GuiComponent{}, - }; - try gui.addWindow(&hotbarWindow2, true); - hotbarWindow3 = GuiWindow { - .contentSize = Vec2f{64*8, 64}, - .title = "Hotbar3", - .id = "cubyz:hotbar3", - .renderFn = &render, - .components = &[_]GuiComponent{}, - }; - try gui.addWindow(&hotbarWindow3, true); -} +pub var window = GuiWindow { + .contentSize = Vec2f{64*8, 64}, + .title = "Hotbar", + .id = "cubyz:hotbar", + .renderFn = &render, + .components = &[_]GuiComponent{}, + .isHud = true, +}; pub fn render() Allocator.Error!void { diff --git a/src/gui/windows/main.zig b/src/gui/windows/main.zig index 1b8bdd6f..5d1dc9b9 100644 --- a/src/gui/windows/main.zig +++ b/src/gui/windows/main.zig @@ -10,18 +10,14 @@ const GuiWindow = gui.GuiWindow; const Button = @import("../components/Button.zig"); const VerticalList = @import("../components/VerticalList.zig"); -var window: GuiWindow = undefined; var components: [1]GuiComponent = undefined; -pub fn init() !void { - window = GuiWindow{ - .contentSize = Vec2f{128, 256}, - .id = "cubyz:main", - .onOpenFn = &onOpen, - .onCloseFn = &onClose, - .components = &components, - }; - try gui.addWindow(&window, true); -} +pub var window = GuiWindow { + .contentSize = Vec2f{128, 256}, + .id = "cubyz:main", + .onOpenFn = &onOpen, + .onCloseFn = &onClose, + .components = &components, +}; pub fn buttonCallbackTest() void { std.log.info("Clicked!", .{}); diff --git a/src/gui/windows/multiplayer.zig b/src/gui/windows/multiplayer.zig index 81377806..023647ed 100644 --- a/src/gui/windows/multiplayer.zig +++ b/src/gui/windows/multiplayer.zig @@ -14,19 +14,15 @@ const Label = @import("../components/Label.zig"); const TextInput = @import("../components/TextInput.zig"); const VerticalList = @import("../components/VerticalList.zig"); -var window: GuiWindow = undefined; var components: [1]GuiComponent = undefined; -pub fn init() !void { - window = GuiWindow{ - .contentSize = Vec2f{128, 256}, - .id = "cubyz:multiplayer", - .title = "Multiplayer", - .onOpenFn = &onOpen, - .onCloseFn = &onClose, - .components = &components, - }; - try gui.addWindow(&window, true); -} +pub var window = GuiWindow { + .contentSize = Vec2f{128, 256}, + .id = "cubyz:multiplayer", + .title = "Multiplayer", + .onOpenFn = &onOpen, + .onCloseFn = &onClose, + .components = &components, +}; const padding: f32 = 8; diff --git a/src/gui/windows/settings.zig b/src/gui/windows/settings.zig index 48fe2a59..fb40a579 100644 --- a/src/gui/windows/settings.zig +++ b/src/gui/windows/settings.zig @@ -10,19 +10,15 @@ const GuiWindow = gui.GuiWindow; const Button = @import("../components/Button.zig"); const VerticalList = @import("../components/VerticalList.zig"); -var window: GuiWindow = undefined; var components: [1]GuiComponent = undefined; -pub fn init() !void { - window = GuiWindow{ - .contentSize = Vec2f{128, 256}, - .id = "cubyz:settings", - .title = "Settings", - .onOpenFn = &onOpen, - .onCloseFn = &onClose, - .components = &components, - }; - try gui.addWindow(&window, true); -} +pub var window: GuiWindow = GuiWindow { + .contentSize = Vec2f{128, 256}, + .id = "cubyz:settings", + .title = "Settings", + .onOpenFn = &onOpen, + .onCloseFn = &onClose, + .components = &components, +}; const padding: f32 = 8; diff --git a/src/gui/windows/sound.zig b/src/gui/windows/sound.zig index 46e9163b..2f0504e7 100644 --- a/src/gui/windows/sound.zig +++ b/src/gui/windows/sound.zig @@ -10,19 +10,15 @@ const GuiWindow = gui.GuiWindow; const Button = @import("../components/Button.zig"); const VerticalList = @import("../components/VerticalList.zig"); -var window: GuiWindow = undefined; var components: [1]GuiComponent = undefined; -pub fn init() !void { - window = GuiWindow{ - .contentSize = Vec2f{128, 256}, - .id = "cubyz:sound", - .title = "Sound TODO", - .onOpenFn = &onOpen, - .onCloseFn = &onClose, - .components = &components, - }; - try gui.addWindow(&window, true); -} +pub var window = GuiWindow { + .contentSize = Vec2f{128, 256}, + .id = "cubyz:sound", + .title = "Sound TODO", + .onOpenFn = &onOpen, + .onCloseFn = &onClose, + .components = &components, +}; const padding: f32 = 8; diff --git a/src/main.zig b/src/main.zig index 85b18bcb..9b1a1ed8 100644 --- a/src/main.zig +++ b/src/main.zig @@ -500,10 +500,6 @@ pub fn main() !void { if(settings.playerName.len == 0) { try gui.openWindow("cubyz:change_name"); } else { - try gui.openWindow("cubyz:hotbar"); - try gui.openWindow("cubyz:hotbar2"); - try gui.openWindow("cubyz:hotbar3"); - try gui.openWindow("cubyz:healthbar"); try gui.openWindow("cubyz:main"); }