summaryrefslogtreecommitdiff
path: root/main.lua
diff options
context:
space:
mode:
Diffstat (limited to 'main.lua')
-rw-r--r--main.lua88
1 files changed, 16 insertions, 72 deletions
diff --git a/main.lua b/main.lua
index 8dd9207..0019711 100644
--- a/main.lua
+++ b/main.lua
@@ -1,6 +1,5 @@
require 'honey.std'
-
local glfw = honey.glfw
local gl = honey.gl
local Vec3 = honey.Vec3
@@ -9,86 +8,41 @@ local ecs = honey.ecs
local systems = honey.standardSystems
--- camera matrices
+-- initialize honey
+local window = honey.init()
+
+-- create camera matrices
local camera = {
view=Mat4():identity():translate(Vec3{0, 0, -60}),
projection=Mat4():perspective(math.rad(45), 640/480, 0.1, 100),
}
-
-
+-- setup ecs
local level = ecs.Level()
level:addSystem(systems.transformCascade)
level:addSystem(systems.renderCam(camera))
level:addSystem(systems.update)
-
-
-local window = honey.init()
-gl.Enable(gl.DEPTH_TEST)
-
-
-
-local vertexShaderSource = [[
-#version 410 core
-layout (location = 0) in vec3 in_position;
-layout (location = 1) in vec3 in_normal;
-layout (location = 2) in vec2 in_tex;
-
-uniform mat4 model;
-uniform mat4 view;
-uniform mat4 projection;
-
-out vec3 position;
-out vec3 normal;
-out vec2 tex;
-
-void main()
-{
- gl_Position = projection * view * model * vec4(in_position, 1.0);
- position = in_position;
- //normal = vec3(model * vec4(in_normal, 1.0f));
- normal = in_normal;
- tex = in_tex;
-}
-]]
-
-local fragmentShaderSource = [[
-#version 410 core
-out vec4 FragColor;
-
-in vec3 position;
-in vec3 normal;
-in vec2 tex;
-
-uniform sampler2D ourTexture;
-
-void main()
-{
- FragColor = vec4(normal, 1.0f);
- //FragColor = vec4(tex, 1.0f, 1.0f);
- //FragColor = texture(ourTexture, TexCoord);
-}
-]]
-
+-- create shader
local shader = honey.Shader{
- vertex = vertexShaderSource,
- fragment = fragmentShaderSource,
+ vertexFile = "vertex.glsl",
+ fragmentFile = "fragment.glsl",
}
+-- load models
local tetra = honey.mesh.loadFile("assets/tetrahedron.obj")[1]
local cube = honey.mesh.loadFile("assets/cube.obj")[1]
local octa = honey.mesh.loadFile("assets/octahedron.obj")[1]
local dodeca = honey.mesh.loadFile("assets/dodecahedron.obj")[1]
local icosa = honey.mesh.loadFile("assets/icosahedron.obj")[1]
-
+-- update function for each entity
function updateTransform(self, dt)
self.transform:rotateY(0.3 * math.pi * dt)
self.transform:rotateX(0.1 * math.pi * dt)
end
-
+-- create entities
function growLine(prev, depth)
if depth == 0 then return prev end
@@ -104,7 +58,6 @@ function growLine(prev, depth)
return growLine(entity, depth-1)
end
-
local leaf = {
transform=Mat4():identity():translate(Vec3{2, 0, 0}),
parent=false,
@@ -114,28 +67,19 @@ local leaf = {
local root = growLine(leaf, 24)
level:addEntity(root)
-
+-- close window on ESCAPE key
window:setKeyCallback(function(_, key)
if key == glfw.KEY_ESCAPE then
window:setShouldClose(true)
end
end)
-
-
-local prevTime = 0
-while not window:shouldClose() do
- local time = glfw.GetTime()
- local dt = time - prevTime
- prevTime = time
-
+-- main loop
+honey.loop(window, function(dt)
gl.ClearColor(0.2, 0.4, 1.0, 1.0)
gl.Clear(gl.COLOR_BUFFER_BIT + gl.DEPTH_BUFFER_BIT)
-
level:update(dt)
+end)
- window:swapBuffers()
- glfw.PollEvents()
-end
-
+-- clean up
honey.terminate()