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 | ||||||
| 
 | 
 | ||||||
|  | if love.getVersion() >= 12 then | ||||||
|  |   function ll._mntdir(dir) | ||||||
|  |     return love.filesystem.mountFullPath(dir, '/') | ||||||
|  |   end | ||||||
|  |   function ll._umntdir(dir) | ||||||
|  |     love.filesystem.unmountFullPath(dir) | ||||||
|  |   end | ||||||
|  | else | ||||||
|   local ffi = require 'ffi' |   local ffi = require 'ffi' | ||||||
|   ffi.cdef [[ |   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 | ||||||
|  |  | ||||||
							
								
								
									
										28
									
								
								main.lua
									
										
									
									
									
								
							
							
						
						
									
										28
									
								
								main.lua
									
										
									
									
									
								
							|  | @ -16,10 +16,21 @@ 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() | ||||||
|  |     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 |   else love.errhand = error | ||||||
|   end |   end | ||||||
|  | end | ||||||
| 
 | 
 | ||||||
| local brk = false | local brk = false | ||||||
| while not brk and not ll.mdir do | while not brk and not ll.mdir do | ||||||
|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue