-- Les tileset sont des découpages de texture automatique en quads. Ils ont -- l'aventage d'être automatisé, réduisant la quantité de code nécessaire à chaque fois -- qu'on veut des quads. -- Ils ont deux façons d'être dessiné : avec leur identifiant de frame (en une dimension) -- ou en utilisant leur emplacement sur la "grille", en 2D. -- La grille est un poil plus long, parce que cela nécessite de faire une multiplication local Tileset = Object:extend() function Tileset:new(filepath) self.texture = love.graphics.newImage(filepath .. ".png") local data = require(filepath) self.metadata = data.metadata self:createQuads() end function Tileset:createGrid() self.textureWidth, self.textureHeight = self.texture:getDimensions() self.width, self.height = self.metadata.width, self.metadata.height self.gridWidth, self.gridHeight = math.floor(self.textureWidth / self.width), math.floor(self.textureHeight / self.height) end function Tileset:createQuads() self.quads = {} self:createGrid() local quad, n n = 1 for i=0, (self.gridHeight-1) do for j=0, (self.gridWidth-1) do quad = love.graphics.newQuad(j * self.width, i * self.height, self.width, self.height, self.textureWidth, self.textureHeight) self.quads[n] = quad n = n + 1 end end end function Tileset:getTileID_Grid(x, y) local n = (y - 1) * self.gridWidth + x return n end function Tileset:getTile_Grid(x, y) return self:getTile(self:getTileID_Grid(x, y)) end function Tileset:getTile(n) return self.quads[n] end function Tileset:drawTile_Grid(i, j, x, y, r, sx, sy, ox, oy, kx, ky) local tileID = self:getTileID_Grid(i, j) love.graphics.draw(self.texture, self.quads[tileID], x, y, r, sx, sy, ox, oy, kx, ky) end function Tileset:drawTile(id, x, y, r, sx, sy, ox, oy, kx, ky) love.graphics.draw(self.texture, self.quads[id], x, y, r, sx, sy, ox, oy, kx, ky) end return Tileset