From 05dfdca6c6f5118e812319cdbce99a121c177374 Mon Sep 17 00:00:00 2001 From: Ivory Date: Fri, 23 Aug 2024 17:22:01 -0400 Subject: [PATCH] decouple engine and scene --- src/{engine.zig => Engine.zig} | 18 ++++++++++++------ src/Scene.zig | 2 +- src/main.zig | 9 +++++---- src/scenes.zig | 13 +++++++++++++ 4 files changed, 31 insertions(+), 11 deletions(-) rename src/{engine.zig => Engine.zig} (92%) create mode 100644 src/scenes.zig diff --git a/src/engine.zig b/src/Engine.zig similarity index 92% rename from src/engine.zig rename to src/Engine.zig index 0ed5d93..2a38801 100644 --- a/src/engine.zig +++ b/src/Engine.zig @@ -1,3 +1,5 @@ +const Engine = @This(); + const std = @import("std"); const Recti = @import("geometry/Recti.zig"); const Matrix4f = @import("geometry/Matrix4f.zig"); @@ -20,7 +22,13 @@ const HashMap = std.HashMap; // render: fn () void, // update: fn (f32) void, // }; +current_scene: Scene, +pub fn create(initial_scene: Scene) Engine { + return .{ + .current_scene = initial_scene + }; +} fn errorCallback(err: c_int, desc_c: [*c]const u8) callconv(.C) void { const desc: *const u8 = @ptrCast(desc_c); @@ -28,7 +36,7 @@ fn errorCallback(err: c_int, desc_c: [*c]const u8) callconv(.C) void { } // export fn run(game: *const IGame) !void { -pub fn run() !void { +pub fn run(self: *Engine) !void { // in case of errors, set callback early! // for some reason this returns an error function as well?? @@ -87,19 +95,17 @@ pub fn run() !void { const projection = Matrix4f.orthographic(0, @floatFromInt(width), @floatFromInt(height), 0, 0, 100); - var scene = Scene.new(); - defer scene.destroy(); - try scene.start(); - // run the main loop while (c.glfwWindowShouldClose(window) == 0) { shaders.set_projection_matrix(&projection); c.glClear(c.GL_COLOR_BUFFER_BIT | c.GL_DEPTH_BUFFER_BIT); - scene.draw(); + self.current_scene.draw(); // game.render(); // game.update(1.0); c.glfwSwapBuffers(window); c.glfwPollEvents(); + + self.current_scene.update(0.0042); } } diff --git a/src/Scene.zig b/src/Scene.zig index dd869bc..6444789 100644 --- a/src/Scene.zig +++ b/src/Scene.zig @@ -11,7 +11,7 @@ const ArrayList = std.ArrayList; entities: ArrayList(Entity), -pub fn new() Scene { +pub fn create() Scene { const e: ArrayList(Entity) = ArrayList(Entity).init(std.heap.page_allocator); return .{ .entities = e diff --git a/src/main.zig b/src/main.zig index 3bdbdf2..d144400 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1,10 +1,11 @@ const std = @import("std"); -const engine = @import("engine.zig"); +const Engine = @import("Engine.zig"); +// const assets = @import("assets.zig"); +const scenes = @import("scenes.zig"); pub fn main() !void { - - // engine.preload - + // engine.preload(assets.load); + var engine = Engine.create(try scenes.game()); try engine.run(); } diff --git a/src/scenes.zig b/src/scenes.zig new file mode 100644 index 0000000..c65b3c2 --- /dev/null +++ b/src/scenes.zig @@ -0,0 +1,13 @@ +const Scene = @import("Scene.zig"); +const Terrain = @import("Terrain.zig"); + + + +pub fn game() !Scene { + var scene = Scene.create(); + // first try is for allocating more memory in entities + // second try is for allocating terrain on the heap... + try scene.add(try Terrain.create()); + + return scene; +}