summaryrefslogtreecommitdiff
path: root/main.lua
diff options
context:
space:
mode:
Diffstat (limited to 'main.lua')
-rw-r--r--main.lua231
1 files changed, 44 insertions, 187 deletions
diff --git a/main.lua b/main.lua
index 10ffebe..c251071 100644
--- a/main.lua
+++ b/main.lua
@@ -1,197 +1,54 @@
require 'honey.std'
--- initialize honey
-window = honey.init()
-window:setInputMode(glfw.CURSOR, glfw.CURSOR_DISABLED)
-
--- setup vector graphics
-local vg = nvg.CreateContext()
-local november = nvg.CreateFont(vg, "November", "assets/november.regular.ttf")
-local vw, vh = 640, 480
-
--- setup physics
-local space = ode.HashSpaceCreate(ode.Space0)
-local world = ode.WorldCreate()
-ode.WorldSetGravity(world, 0, -10, 0)
-ode.WorldSetCFM(world, 1e-5)
-local physicsGc = honey.util.gc_canary(function()
- ode.SpaceDestroy(space)
- ode.WorldDestroy(world)
-end)
-
-
--- setup ecs
-local entities = honey.ecs.EntityDb()
-local systems = honey.ecs.SystemDb(entities)
-local script = honey.ecs.script
-systems:addSystem(honey.ecs.node.system)
-systems:addSystem(honey.ecs.render.system)
-systems:addSystem(honey.ecs.script.system)
-systems:addSystem(honey.ecs.collision.system, {space=space})
-systems:addSystem(honey.ecs.physics.system, {space=space, world=world})
-
-function setupEntities()
- local terrain = entities:createEntityWithComponents{
- node = {
- matrix = Mat4():identity():translate(Vec3{4,0,0}),
- },
- renderMesh = {
- textures = {
- ourTexture = {
- filename = "assets/green+grass-1024x1024.jpg",
- },
- },
- shader = {
- vertex = "vertex.glsl",
- fragment = "fragment.glsl",
- },
- mesh = { filename = "assets/terrain.obj", index=1 },
- },
- collision = {
- class = "trimesh",
- filename = "assets/terrain.obj",
- },
- }
-
--- local plane = entities:createEntity()
--- entities:addComponents(plane, {
--- node = {
--- matrix = Mat4()
--- :identity()
--- :rotateZ(math.rad(5))
--- },
--- collision = {
--- class = "plane",
--- },
--- })
---
--- local planeMesh = entities:createEntityWithComponents{
--- node = {
--- parent = plane,
--- matrix = Mat4():identity():rotateX(0.5*math.pi):scale(Vec3{20,20,20}),
--- },
--- renderMesh = {
--- textures = {
--- ourTexture={
--- filename="assets/green+grass-1024x1024.jpg"
--- }
--- },
--- shader = { vertex="vertex.glsl", fragment="fragment.glsl" },
--- mesh = { filename="builtin.quad", index=1 },
--- },
--- }
-
-
-
- local id = entities:createEntity()
- entities:addComponents(id, {
- renderMesh = {
- textures = {
- ourTexture={ filename="77155.png" }
- },
- shader = { vertex="vertex.glsl", fragment="fragment.glsl" },
- mesh = { filename="assets/icosahedron.obj", index=1 },
- },
- node = {
- matrix = Mat4()
- :identity()
- :translate(Vec3{0,1,0})
- :rotateZ(math.rad(45)),
- },
- collision = {
- class = "sphere",
- radius = 1,
- },
- physics = {
- mass = {
- class = "sphere",
- density = 1,
- radius = 1,
- },
- surface = true,
- velocity = Vec3{ 0, 0, 0 },
- angularVelocity = Vec3{ 0, 0, 0 },
- },
- })
-
- local id2 = entities:createEntity()
- entities:addComponents(id2, {
- renderMesh = {
- shader = { vertex="vertex.glsl", fragment="fragment.glsl" },
- --mesh = { filename="assets/tetrahedron.obj", index=1 },
- mesh = { filename="builtin.quad", index=1 },
- },
- node = {
- parent=id,
- matrix=Mat4():identity():translate(Vec3{0, 2, 0}),
- },
- })
-
- local quad = entities:createEntity()
- entities:addComponents(quad, {
- renderQuad = {
- shader = { vertex="vertex.glsl", fragment="fragment.glsl" },
- textures = { ourTexture = { filename = "44d9a0ec1c18e6126a5e9d9d9317f5ac.png" } },
- },
- })
-
- require('character')(entities)
-
- local skybox = entities:createEntityWithComponents{
- node = {
- matrix = Mat4():identity():scale(Vec3{2,2,2}):rotateX(math.rad(90))
- },
- renderMesh = {
- mesh = {
- filename="assets/skybox.obj",
- index=1,
- },
- shader = { vertex="vertex.glsl", fragment="fragment.glsl" },
- textures = {
- ourTexture = {
- filename = "assets/skyboxsun5deg2_tn.jpg"
- --filename = "assets/skybox.png"
- }
- },
- },
- }
-
- local misc = entities:createEntityWithComponents{
- onKey = { script = "scripts.loadSaveQuit" },
- onFramebufferSize = { script = "scripts.viewportResize" },
- }
-end
-setupEntities()
+local gl = honey.gl
-
--- connect event handler scripts
-window:bindEvents(entities)
-
---entities:load("save")
-
-
--- main loop
-local time = 0
-honey.loop(window, function(dt)
- time = time + dt
- if time > 1 then
- time = time-1
- print(collectgarbage("count"))
- end
+-- initialize honey
+honey.init()
+
+
+local db = honey.ecs.EntityDb()
+local systems = honey.ecs.SystemDb(db)
+
+systems:addSystems(honey.ecs.node.system)
+systems:addSystems(honey.ecs.render.system)
+systems:addSystems(honey.ecs.script.system)
+
+-- camera
+db:createEntityWithComponents{
+ node = {
+ matrix = Mat4()
+ :identity()
+ :translate(Vec3{0,0,10}),
+ },
+ camera = {
+ projection = Mat4()
+ :perspective(90, 640/480, 0.1, 1000)
+ },
+}
+
+-- mesh
+db:createEntityWithComponents{
+ node = {
+ matrix = Mat4()
+ :identity(),
+ },
+ renderMesh = {
+ mesh = {
+ filename = "assets/dodecahedron.obj",
+ index = 1,
+ },
+ textures = {
+ ourTexture = { filename = "assets/green-grass.jpg" },
+ },
+ shader = { vertex="vertex.glsl", fragment="fragment.glsl" },
+ },
+}
+
+honey.loop(function(dt)
gl.ClearColor(0.2, 0.4, 1.0, 1.0)
gl.Clear(gl.COLOR_BUFFER_BIT + gl.DEPTH_BUFFER_BIT + gl.STENCIL_BUFFER_BIT)
-
- gl.Enable(gl.DEPTH_TEST)
- gl.Disable(gl.CULL_FACE)
-
systems:update(dt)
- nvg.BeginFrame(vg, vw, vh, 1.0)
- nvg.StrokeColor(vg, nvg.RGBf(1, 1, 1))
- nvg.FontFace(vg, "November")
- nvg.Text(vg, 50, 50, "fps: "..tostring(math.floor(1/dt)))
- nvg.EndFrame(vg)
end)
-
-- clean up
honey.terminate()