require 'honey.std' local gl = honey.gl -- initialize honey honey.init() local db = honey.ecs.EntityDb() local systems = honey.ecs.SystemDb(db) local space = honey.ode.HashSpaceCreate(honey.ode.Space0) systems:addSystems(honey.ecs.node.system) systems:addSystems(honey.ecs.render.system, {drawGeoms=true}) systems:addSystems(honey.ecs.script.system) systems:addSystems(honey.ecs.collision.system, { space=space }) -- camera db:createEntityWithComponents{ node = { matrix = Mat4() :identity() :translate(Vec3{0,0,4}), }, camera = { projection = Mat4() :perspective(90, 640/480, 0.1, 1000) }, } -- skybox db:createEntityWithComponents{ node = { matrix = Mat4() :identity(), }, renderMesh = { mesh = { filename = "assets/skybox.obj", index = 1, }, uniforms = { textures = { surface = { filename = "starfield2.png" }, }, }, shader = { vertex = "builtin.basic3d.vert", fragment = "builtin.flat.frag" }, }, } -- mesh db:createEntityWithComponents{ node = { matrix = Mat4() :identity(), }, renderMesh = { mesh = { filename = "builtin.tube", index = 1, }, uniforms = { textures = { ourTexture = { filename = "assets/green-grass.jpg" }, }, }, shader = { vertex="vertex.glsl", fragment="fragment.glsl" }, }, collision = { class = "capsule", radius = 1, length = 2, lx = 2, ly = 2, lz = 2, }, script = { script = "scripts.rotate" }, } honey.loop(function(dt) gl.ClearColor(0xa/0xff, 0x10/0xff, 0x1f/0xff, 1.0) gl.Clear(gl.COLOR_BUFFER_BIT + gl.DEPTH_BUFFER_BIT + gl.STENCIL_BUFFER_BIT) systems:update(dt) end) -- clean up honey.terminate()