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" }, }, } local parent = db:createEntityWithComponents{ node = { matrix = Mat4() :identity() }, script = { script = "scripts.update" }, } -- mesh db:createEntityWithComponents{ node = { parent = parent, matrix = Mat4() :identity() :rotateX(0.5*math.pi) :rotateZ(0.5*math.pi) }, renderMesh = { mesh = { filename = "builtin.tube", index = 1, }, uniforms = { textures = { ourTexture = { filename = "assets/green-grass.jpg" }, }, }, shader = { vertex="vertex.glsl", fragment="fragment.glsl" }, }, collision = { class = "ray", radius = 1, length = 4, lx = 2, ly = 2, lz = 2, }, onCollision = { script = "scripts.collide" }, } -- box? db:createEntityWithComponents{ node = { matrix = Mat4() :identity() :translate(Vec3{0,-3,0}) }, collision = { class = "box", lx = 1, ly=1, lz=1, }, } 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()