module: make sendGlobal() global args type known
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
parent
3661cb8721
commit
23b03f973f
5 changed files with 23 additions and 24 deletions
|
|
@ -60,12 +60,11 @@ fn init(
|
||||||
core.setTitle("gfx.Sprite example");
|
core.setTitle("gfx.Sprite example");
|
||||||
|
|
||||||
// Tell sprite_mod to use the texture
|
// Tell sprite_mod to use the texture
|
||||||
engine.dispatchNoError(); // TODO: no dispatch in user code
|
|
||||||
const texture = text_mod.state.texture;
|
const texture = text_mod.state.texture;
|
||||||
sprite_mod.send(.init_pipeline, .{Sprite.PipelineOptions{
|
sprite_mod.send(.init_pipeline, .{ .@"0" = Sprite.PipelineOptions{
|
||||||
.pipeline = @intFromEnum(Pipeline.text),
|
.pipeline = @intFromEnum(Pipeline.text),
|
||||||
.texture = texture,
|
.texture = texture,
|
||||||
}});
|
} });
|
||||||
|
|
||||||
// We can create entities, and set components on them. Note that components live in a module
|
// We can create entities, and set components on them. Note that components live in a module
|
||||||
// namespace, e.g. the `Sprite` module could have a 3D `.location` component with a different
|
// namespace, e.g. the `Sprite` module could have a 3D `.location` component with a different
|
||||||
|
|
@ -78,7 +77,7 @@ fn init(
|
||||||
try sprite_mod.set(player, .size, vec2(@floatFromInt(r.width), @floatFromInt(r.height)));
|
try sprite_mod.set(player, .size, vec2(@floatFromInt(r.width), @floatFromInt(r.height)));
|
||||||
try sprite_mod.set(player, .uv_transform, Mat3x3.translate(vec2(@floatFromInt(r.x), @floatFromInt(r.y))));
|
try sprite_mod.set(player, .uv_transform, Mat3x3.translate(vec2(@floatFromInt(r.x), @floatFromInt(r.y))));
|
||||||
try sprite_mod.set(player, .pipeline, @intFromEnum(Pipeline.text));
|
try sprite_mod.set(player, .pipeline, @intFromEnum(Pipeline.text));
|
||||||
sprite_mod.send(.updated, .{@intFromEnum(Pipeline.text)});
|
sprite_mod.send(.updated, .{ .@"0" = @intFromEnum(Pipeline.text) });
|
||||||
|
|
||||||
game.state = .{
|
game.state = .{
|
||||||
.timer = try mach.Timer.start(),
|
.timer = try mach.Timer.start(),
|
||||||
|
|
@ -193,14 +192,14 @@ fn tick(
|
||||||
);
|
);
|
||||||
try sprite_mod.set(game.state.player, .transform, player_transform);
|
try sprite_mod.set(game.state.player, .transform, player_transform);
|
||||||
|
|
||||||
sprite_mod.send(.updated, .{@intFromEnum(Pipeline.text)});
|
sprite_mod.send(.updated, .{ .@"0" = @intFromEnum(Pipeline.text) });
|
||||||
|
|
||||||
// Perform pre-render work
|
// Perform pre-render work
|
||||||
sprite_mod.send(.pre_render, .{@intFromEnum(Pipeline.text)});
|
sprite_mod.send(.pre_render, .{ .@"0" = @intFromEnum(Pipeline.text) });
|
||||||
|
|
||||||
// Render a frame
|
// Render a frame
|
||||||
engine.send(.begin_pass, .{gpu.Color{ .r = 1.0, .g = 1.0, .b = 1.0, .a = 1.0 }});
|
engine.send(.begin_pass, .{ .@"0" = gpu.Color{ .r = 1.0, .g = 1.0, .b = 1.0, .a = 1.0 } });
|
||||||
sprite_mod.send(.render, .{@intFromEnum(Pipeline.text)});
|
sprite_mod.send(.render, .{ .@"0" = @intFromEnum(Pipeline.text) });
|
||||||
engine.send(.end_pass, .{});
|
engine.send(.end_pass, .{});
|
||||||
engine.send(.present, .{}); // Present the frame
|
engine.send(.present, .{}); // Present the frame
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ pub const Mod = mach.Mod(@This());
|
||||||
|
|
||||||
pub const events = .{
|
pub const events = .{
|
||||||
.{ .global = .deinit, .handler = deinit },
|
.{ .global = .deinit, .handler = deinit },
|
||||||
.{ .local = .init, .handler = init },
|
.{ .global = .init, .handler = init },
|
||||||
.{ .local = .prepare, .handler = prepare },
|
.{ .local = .prepare, .handler = prepare },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -67,7 +67,7 @@ fn init(
|
||||||
s.ft = try ft.Library.init();
|
s.ft = try ft.Library.init();
|
||||||
s.face = try s.ft.createFaceMemory(assets.roboto_medium_ttf, 0);
|
s.face = try s.ft.createFaceMemory(assets.roboto_medium_ttf, 0);
|
||||||
|
|
||||||
text_mod.send(.prepare, .{&[_]u21{ '?', '!', 'a', 'b', '#', '@', '%', '$', '&', '^', '*', '+', '=', '<', '>', '/', ':', ';', 'Q', '~' }});
|
text_mod.send(.prepare, .{ .@"0" = &[_]u21{ '?', '!', 'a', 'b', '#', '@', '%', '$', '&', '^', '*', '+', '=', '<', '>', '/', ':', ';', 'Q', '~' } });
|
||||||
}
|
}
|
||||||
|
|
||||||
fn prepare(
|
fn prepare(
|
||||||
|
|
|
||||||
|
|
@ -68,11 +68,11 @@ fn init(
|
||||||
try sprite_mod.set(player, .uv_transform, Mat3x3.translate(vec2(0, 0)));
|
try sprite_mod.set(player, .uv_transform, Mat3x3.translate(vec2(0, 0)));
|
||||||
try sprite_mod.set(player, .pipeline, @intFromEnum(Pipeline.default));
|
try sprite_mod.set(player, .pipeline, @intFromEnum(Pipeline.default));
|
||||||
|
|
||||||
sprite_mod.send(.init_pipeline, .{Sprite.PipelineOptions{
|
sprite_mod.send(.init_pipeline, .{ .@"0" = Sprite.PipelineOptions{
|
||||||
.pipeline = @intFromEnum(Pipeline.default),
|
.pipeline = @intFromEnum(Pipeline.default),
|
||||||
.texture = try loadTexture(engine),
|
.texture = try loadTexture(engine),
|
||||||
}});
|
} });
|
||||||
sprite_mod.send(.updated, .{@intFromEnum(Pipeline.default)});
|
sprite_mod.send(.updated, .{ .@"0" = @intFromEnum(Pipeline.default) });
|
||||||
|
|
||||||
game.state = .{
|
game.state = .{
|
||||||
.timer = try mach.Timer.start(),
|
.timer = try mach.Timer.start(),
|
||||||
|
|
@ -176,14 +176,14 @@ fn tick(
|
||||||
player_pos.v[0] += direction.x() * speed * delta_time;
|
player_pos.v[0] += direction.x() * speed * delta_time;
|
||||||
player_pos.v[1] += direction.y() * speed * delta_time;
|
player_pos.v[1] += direction.y() * speed * delta_time;
|
||||||
try sprite_mod.set(game.state.player, .transform, Mat4x4.translate(player_pos));
|
try sprite_mod.set(game.state.player, .transform, Mat4x4.translate(player_pos));
|
||||||
sprite_mod.send(.updated, .{@intFromEnum(Pipeline.default)});
|
sprite_mod.send(.updated, .{ .@"0" = @intFromEnum(Pipeline.default) });
|
||||||
|
|
||||||
// Perform pre-render work
|
// Perform pre-render work
|
||||||
sprite_mod.send(.pre_render, .{@intFromEnum(Pipeline.default)});
|
sprite_mod.send(.pre_render, .{ .@"0" = @intFromEnum(Pipeline.default) });
|
||||||
|
|
||||||
// Render a frame
|
// Render a frame
|
||||||
engine.send(.begin_pass, .{gpu.Color{ .r = 1.0, .g = 1.0, .b = 1.0, .a = 1.0 }});
|
engine.send(.begin_pass, .{ .@"0" = gpu.Color{ .r = 1.0, .g = 1.0, .b = 1.0, .a = 1.0 } });
|
||||||
sprite_mod.send(.render, .{@intFromEnum(Pipeline.default)});
|
sprite_mod.send(.render, .{ .@"0" = @intFromEnum(Pipeline.default) });
|
||||||
engine.send(.end_pass, .{});
|
engine.send(.end_pass, .{});
|
||||||
engine.send(.present, .{}); // Present the frame
|
engine.send(.present, .{}); // Present the frame
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -108,9 +108,9 @@ fn init(
|
||||||
try text_mod.set(player, .text, text1);
|
try text_mod.set(player, .text, text1);
|
||||||
try text_mod.set(player, .style, styles);
|
try text_mod.set(player, .style, styles);
|
||||||
|
|
||||||
text_mod.send(.init_pipeline, .{Text.PipelineOptions{
|
text_mod.send(.init_pipeline, .{ .@"0" = Text.PipelineOptions{
|
||||||
.pipeline = @intFromEnum(Pipeline.default),
|
.pipeline = @intFromEnum(Pipeline.default),
|
||||||
}});
|
} });
|
||||||
engine.dispatchNoError(); // TODO: no dispatch in user code
|
engine.dispatchNoError(); // TODO: no dispatch in user code
|
||||||
|
|
||||||
game.state = .{
|
game.state = .{
|
||||||
|
|
@ -226,14 +226,14 @@ fn tick(
|
||||||
player_pos.v[0] += direction.x() * speed * delta_time;
|
player_pos.v[0] += direction.x() * speed * delta_time;
|
||||||
player_pos.v[1] += direction.y() * speed * delta_time;
|
player_pos.v[1] += direction.y() * speed * delta_time;
|
||||||
try text_mod.set(game.state.player, .transform, Mat4x4.scaleScalar(upscale).mul(&Mat4x4.translate(player_pos)));
|
try text_mod.set(game.state.player, .transform, Mat4x4.scaleScalar(upscale).mul(&Mat4x4.translate(player_pos)));
|
||||||
text_mod.send(.updated, .{@intFromEnum(Pipeline.default)});
|
text_mod.send(.updated, .{ .@"0" = @intFromEnum(Pipeline.default) });
|
||||||
|
|
||||||
// Perform pre-render work
|
// Perform pre-render work
|
||||||
text_mod.send(.pre_render, .{@intFromEnum(Pipeline.default)});
|
text_mod.send(.pre_render, .{ .@"0" = @intFromEnum(Pipeline.default) });
|
||||||
|
|
||||||
// Render a frame
|
// Render a frame
|
||||||
engine.send(.begin_pass, .{gpu.Color{ .r = 1.0, .g = 1.0, .b = 1.0, .a = 1.0 }});
|
engine.send(.begin_pass, .{ .@"0" = gpu.Color{ .r = 1.0, .g = 1.0, .b = 1.0, .a = 1.0 } });
|
||||||
text_mod.send(.render, .{@intFromEnum(Pipeline.default)});
|
text_mod.send(.render, .{ .@"0" = @intFromEnum(Pipeline.default) });
|
||||||
engine.send(.end_pass, .{});
|
engine.send(.end_pass, .{});
|
||||||
engine.send(.present, .{}); // Present the frame
|
engine.send(.present, .{}); // Present the frame
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ pub fn World(comptime mods: anytype) type {
|
||||||
world.modules.sendToModule(module_tag, event_name, args);
|
world.modules.sendToModule(module_tag, event_name, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub inline fn sendGlobal(m: *@This(), comptime event_name: Modules.GlobalEvent, args: anytype) void {
|
pub inline fn sendGlobal(m: *@This(), comptime event_name: Modules.GlobalEvent, args: Modules.GlobalArgsM(M, event_name)) void {
|
||||||
const mod_ptr: *Mods = @alignCast(@fieldParentPtr(Mods, @tagName(module_tag), m));
|
const mod_ptr: *Mods = @alignCast(@fieldParentPtr(Mods, @tagName(module_tag), m));
|
||||||
const world = @fieldParentPtr(WorldT, "mod", mod_ptr);
|
const world = @fieldParentPtr(WorldT, "mod", mod_ptr);
|
||||||
world.modules.sendGlobal(module_tag, event_name, args);
|
world.modules.sendGlobal(module_tag, event_name, args);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue