Core: support configuring window before it opens
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
parent
122a1ea9a7
commit
205a1f33db
10 changed files with 73 additions and 23 deletions
|
|
@ -7,6 +7,7 @@ pub const Mod = mach.Mod(@This());
|
|||
|
||||
pub const systems = .{
|
||||
.init = .{ .handler = init },
|
||||
.after_init = .{ .handler = afterInit },
|
||||
.deinit = .{ .handler = deinit },
|
||||
.tick = .{ .handler = tick },
|
||||
};
|
||||
|
|
@ -20,6 +21,11 @@ pub fn deinit(core: *mach.Core.Mod, game: *Mod) void {
|
|||
}
|
||||
|
||||
fn init(game: *Mod, core: *mach.Core.Mod) !void {
|
||||
core.schedule(.init);
|
||||
game.schedule(.after_init);
|
||||
}
|
||||
|
||||
fn afterInit(game: *Mod, core: *mach.Core.Mod) !void {
|
||||
// Create our shader module
|
||||
const shader_module = core.state().device.createShaderModuleWGSL("shader.wgsl", @embedFile("shader.wgsl"));
|
||||
defer shader_module.release();
|
||||
|
|
@ -62,7 +68,6 @@ fn init(game: *Mod, core: *mach.Core.Mod) !void {
|
|||
core.schedule(.start);
|
||||
}
|
||||
|
||||
// TODO(important): remove need for returning an error here
|
||||
fn tick(core: *mach.Core.Mod, game: *Mod) !void {
|
||||
// TODO(important): event polling should occur in mach.Core module and get fired as ECS event.
|
||||
// TODO(Core)
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ pub fn deinit(core: *mach.Core.Mod, renderer: *Renderer.Mod) void {
|
|||
core.schedule(.deinit);
|
||||
}
|
||||
|
||||
// TODO(important): remove need for returning an error here
|
||||
fn init(
|
||||
// These are injected dependencies - as long as these modules were registered in the top-level
|
||||
// of the program we can have these types injected here, letting us work with other modules in
|
||||
|
|
@ -53,6 +52,7 @@ fn init(
|
|||
renderer: *Renderer.Mod,
|
||||
game: *Mod,
|
||||
) !void {
|
||||
core.schedule(.init);
|
||||
renderer.schedule(.init);
|
||||
|
||||
// Create our player entity.
|
||||
|
|
@ -80,7 +80,6 @@ fn init(
|
|||
core.schedule(.start);
|
||||
}
|
||||
|
||||
// TODO(important): remove need for returning an error here
|
||||
fn tick(
|
||||
entities: *mach.Entities.Mod,
|
||||
core: *mach.Core.Mod,
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ fn deinit(core: *mach.Core.Mod, sprite_pipeline: *gfx.SpritePipeline.Mod, glyphs
|
|||
}
|
||||
|
||||
fn init(core: *mach.Core.Mod, sprite_pipeline: *gfx.SpritePipeline.Mod, glyphs: *Glyphs.Mod, game: *Mod) !void {
|
||||
core.schedule(.init);
|
||||
sprite_pipeline.schedule(.init);
|
||||
glyphs.schedule(.init);
|
||||
|
||||
|
|
@ -55,8 +56,6 @@ fn init(core: *mach.Core.Mod, sprite_pipeline: *gfx.SpritePipeline.Mod, glyphs:
|
|||
|
||||
// Run our init code after glyphs module is initialized.
|
||||
game.schedule(.after_init);
|
||||
|
||||
core.schedule(.start);
|
||||
}
|
||||
|
||||
fn afterInit(
|
||||
|
|
@ -65,6 +64,7 @@ fn afterInit(
|
|||
sprite_pipeline: *gfx.SpritePipeline.Mod,
|
||||
glyphs: *Glyphs.Mod,
|
||||
game: *Mod,
|
||||
core: *mach.Core.Mod,
|
||||
) !void {
|
||||
// Create a sprite rendering pipeline
|
||||
const texture = glyphs.state().texture;
|
||||
|
|
@ -96,6 +96,8 @@ fn afterInit(
|
|||
.time = 0,
|
||||
.pipeline = pipeline,
|
||||
});
|
||||
|
||||
core.schedule(.start);
|
||||
}
|
||||
|
||||
fn tick(
|
||||
|
|
|
|||
|
|
@ -66,8 +66,13 @@ fn init(
|
|||
text_pipeline: *gfx.TextPipeline.Mod,
|
||||
text: *gfx.Text.Mod,
|
||||
sprite_pipeline: *gfx.SpritePipeline.Mod,
|
||||
core: *mach.Core.Mod,
|
||||
game: *Mod,
|
||||
) !void {
|
||||
// If you want to try fullscreen:
|
||||
// try core.set(core.state().main_window, .fullscreen, true);
|
||||
|
||||
core.schedule(.init);
|
||||
audio.schedule(.init);
|
||||
text.schedule(.init);
|
||||
text_pipeline.schedule(.init);
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ pub const components = .{
|
|||
ghost_key_mode: bool = false,
|
||||
|
||||
fn init(core: *mach.Core.Mod, audio: *mach.Audio.Mod, app: *Mod) void {
|
||||
core.schedule(.init);
|
||||
audio.schedule(.init);
|
||||
app.schedule(.after_init);
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ fn init(
|
|||
audio: *mach.Audio.Mod,
|
||||
app: *Mod,
|
||||
) !void {
|
||||
core.schedule(.init);
|
||||
audio.schedule(.init);
|
||||
app.schedule(.after_init);
|
||||
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ pub const Mod = mach.Mod(@This());
|
|||
pub const systems = .{
|
||||
.init = .{ .handler = init },
|
||||
.deinit = .{ .handler = deinit },
|
||||
.after_init = .{ .handler = afterInit },
|
||||
.tick = .{ .handler = tick },
|
||||
.end_frame = .{ .handler = endFrame },
|
||||
};
|
||||
|
|
@ -52,14 +53,22 @@ fn deinit(
|
|||
}
|
||||
|
||||
fn init(
|
||||
core: *mach.Core.Mod,
|
||||
sprite_pipeline: *gfx.SpritePipeline.Mod,
|
||||
game: *Mod,
|
||||
) !void {
|
||||
core.schedule(.init);
|
||||
sprite_pipeline.schedule(.init);
|
||||
game.schedule(.after_init);
|
||||
}
|
||||
|
||||
fn afterInit(
|
||||
entities: *mach.Entities.Mod,
|
||||
core: *mach.Core.Mod,
|
||||
sprite: *gfx.Sprite.Mod,
|
||||
sprite_pipeline: *gfx.SpritePipeline.Mod,
|
||||
game: *Mod,
|
||||
) !void {
|
||||
sprite_pipeline.schedule(.init);
|
||||
|
||||
// We can create entities, and set components on them. Note that components live in a module
|
||||
// namespace, e.g. the `.mach_gfx_sprite` module could have a 3D `.location` component with a different
|
||||
// type than the `.physics2d` module's `.location` component if you desire.
|
||||
|
|
|
|||
|
|
@ -61,10 +61,12 @@ fn deinit(
|
|||
}
|
||||
|
||||
fn init(
|
||||
core: *mach.Core.Mod,
|
||||
text: *gfx.Text.Mod,
|
||||
text_pipeline: *gfx.TextPipeline.Mod,
|
||||
game: *Mod,
|
||||
) !void {
|
||||
core.schedule(.init);
|
||||
text.schedule(.init);
|
||||
text_pipeline.schedule(.init);
|
||||
game.schedule(.after_init);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue