summaryrefslogtreecommitdiff
path: root/main.lua
diff options
context:
space:
mode:
authorsanine <sanine.not@pm.me>2023-04-07 00:13:15 -0500
committersanine <sanine.not@pm.me>2023-04-07 00:13:15 -0500
commit20f27d6eaee89e6b4950ccf9b3a96ab1e59f9d51 (patch)
tree994cfa3122c2be45a531856de66e13a955b42515 /main.lua
parentee3b19aa4f0ec65c159a31d589bbafd4a644610e (diff)
move new render/transform systems into ecs-systems.lua
Diffstat (limited to 'main.lua')
-rw-r--r--main.lua94
1 files changed, 3 insertions, 91 deletions
diff --git a/main.lua b/main.lua
index 38556ca..c5d3aa6 100644
--- a/main.lua
+++ b/main.lua
@@ -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", {