Advertisement
Guest User

Untitled

a guest
Nov 21st, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.09 KB | None | 0 0
  1.  
  2. -- Export un sprite en array
  3. -- Utilisation d'une palette de 16 couleurs, ici la Pico-8
  4. -- Correspondance entre les couleurs utilisé dans le sprite avec la palette
  5. -- Les couleurs utilisé dans le sprite doivent correspondre a la palette
  6. -- Un fichier 'export.lua' sera créé dans le repertoire du projet
  7.  
  8. love.graphics.setDefaultFilter("nearest")
  9.  
  10. local palette = {
  11.     {0, 0, 0},          -- black
  12.     {29, 43, 83},       -- dark-blue
  13.     {126, 37, 83},      -- dark-purple
  14.     {0, 135, 81},       -- dark-green
  15.     {171, 82, 54},      -- brown
  16.     {95, 87, 79},       -- dark-gray
  17.     {194, 195, 199},    -- light-gray
  18.     {255, 241, 232},    -- white
  19.     {255, 0, 77},       -- red
  20.     {255, 163, 0},      -- orange
  21.     {255, 236, 39},     -- yellow
  22.     {0, 228, 54},       -- green
  23.     {41, 173, 255},     -- blue
  24.     {131, 118, 156},    -- indigo
  25.     {255, 119, 168},    -- pink
  26.     {255, 204, 170}     -- peach
  27. };
  28.  
  29. local img = {}
  30.  
  31. function love.load()
  32.     img.img = love.graphics.newImage("stand.png")
  33.     img.w, img.h = img.img:getWidth() , img.img:getHeight()
  34.    
  35.     -- Creation du canvas de la taille de notre sprite
  36.     img.canvas = love.graphics.newCanvas(img.w,img.h)
  37.    
  38.     -- On set le canvas créé
  39.     love.graphics.setCanvas(img.canvas)
  40.    
  41.     -- On affiche le sprite dans ce canvas
  42.     love.graphics.draw(img.img,0,0)
  43.    
  44.     -- On ferme le canvas
  45.     love.graphics.setCanvas()
  46.    
  47.     -- On crée un ImageData par rapport au canvas
  48.     -- Celui ci va comporter les info direct, comme les pixel affiché dans le canvas
  49.     img.data = img.canvas:newImageData()
  50.    
  51.     -- Array qui va comporter les index des couleurs dans la palette
  52.     char = {}
  53.    
  54.     -- Boucle qui va parcourir notre canvas pixel par pixel
  55.     for x = 0, img.w - 1 do
  56.         for y = 0, img.h - 1 do
  57.            
  58.             -- On recupere les info RGB de chaque pixel testé dans le canvas
  59.             r,g,b = img.data:getPixel(x,y)
  60.            
  61.             -- On va checker dans notre palette une correspondance
  62.             for i,v in ipairs(palette) do
  63.                
  64.                 -- Si il y a correspondance, on insert dans notre Array 'char' , l'index
  65.                 if v[1] == r and v[2] == g and v[3] == b then
  66.                     table.insert(char, i)
  67.                 end
  68.             end
  69.         end
  70.     end
  71.    
  72.     -- Creation du fichier 'export.lua'
  73.     export = io.open ("export.lua", "wb")
  74.    
  75.     export:write("local sprite = {\n")
  76.     export:write("\t{")
  77.    
  78.     local size = table.maxn(char)
  79.    
  80.     print("Size : "..size-1)
  81.    
  82.     for i=1, size do
  83.         local v = tostring(char[i]-1)
  84.         if i%(img.w) == 0 and i < size then
  85.             if tonumber(v) < 10 then
  86.                 export:write('  '..v..' },\n\t{')
  87.             else
  88.                 export:write(' '..v..' },\n\t{')
  89.             end
  90.         else
  91.             if tonumber(v) < 10 then
  92.                 if i == size then
  93.                     export:write('  '..v..' ')
  94.                 else
  95.                     export:write('  '..v..',')
  96.                 end
  97.             else
  98.                 if i == size then
  99.                     export:write(' '..v..' ')
  100.                 else
  101.                     export:write(' '..v..',')
  102.                 end
  103.             end
  104.         end
  105.     end
  106.  
  107.     export:write("}\n}")
  108.    
  109.     -- On ferme le chier
  110.     export:close()
  111.    
  112. end
  113.  
  114. local width, height = love.window.getMode()
  115.  
  116. function love.draw()
  117.     love.graphics.draw(img.canvas, (width-img.canvas:getWidth())/2, (height-img.canvas:getHeight())/2, 0)
  118. end
  119.  
  120. function love.keypressed(key,scancode,isrepeat)
  121.     isrepeat = false
  122.     if key == "escape" then
  123.         love.event.push('quit')
  124.     end
  125. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement