3.0 begin
This commit is contained in:
parent
45f3db4f47
commit
ab8638bfe5
5 changed files with 213 additions and 19 deletions
|
@ -3,33 +3,47 @@ return function(ll)
|
||||||
ll.mdir = nil
|
ll.mdir = nil
|
||||||
ll.mgme = nil
|
ll.mgme = nil
|
||||||
|
|
||||||
local ffi = require 'ffi'
|
if love.getVersion() >= 12 then
|
||||||
ffi.cdef [[
|
function ll._mntdir(dir)
|
||||||
|
return love.filesystem.mountFullPath(dir, '/')
|
||||||
|
end
|
||||||
|
function ll._umntdir(dir)
|
||||||
|
love.filesystem.unmountFullPath(dir)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
local ffi = require 'ffi'
|
||||||
|
ffi.cdef [[
|
||||||
int PHYSFS_mount(const char *, const char *, int);
|
int PHYSFS_mount(const char *, const char *, int);
|
||||||
int PHYSFS_unmount(const char *);
|
int PHYSFS_unmount(const char *);]]
|
||||||
]]
|
|
||||||
|
-- FIXME: Bug may appear in Linux. Recompile Love2D or use official PPA.
|
||||||
|
function ll._mntdir(dir)
|
||||||
|
return ffi.C.PHYSFS_mount(dir, '/', 0) ~= 0
|
||||||
|
end
|
||||||
|
function ll._umntdir(dir)
|
||||||
|
ffi.C.PHYSFS_unmount(dir)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local baseReq = '?.lua;?/init.lua;'
|
local baseReq = '?.lua;?/init.lua;'
|
||||||
function ll.mount(gme)
|
function ll.mount(gme)
|
||||||
local mdir = gme.base .. gme.dir
|
local mdir = gme.base .. gme.dir
|
||||||
ll.mgme = gme
|
|
||||||
|
|
||||||
love.filesystem.setRequirePath(''
|
love.filesystem.setRequirePath(
|
||||||
.. mdir .. '/?.lua;'
|
mdir .. '/?.lua;'
|
||||||
.. mdir .. '/?/init.lua;'
|
.. mdir .. '/?/init.lua;'
|
||||||
.. baseReq
|
.. baseReq
|
||||||
)
|
)
|
||||||
-- FIXME: Bug may appear in Linux. Recompile Love2D or use official PPA.
|
if ll._mntdir(mdir)
|
||||||
if ffi.C.PHYSFS_mount(mdir, '/', 0) == 0
|
then ll.mdir, ll.mgme = mdir, gme
|
||||||
then error('Cannot mount '..mdir)
|
else error('Cannot mount '..mdir)
|
||||||
love.filesystem.setRequirePath(baseReq)
|
love.filesystem.setRequirePath(baseReq)
|
||||||
else ll.mdir = mdir
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ll.umount()
|
function ll.umount()
|
||||||
if ll.mdir ~= nil then
|
if ll.mdir ~= nil then
|
||||||
ffi.C.PHYSFS_unmount(ll.mdir)
|
ll._umntdir(ll.mdir)
|
||||||
ll.mdir = nil
|
ll.mdir = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
21
ll-min.lua
21
ll-min.lua
|
@ -1,5 +1,5 @@
|
||||||
-- Minimal Love Loader API
|
-- Minimal Love Loader API
|
||||||
-- Version 2.1
|
-- Version 3.0
|
||||||
-- (c) Er2 2022 <er2@dismail.de>
|
-- (c) Er2 2022 <er2@dismail.de>
|
||||||
-- Zlib License
|
-- Zlib License
|
||||||
|
|
||||||
|
@ -9,6 +9,22 @@ COLDIV = love.getVersion() == 0 and 1 or 255
|
||||||
MOBILE = love.system.getOS() == 'Android'
|
MOBILE = love.system.getOS() == 'Android'
|
||||||
or love.system.getOS() == 'iOS'
|
or love.system.getOS() == 'iOS'
|
||||||
|
|
||||||
|
function llHome()
|
||||||
|
love.event.push('quit', 'restart')
|
||||||
|
end
|
||||||
|
|
||||||
|
if love.getVersion() >= 12 then
|
||||||
|
local stfn
|
||||||
|
function love.graphics.stencil(fn) stfn = fn end
|
||||||
|
function love.graphics.setStencilTest(cmp, val)
|
||||||
|
if not cmp
|
||||||
|
then love.graphics.setStencilMode()
|
||||||
|
else love.graphics.setStencilMode('replace', cmp, val, 1, 1)
|
||||||
|
stfn()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if MOBILE
|
if MOBILE
|
||||||
then love.window.setFullscreen(true)
|
then love.window.setFullscreen(true)
|
||||||
end
|
end
|
||||||
|
@ -22,9 +38,6 @@ function love.resize(x, y)
|
||||||
end
|
end
|
||||||
love.resize(love.graphics.getDimensions())
|
love.resize(love.graphics.getDimensions())
|
||||||
|
|
||||||
function llHome()
|
|
||||||
love.event.push('quit')
|
|
||||||
end
|
|
||||||
function love.event.quit()
|
function love.event.quit()
|
||||||
llHome()
|
llHome()
|
||||||
end
|
end
|
||||||
|
|
30
main.lua
30
main.lua
|
@ -16,9 +16,20 @@ ll.skin = require 'skins.psp' (ll)
|
||||||
require 'll-min'
|
require 'll-min'
|
||||||
llUsed = true
|
llUsed = true
|
||||||
|
|
||||||
if love.errorhandler
|
if love.getVersion() >= 12 then
|
||||||
then love.errorhandler = error
|
function llHome()
|
||||||
else love.errhand = error
|
ll.umount()
|
||||||
|
love.event.restart()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
function llHome()
|
||||||
|
ll.umount()
|
||||||
|
love.event.push('quit', 'restart')
|
||||||
|
end
|
||||||
|
if love.getVersion() >= 11 then
|
||||||
|
love.errorhandler = error
|
||||||
|
else love.errhand = error
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local brk = false
|
local brk = false
|
||||||
|
@ -31,6 +42,19 @@ while not brk and not ll.mdir do
|
||||||
then ll.umount()
|
then ll.umount()
|
||||||
love.event.push('quit')
|
love.event.push('quit')
|
||||||
brk = true; break
|
brk = true; break
|
||||||
|
elseif n == 'filedropped' then
|
||||||
|
love.graphics.clear()
|
||||||
|
local x, y, g = 32, 32, 16
|
||||||
|
local w, h = 84, 96
|
||||||
|
love.graphics.rectangle('line', x, y, w, h, w / 8)
|
||||||
|
love.graphics.line(x + w / 1.5, y, x + w, y + h / 3)
|
||||||
|
if ll.skin.addGame then
|
||||||
|
a:open 'r'
|
||||||
|
ll.skin.addGame(a:getFilename(), a:read(), x + w + g, y)
|
||||||
|
else love.graphics.print('This skin does not support file dropping', x + w + g, y)
|
||||||
|
end
|
||||||
|
love.graphics.present()
|
||||||
|
love.timer.sleep(2)
|
||||||
end
|
end
|
||||||
love.handlers[n](a,b,c)
|
love.handlers[n](a,b,c)
|
||||||
end
|
end
|
||||||
|
|
|
@ -68,6 +68,10 @@ local function update()
|
||||||
if sel > #ll.games then sel = 1 end
|
if sel > #ll.games then sel = 1 end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if logger:sub(-3) == 'mm'
|
||||||
|
then ll.skin = require 'skins.select' (ll)
|
||||||
|
end
|
||||||
|
|
||||||
pikchv = pikchv + 1
|
pikchv = pikchv + 1
|
||||||
if pikchv >= ll.cfg.pcht then
|
if pikchv >= ll.cfg.pcht then
|
||||||
pikchv = 0
|
pikchv = 0
|
||||||
|
@ -151,9 +155,18 @@ local function draw()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function addGame(file, cont, x, y)
|
||||||
|
local msg, id = ll.addGame(file, cont)
|
||||||
|
love.graphics.print(msg, x, y)
|
||||||
|
if id then
|
||||||
|
sel = id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return {
|
return {
|
||||||
update = update,
|
update = update,
|
||||||
draw = draw,
|
draw = draw,
|
||||||
|
addGame = addGame,
|
||||||
}
|
}
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
130
skins/select.lua
Normal file
130
skins/select.lua
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
return function(ll)
|
||||||
|
|
||||||
|
local skins = {
|
||||||
|
require 'skins.psp',
|
||||||
|
require 'skins.gui',
|
||||||
|
require 'skins.base',
|
||||||
|
require 'skins.select',
|
||||||
|
}
|
||||||
|
|
||||||
|
local sel = 1
|
||||||
|
local sk, ssel
|
||||||
|
|
||||||
|
local cx, cw, ch
|
||||||
|
|
||||||
|
local scx, scy = 1, 1
|
||||||
|
local tscx, tscy
|
||||||
|
local canv
|
||||||
|
|
||||||
|
local resz, l
|
||||||
|
|
||||||
|
function load(nunl)
|
||||||
|
l = true
|
||||||
|
resize = nil
|
||||||
|
assert(skins[sel], 'Skin does not exists')
|
||||||
|
sk = skins[sel](ll)
|
||||||
|
love.resize(love.graphics.getDimensions())
|
||||||
|
sk.update()
|
||||||
|
if not nunl then
|
||||||
|
if sk.lovecb then
|
||||||
|
for _, v in pairs(sk.lovecb)
|
||||||
|
do love[v] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
resize = resz
|
||||||
|
love.resize(love.graphics.getDimensions())
|
||||||
|
|
||||||
|
love.graphics.setCanvas(canv)
|
||||||
|
love.graphics.setColor(0, 0, 0)
|
||||||
|
love.graphics.rectangle('fill', 0, 0, W, H)
|
||||||
|
love.graphics.setColor(255, 255, 255)
|
||||||
|
sk.draw()
|
||||||
|
love.graphics.setCanvas()
|
||||||
|
else ll.skin = sk
|
||||||
|
end
|
||||||
|
l = false
|
||||||
|
end
|
||||||
|
|
||||||
|
function resize()
|
||||||
|
cx = math.min(W, H) / 8
|
||||||
|
cw, ch =
|
||||||
|
W - cx * 2.5,
|
||||||
|
H - cx * 1.5
|
||||||
|
tscx, tscy =
|
||||||
|
cw / W,
|
||||||
|
ch / H
|
||||||
|
|
||||||
|
canv = love.graphics.newCanvas(W, H)
|
||||||
|
if not l then load() end
|
||||||
|
ll.kbInit('h', cx, W - cx)
|
||||||
|
end
|
||||||
|
resz = resize
|
||||||
|
|
||||||
|
local d
|
||||||
|
local function update()
|
||||||
|
if not sk then load() end
|
||||||
|
scx = scx + (tscx - scx) * 0.1
|
||||||
|
scy = scy + (tscy - scy) * 0.1
|
||||||
|
|
||||||
|
if ssel
|
||||||
|
and scx > 0.99
|
||||||
|
and scy > 0.99
|
||||||
|
then load(true) end
|
||||||
|
|
||||||
|
local nd = ll.kbGet()
|
||||||
|
|
||||||
|
if nd ~= d then
|
||||||
|
d = nd
|
||||||
|
|
||||||
|
local ns = sel
|
||||||
|
|
||||||
|
if d == '<'
|
||||||
|
then ns = sel - 1
|
||||||
|
elseif d == '>'
|
||||||
|
then ns = sel + 1
|
||||||
|
elseif d == 'o'
|
||||||
|
then ssel = true
|
||||||
|
tscx, tscy = 1, 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if ns < 1 then ns = #skins end
|
||||||
|
if ns > #skins then ns = 1 end
|
||||||
|
|
||||||
|
if sel ~= ns then
|
||||||
|
sel = ns
|
||||||
|
load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function draw()
|
||||||
|
local w, h = W * scx, H * scy
|
||||||
|
local x, y, r =
|
||||||
|
(W - w) / 2,
|
||||||
|
(H - h) / 2,
|
||||||
|
math.min(W - w, H - h) / 8
|
||||||
|
love.graphics.setColor(100 / COLDIV, 100 / COLDIV, 100 / COLDIV)
|
||||||
|
love.graphics.rectangle('fill', 0, 0, W, H)
|
||||||
|
love.graphics.setColor(255, 255, 255)
|
||||||
|
love.graphics.stencil(function()
|
||||||
|
love.graphics.rectangle('fill', x, y, w, h, r)
|
||||||
|
end)
|
||||||
|
love.graphics.setStencilTest('greater', 0)
|
||||||
|
love.graphics.draw(canv, x, y, 0, scx, scy)
|
||||||
|
love.graphics.setStencilTest()
|
||||||
|
love.graphics.rectangle('line', x, y, w, h, r)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- execute if loaded from other skin
|
||||||
|
if ll.skin then
|
||||||
|
load()
|
||||||
|
resize()
|
||||||
|
update()
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
draw = draw,
|
||||||
|
update = update,
|
||||||
|
}
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in a new issue