summaryrefslogtreecommitdiff
path: root/main.lua
diff options
context:
space:
mode:
Diffstat (limited to 'main.lua')
-rw-r--r--main.lua113
1 files changed, 63 insertions, 50 deletions
diff --git a/main.lua b/main.lua
index 2540c01..cca90b4 100644
--- a/main.lua
+++ b/main.lua
@@ -1,22 +1,31 @@
-local game = require 'game'
-local physics = require 'physics'
+require "globals"
+
+local Transform = require 'Transform'
+local Drawable = require 'Drawable'
+local Input = require 'Input'
+local Camera = require 'Camera'
local Bolvis = require 'Bolvis'
-local stuff = require 'stuff'
+--local stuff = require 'stuff'
+local world = require 'world'
+local level
local camera
function love.load()
+ love.setDeprecationOutput(false)
+
love.mouse.setRelativeMode(true)
+ level = world()
+
+ local bolvis = level:object(Transform {pos = {960, 540}}, Bolvis())
+ camera = bolvis[Bolvis].i.camera[Camera]
- local bolvis = Bolvis({960, 540})
- camera = bolvis.camera
-
- stuff.Teapot({400, 540}, 0)
- stuff.Apioform({600, 540}, 0)
- stuff.TestPlatform({960, 300})
- stuff.TestPlatform({960, 700})
- stuff.TestPlatform({430, 700})
- stuff.TestPlatform({1490, 700})
+ -- level:object(Transform {pos = {400, 540}}, stuff.Teapot())
+ -- level:object(Transform {pos = {600, 540}}, stuff.Apioform())
+ -- level:object(Transform {pos = {960, 300}}, stuff.TestPlatform())
+ -- level:object(Transform {pos = {960, 700}}, stuff.TestPlatform())
+ -- level:object(Transform {pos = {430, 700}}, stuff.TestPlatform())
+ -- level:object(Transform {pos = {1490, 700}}, stuff.TestPlatform())
end
local function screen_transform()
@@ -34,60 +43,64 @@ local function screen_transform()
return love.math.newTransform(x, y, 0, scale, scale)
end
-local to_draw
-local events = {}
-local handlers = {}
-
-local function event(name)
- love[name] = function(...)
- table.insert(events, {type = name, ...})
+local function call(ct, method, ...)
+ for o in level:iterate(ct) do
+ o:call(method, ...)
end
end
-function love.update(dt)
- to_draw = {}
- physics.world:update(dt, 20, 20)
- for _, e in ipairs(events) do
- if handlers[e.type] then
- handlers[e.type](unpack(e))
- end
+function love.draw()
+ love.graphics.applyTransform(screen_transform())
+ camera:use()
+ local to_draw = {}
+ for o in level:iterate(Drawable) do
+ table.insert(to_draw, o)
end
- for o in pairs(game.all_objects) do
- for _, e in ipairs(events) do
- if o[e.type] then
- o[e.type](o, unpack(e))
- end
+ table.sort(to_draw, function(a, b)
+ return a:get(Drawable).i.z < b:get(Drawable).i.z
+ end)
+ for _, o in ipairs(to_draw) do
+ love.graphics.push()
+ local cmps = {}
+ for c in o:all_components() do
+ table.insert(cmps, c)
end
- o:update(dt)
- if o:visible() then
- table.insert(to_draw, o)
+ table.sort(cmps, function(a, b)
+ return (a.i.z or 0) < (b.i.z or 0)
+ end)
+ for _, c in ipairs(cmps) do
+ if c.draw then c:draw() end
end
+ love.graphics.pop()
end
- events = {}
end
-function love.draw()
- love.graphics.applyTransform(screen_transform())
- camera:use()
- table.sort(to_draw, function(a, b) return a.z < b.z end)
- for _, o in ipairs(to_draw) do
- o:draw()
- end
+function love.update(dt)
+ -- physics.world:update(dt, 20, 20)
+ call(nil, 'update', dt)
end
-event "mousemoved"
-event "mousepressed"
-event "mousereleased"
-event "keypressed"
-event "keyreleased"
+function love.mousemoved(...)
+ call(Input, 'mousemoved', ...)
+end
-function handlers.keypressed(key)
+function love.mousepressed(...)
+ love.mouse.setRelativeMode(true)
+ call(Input, 'mousepressed', ...)
+end
+
+function love.mousereleased(...)
+ call(Input, 'mousereleased', ...)
+end
+
+function love.keypressed(key, ...)
if key == 'tab' and
(love.keyboard.isDown 'ralt' or love.keyboard.isDown 'lalt') then
love.mouse.setRelativeMode(false)
end
+ call(Input, 'keypressed', key, ...)
end
-function handlers.mousepressed()
- love.mouse.setRelativeMode(true)
+function love.keyreleased(...)
+ call(Input, 'keyreleased', ...)
end