125 lines
2.4 KiB
Markdown
125 lines
2.4 KiB
Markdown
**Includes**
|
|
- Plugins
|
|
- Scheduler
|
|
- Resources
|
|
- Events
|
|
- ECS (Archetype)
|
|
|
|
**Plugin**
|
|
``` zig
|
|
pub const plugin: App.plugin.Plugin = .{
|
|
.name = "Renderer",
|
|
.description = "Vulkan Renderer",
|
|
.build = build,
|
|
};
|
|
```
|
|
|
|
**System**
|
|
``` zig
|
|
pub fn render(ctx: App.scheduler.Context) !void {
|
|
// --- GET RESOURCES ---
|
|
const res = try ctx.app.resources.getMany(struct {
|
|
window: *Window,
|
|
device: *Device,
|
|
render_frame: ?*RenderFrame,
|
|
});
|
|
|
|
if (res.render_frame) |rf| {
|
|
_ = rf;
|
|
}
|
|
}
|
|
```
|
|
|
|
**Simple Events**
|
|
``` zig
|
|
// --- SEND MANY EVENTS ---
|
|
try app.events.sendMany(&.{
|
|
event.AppExit{
|
|
.reason = "Yes",
|
|
},
|
|
});
|
|
|
|
// --- MAIN GAME LOOP ---
|
|
while (true) {
|
|
// --- USE AND EAT EVENT ---
|
|
if (app.events.consume(event.AppExit)) |app_exit| {
|
|
std.debug.print("Exit Reason: {s}\n", .{
|
|
app_exit.reason,
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
```
|
|
|
|
**Event Queue**
|
|
``` zig
|
|
const Register = struct {
|
|
username: []const u8,
|
|
};
|
|
|
|
// --- QUEUE ---
|
|
if (app.events.get(event.Register)) |queue| {
|
|
// --- GET EVERY EVENT ---
|
|
for (queue.items()) |register| {
|
|
// --- DEBUG ---
|
|
std.debug.print("New Register: Username(s)\n", .{
|
|
register.username
|
|
});
|
|
// ...
|
|
}
|
|
// --- CLEAR EVENT QUEUE ---
|
|
queue.clear();
|
|
}
|
|
```
|
|
|
|
**Simple**
|
|
``` zig
|
|
test "Main" {
|
|
// --- APP ---
|
|
var app: Self = .init(std.testing.allocator);
|
|
defer app.deinit();
|
|
|
|
{ // PLUGINS
|
|
// --- ADD PLUGINS ---
|
|
try app.plugins.addMany(&.{
|
|
example.simple.plugin,
|
|
});
|
|
|
|
// --- BUILD PLUGINS ---
|
|
try app.plugins.build(.{
|
|
.app = &app,
|
|
});
|
|
}
|
|
|
|
{ // SYSTEMS
|
|
try app.schedules.runMany(&.{
|
|
example.simple.stage.Init,
|
|
example.simple.stage.Inputs,
|
|
example.simple.stage.Update,
|
|
example.simple.stage.Draw,
|
|
example.simple.stage.Deinit,
|
|
}, .{
|
|
.app = &app,
|
|
});
|
|
}
|
|
}
|
|
```
|
|
|
|
**Default App Stages**
|
|
``` zig
|
|
pub const stage = struct {
|
|
// --- LIFETIME ---
|
|
pub const init = struct {};
|
|
pub const deinit = struct {};
|
|
|
|
// --- FRAME ---
|
|
pub const begin_frame = struct {};
|
|
pub const end_frame = struct {};
|
|
|
|
// --- CORE ---
|
|
pub const inputs = struct {};
|
|
pub const fixed_update = struct {};
|
|
pub const update = struct {};
|
|
pub const draw = struct {};
|
|
};
|
|
```
|