skin模块升级

This commit is contained in:
MrZ626
2021-10-22 16:09:56 +08:00
parent 48b2ff5416
commit 9f7692f91c
2 changed files with 50 additions and 49 deletions

View File

@@ -253,7 +253,7 @@ IMG.init{
'media/image/lanterns/6.png', 'media/image/lanterns/6.png',
}, },
} }
SKIN.init{ SKIN.load{
{name="crystal_scf",path='media/image/skin/crystal_scf.png'}, {name="crystal_scf",path='media/image/skin/crystal_scf.png'},
{name="matte_mrz",path='media/image/skin/matte_mrz.png'}, {name="matte_mrz",path='media/image/skin/matte_mrz.png'},
{name="shiny_cho",path='media/image/skin/shiny_cho.png'}, {name="shiny_cho",path='media/image/skin/shiny_cho.png'},

View File

@@ -1,58 +1,59 @@
local SKIN={} local gc=love.graphics
function SKIN.init(list) local function C(x,y)
local Skins={} local canvas=gc.newCanvas(x,y)
gc.setCanvas(canvas)
return canvas
end
local simpList={} local Skins={}
for _,v in next,list do local skinList={}
table.insert(simpList,v.name)
Skins[v.name]=v.path local SKIN={
lib={},
libMini={},
}
function SKIN.load(list)
for i=1,#list do
table.insert(skinList,list[i].name)
Skins[list[i].name]=list[i].path
end end
function SKIN.getList()return simpList end end
local gc=love.graphics function SKIN.getList()return skinList end
local function C(x,y)
local canvas=gc.newCanvas(x,y) local skinMeta={__index=function(self,name)
gc.setCanvas(canvas) gc.push()
return canvas gc.origin()
gc.setDefaultFilter('nearest','nearest')
local I
local N=Skins[name]
if N and love.filesystem.getInfo(N)then
I=gc.newImage(N)
else
MES.new('warn',"[no skin] "..name)
end end
SKIN.lib,SKIN.libMini={},{} SKIN.lib[name],SKIN.libMini[name]={},{}
local skinMeta={__index=function(self,name) gc.setColor(1,1,1)
gc.push() for y=0,2 do
gc.origin() for x=1,8 do
local f1,f2=gc.getDefaultFilter() SKIN.lib[name][8*y+x]=C(30,30)
gc.setDefaultFilter('nearest','nearest') if I then
local I gc.draw(I,30-30*x,-30*y)
local N=Skins[name] end
if love.filesystem.getInfo(N)then
I=gc.newImage(N)
else
MES.new('warn',"[no skin] "..Skins[name])
end
gc.setDefaultFilter(f1,f2)
SKIN.lib[name],SKIN.libMini[name]={},{} SKIN.libMini[name][8*y+x]=C(6,6)
gc.setColor(1,1,1) if I then
for y=0,2 do gc.draw(I,6-6*x,-6*y,nil,.2)
for x=1,8 do
SKIN.lib[name][8*y+x]=C(30,30)
if I then
gc.draw(I,30-30*x,-30*y)
end
SKIN.libMini[name][8*y+x]=C(6,6)
if I then
gc.draw(I,6-6*x,-6*y,nil,.2)
end
end end
end end
gc.setCanvas() end
gc.pop() gc.setCanvas()
return self[name] gc.pop()
end} return self[name]
setmetatable(SKIN.lib,skinMeta) end}
setmetatable(SKIN.libMini,skinMeta) setmetatable(SKIN.lib,skinMeta)
setmetatable(SKIN.libMini,skinMeta)
function SKIN.loadAll()SKIN.loadAll=nil for _,v in next,list do local _=SKIN.lib[v.name]end end
end
return SKIN return SKIN