diff options
author | sanine <sanine.not@pm.me> | 2023-04-07 00:13:15 -0500 |
---|---|---|
committer | sanine <sanine.not@pm.me> | 2023-04-07 00:13:15 -0500 |
commit | 20f27d6eaee89e6b4950ccf9b3a96ab1e59f9d51 (patch) | |
tree | 994cfa3122c2be45a531856de66e13a955b42515 /main.lua | |
parent | ee3b19aa4f0ec65c159a31d589bbafd4a644610e (diff) |
move new render/transform systems into ecs-systems.lua
Diffstat (limited to 'main.lua')
-rw-r--r-- | main.lua | 94 |
1 files changed, 3 insertions, 91 deletions
@@ -6,7 +6,7 @@ local Vec3 = honey.Vec3 local Mat4 = honey.Mat4 local Quaternion = honey.Quaternion local ecs = honey.ecs -local systems = honey.standardSystems +local stdSystem = honey.standardSystems local ode = honey.ode local nvg = honey.nvg @@ -41,96 +41,8 @@ sdb:addSystem{ } -sdb:addSystem{ - update = function(self, dt) - local entities = self.db:queryComponent("transform") - - -- prepare transforms - for id, transform in pairs(entities) do - transform._visited = false - end - - -- helper function - local function recursiveTransform(transform) - if transform._visited then - return transform._matrix - end - - if not transform.parent then - transform._matrix = transform.matrix - else - local parentTransform = self.db:getComponent(transform.parent, "transform") - local parentMatrix = recursiveTransform(parentTransform) - transform._matrix = parentMatrix * transform.matrix - end - transform._visited = true - return transform._matrix - end - - -- compute transforms - for id, transform in pairs(entities) do - recursiveTransform(transform) - end - end, - db = edb, - priority = 0, -} - -sdb:addSystem{ - camera = camera, - update = function(self, dt) - local cameraParams = self.db:getComponent(camera, "camera") - local cameraTransform = self.db:getComponent(camera, "transform") - local view - if cameraTransform then - view = cameraTransform._matrix - else - view = Mat4():identity() - end - - local entities = self.db:queryComponent("renderMesh") - for entity, tbl in pairs(entities) do - -- get shader - local shader = honey.shader.loadShader(tbl.shader.vertex, tbl.shader.fragment) - shader:use() - - -- bind textures - local texOffset = 0 - for name, texTbl in pairs(tbl.textures or {}) do - local texture = honey.image.loadImage(texTbl.filename, texTbl.params) - gl.BindTexture(gl.TEXTURE_2D + texOffset, texture.texture) - shader:setInt(name, texOffset) - texOffset = texOffset + 1 - end - - -- configure default uniforms - local query = self.db:getComponent(entity, "transform") - local model = (query and query._matrix) or Mat4():identity() - shader:configure{ - float={ - time=glfw.GetTime(), - }, - matrix={ - view=view, - projection=cameraParams.projection, - model=model, - }, - } - - -- draw mesh - local mesh = honey.mesh.loadMesh(tbl.mesh.filename, tbl.mesh.index) - mesh:drawElements() - - -- unbind textures - for i=0,texOffset-1 do - gl.BindTexture(gl.TEXTURE_2D + i, 0) - end - end - end, - db = edb, - priority = 99, -} - +sdb:addSystem(stdSystem.transform, {db=edb}) +sdb:addSystem(stdSystem.renderCamera, {camera=camera, db=edb}) local id = edb:createEntity() edb:addComponent(id, "renderMesh", { |