From 9f7692f91c4cb79e40acd78f9ac8156fb460696e Mon Sep 17 00:00:00 2001 From: MrZ626 <1046101471@qq.com> Date: Fri, 22 Oct 2021 16:09:56 +0800 Subject: [PATCH] =?UTF-8?q?skin=E6=A8=A1=E5=9D=97=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.lua | 2 +- parts/skin.lua | 97 +++++++++++++++++++++++++------------------------- 2 files changed, 50 insertions(+), 49 deletions(-) diff --git a/main.lua b/main.lua index 0d86fefe..671eec2b 100644 --- a/main.lua +++ b/main.lua @@ -253,7 +253,7 @@ IMG.init{ 'media/image/lanterns/6.png', }, } -SKIN.init{ +SKIN.load{ {name="crystal_scf",path='media/image/skin/crystal_scf.png'}, {name="matte_mrz",path='media/image/skin/matte_mrz.png'}, {name="shiny_cho",path='media/image/skin/shiny_cho.png'}, diff --git a/parts/skin.lua b/parts/skin.lua index 95d38282..02a6904c 100644 --- a/parts/skin.lua +++ b/parts/skin.lua @@ -1,58 +1,59 @@ -local SKIN={} -function SKIN.init(list) - local Skins={} +local gc=love.graphics +local function C(x,y) + local canvas=gc.newCanvas(x,y) + gc.setCanvas(canvas) + return canvas +end - local simpList={} - for _,v in next,list do - table.insert(simpList,v.name) - Skins[v.name]=v.path +local Skins={} +local skinList={} + +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 - function SKIN.getList()return simpList end +end - local gc=love.graphics - local function C(x,y) - local canvas=gc.newCanvas(x,y) - gc.setCanvas(canvas) - return canvas +function SKIN.getList()return skinList end + +local skinMeta={__index=function(self,name) + gc.push() + 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 - SKIN.lib,SKIN.libMini={},{} - local skinMeta={__index=function(self,name) - gc.push() - gc.origin() - local f1,f2=gc.getDefaultFilter() - gc.setDefaultFilter('nearest','nearest') - local I - local N=Skins[name] - 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]={},{} + gc.setColor(1,1,1) + for y=0,2 do + 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.lib[name],SKIN.libMini[name]={},{} - gc.setColor(1,1,1) - for y=0,2 do - 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 + SKIN.libMini[name][8*y+x]=C(6,6) + if I then + gc.draw(I,6-6*x,-6*y,nil,.2) end end - gc.setCanvas() - gc.pop() - return self[name] - end} - setmetatable(SKIN.lib,skinMeta) - setmetatable(SKIN.libMini,skinMeta) + end + gc.setCanvas() + gc.pop() + return self[name] +end} +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