light_world.lua/examples/examples_list.lua
2021-11-19 20:14:08 -05:00

78 lines
2.6 KiB
Lua

local List = require('examples.lib.list')
local LightWorld = require('lib')
local examples = {
{"Simple", "simple.lua"},
{"Gamera", "gamera.lua"},
{"Hump", "hump.lua"},
{"Normal Map", "normalMap.lua"},
{"Animation", "animation.lua"},
{"STI Example", "simple_tiled_impl.lua"},
{"Only Postshader Example", "postshaders.lua"},
{"Complex Example", "complex.lua"},
}
local list, smallfont, bigfont, bigball, lightWorld, lightMouse
local function start(file)
local state = love.filesystem.load("examples/" .. file)()
love.update = state.update
love.draw = state.draw
love.keyreleased = state.keyrelease
love.mousepressed = state.mousepressed
love.mousereleased = state.mousereleased
love.wheelmoved = state.wheelmoved
love.keypressed = function(k)
if k == "escape"then
if file ~= "examples_list.lua" then start("examples_list.lua") else love.event.quit() end
end
if state.keypressed ~= nil then state.keypressed(k) end
end
state.load()
end
local function load()
list = List:new(50, 100, 400, 23)
smallfont = love.graphics.newFont(12)
bigfont = love.graphics.newFont(24)
list.font = smallfont
bigball = love.graphics.newImage("examples/img/love-big-ball.png")
for n, v in ipairs(examples) do
list:add(string.format("%04d", n).." "..v[1].." ("..v[2]..")", function() start(v[2]) end)
end
love.window.setTitle("LOVE Example Browser")
lightWorld = LightWorld({ambient = {0.49, 0.49, 0.49}})
lightMouse = lightWorld:newLight(20, 20, 1, 0.49, 0.24, 500)
lightWorld.post_shader:toggleEffect("scanlines")
lightMouse:setSmooth(2)
lightWorld:newCircle(620, 200, bigball:getWidth()*0.5)
end
local function update(dt)
list:update(dt)
lightMouse:setPosition(love.mouse.getX(), love.mouse.getY())
lightWorld:update(dt)
end
local function draw()
lightWorld:draw(function()
love.graphics.setBackgroundColor(0, 0, 0)
love.graphics.setColor(0.18, 0.61, 1)
love.graphics.rectangle("fill", 0, 0, love.graphics.getWidth(), love.graphics.getHeight())
love.graphics.setColor(1, 1, 1, 1)
love.graphics.setFont(bigfont)
love.graphics.print("Examples:", 50, 30)
love.graphics.setFont(smallfont)
love.graphics.print("Browse and click on the example you \nwant to run. To return the the example \nselection screen, press escape.", 500, 80)
list:draw()
love.graphics.setColor(1, 1, 1)
love.graphics.draw(bigball, 620, 200, love.timer.getTime()/5, 1, 1, bigball:getWidth() * 0.5, bigball:getHeight() * 0.5)
end)
end
return {
start = start,
draw = draw,
update = update,
load = load,
mousepressed = function(x, y, b) list:mousepressed(x, y, b) end,
}