decouple engine and scene
parent
2ebfdb8db0
commit
05dfdca6c6
|
|
@ -1,3 +1,5 @@
|
||||||
|
const Engine = @This();
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const Recti = @import("geometry/Recti.zig");
|
const Recti = @import("geometry/Recti.zig");
|
||||||
const Matrix4f = @import("geometry/Matrix4f.zig");
|
const Matrix4f = @import("geometry/Matrix4f.zig");
|
||||||
|
|
@ -20,7 +22,13 @@ const HashMap = std.HashMap;
|
||||||
// render: fn () void,
|
// render: fn () void,
|
||||||
// update: fn (f32) 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 {
|
fn errorCallback(err: c_int, desc_c: [*c]const u8) callconv(.C) void {
|
||||||
const desc: *const u8 = @ptrCast(desc_c);
|
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 {
|
// export fn run(game: *const IGame) !void {
|
||||||
pub fn run() !void {
|
pub fn run(self: *Engine) !void {
|
||||||
|
|
||||||
// in case of errors, set callback early!
|
// in case of errors, set callback early!
|
||||||
// for some reason this returns an error function as well??
|
// 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);
|
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
|
// run the main loop
|
||||||
while (c.glfwWindowShouldClose(window) == 0) {
|
while (c.glfwWindowShouldClose(window) == 0) {
|
||||||
shaders.set_projection_matrix(&projection);
|
shaders.set_projection_matrix(&projection);
|
||||||
c.glClear(c.GL_COLOR_BUFFER_BIT | c.GL_DEPTH_BUFFER_BIT);
|
c.glClear(c.GL_COLOR_BUFFER_BIT | c.GL_DEPTH_BUFFER_BIT);
|
||||||
scene.draw();
|
self.current_scene.draw();
|
||||||
// game.render();
|
// game.render();
|
||||||
// game.update(1.0);
|
// game.update(1.0);
|
||||||
|
|
||||||
c.glfwSwapBuffers(window);
|
c.glfwSwapBuffers(window);
|
||||||
c.glfwPollEvents();
|
c.glfwPollEvents();
|
||||||
|
|
||||||
|
self.current_scene.update(0.0042);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -11,7 +11,7 @@ const ArrayList = std.ArrayList;
|
||||||
|
|
||||||
entities: ArrayList(Entity),
|
entities: ArrayList(Entity),
|
||||||
|
|
||||||
pub fn new() Scene {
|
pub fn create() Scene {
|
||||||
const e: ArrayList(Entity) = ArrayList(Entity).init(std.heap.page_allocator);
|
const e: ArrayList(Entity) = ArrayList(Entity).init(std.heap.page_allocator);
|
||||||
return .{
|
return .{
|
||||||
.entities = e
|
.entities = e
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
|
|
||||||
const std = @import("std");
|
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 {
|
pub fn main() !void {
|
||||||
|
// engine.preload(assets.load);
|
||||||
// engine.preload
|
var engine = Engine.create(try scenes.game());
|
||||||
|
|
||||||
try engine.run();
|
try engine.run();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue