allocator: std.mem.Allocator, camera: core.Entity = undefined, cameraSpeed: f32 = 10.0, moveInput: *core.Axis2dBinding = undefined, moveVector: core.Vectorf = .{}, pub var NeonObjectTable: core.EngineObjectVTable = core.EngineObjectVTable.from(@This()); pub fn init(allocator: std.mem.Allocator) !*@This() { const self = try allocator.create(@This()); self.* = .{ .allocator = allocator, }; return self; } const assetReferences = [_]assets.AssetImportReference{ assets.MakeImportRefOptions( "Mesh", "m_empire", .{ .path = "meshes/lost_empire.obj" }, ), assets.MakeImportRefOptions( "Mesh", "m_fox", .{ .path = "gltf-samples/Fox/glTF/Fox.gltf" }, ), }; pub fn prepare(self: *@This()) !void { core.engine_log(">>>>>>> game prepare", .{}); var z = core.tracy.ZoneN(@src(), "PREPARING GAME"); defer z.End(); try core.fs().addContentPath("sampleGame"); try script.loadTypes("scripts"); try script.runScriptFile("scripts/prepare.lua"); try assets.loadList(assetReferences); const exitInput = try core.ActionBinding.create(core.MakeName("exit")); exitInput.addKey(.escape, .keyDown); _ = exitInput.data.addListener(null, onExit); exitInput.activate(); self.camera = try core.createEntity(); const scene = self.camera.addComponent(core.Scene).?; _ = scene; const camera = self.camera.addComponent(rend.CameraComponent).?; rend.setActiveCamera(camera); self.moveInput = try core.Axis2dBinding.create(core.MakeName("movement")); self.moveInput.addKey(.w, 1.0, .y); self.moveInput.addKey(.s, -1.0, .y); self.moveInput.addKey(.d, 1.0, .x); self.moveInput.addKey(.a, -1.0, .x); _ = self.moveInput.data.addListener(self, onMove); self.moveInput.activate(); } fn onMove(ctx: ?*anyopaque, axis: core.Vector2f) void { const self: *@This() = @ptrCast(@alignCast(ctx)); self.moveVector = .{ .x = -axis.x, .z = axis.y, .y = 0.0 }; } pub fn onExit(ctx: ?*anyopaque, action: core.ActionEvent) void { _ = ctx; _ = action; core.exitNow(); } pub fn tick(self: *@This(), dt: f64) void { const fdt: f32 = @floatCast(dt); if (self.camera.get(core.Scene)) |scene| { scene.getPosRot().position = scene.getPosRot().position.add(self.moveVector.fmul(self.cameraSpeed * fdt)); core.engine_log(" camera position >> {any}", .{scene.getPosRot().position}); } } pub fn deinit(self: *@This()) void { self.allocator.destroy(self); } pub fn main() anyerror!void { try backlog.initializeAndRunStandardProgram(@This(), .{ .name = "Hello World", .enabledModules = .{ .physics = true, }, }); } const std = @import("std"); const backlog = @import("Backlog"); const assets = backlog.assets; const core = backlog.core; const rend = backlog.rend; const script = core.script;