diff options
Diffstat (limited to 'main.lua')
-rw-r--r-- | main.lua | 113 |
1 files changed, 63 insertions, 50 deletions
@@ -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 |