NYXEngine/src/main.zig
2026-07-28 23:30:07 +01:00

69 lines
1.9 KiB
Zig

//! ----------------------------------------------------
//! ----------------------------------------------------
//
// LIBS
//
const std = @import("std");
const App = @import("app");
//
// PLUGINS
//
const template = @import("plugins/template/root.zig");
const common = @import("plugins/common/root.zig");
const platform = @import("plugins/platform/root.zig");
const device = @import("plugins/device/root.zig");
const window = @import("plugins/window/root.zig");
const cache = @import("plugins/cache/root.zig");
const input = @import("plugins/input/root.zig");
const renderer = @import("plugins/renderer/root.zig");
/// ----------------------------------------------------
/// ----------------------------------------------------
pub fn main(init: std.process.Init) !void {
// --- APP ---
var app: App = .init(init.gpa);
defer app.deinit();
// --- ADD PLUGINS ---
try app.plugins.addMany(&.{
platform.plugin,
device.plugin,
window.plugin,
cache.plugin,
input.plugin,
renderer.plugin,
});
try app.plugins.build(&app);
{ // DEBUG
std.debug.print("\x1b[33m┏━\x1b[0m PLUGINS\n", .{});
for (app.plugins.data.items) |plugin| {
std.debug.print("\x1b[33m┃\x1b[0m {s:<12} {s}\n", .{ plugin.name, plugin.description });
}
std.debug.print("\x1b[33m┗━\x1b[0m\n", .{});
}
// --- LIFETIME ---
try app.schedules.run(App.stage.init, &app);
defer app.schedules.runReversed(App.stage.deinit, &app) catch unreachable;
// --- MAIN LOOP ---
while (true) {
// --- # ---
if (app.events.consume(App.event.AppExit)) |_| break;
// --- # ---
try app.schedules.runMany(&.{
App.stage.begin_frame,
App.stage.inputs,
App.stage.fixed_update,
App.stage.update,
App.stage.draw,
App.stage.end_frame,
}, &app);
}
}