diff --git a/lib/spritesheet.lua b/lib/spritesheet.lua deleted file mode 100644 index 29dba89..0000000 --- a/lib/spritesheet.lua +++ /dev/null @@ -1,8 +0,0 @@ -local load_image = function(file_path) - local file = io.open(file_path, "rb") - local raw_data = file:read("*all") - file:close() - local love_file_data = love.filesystem.newFileData(raw_data, file_path) - local love_image = love.graphics.newImage(love_file_data) - return love_image -end diff --git a/lib/tilesheet.lua b/lib/tilesheet.lua new file mode 100644 index 0000000..f06186a --- /dev/null +++ b/lib/tilesheet.lua @@ -0,0 +1,39 @@ +local load_image = function(file_path) + local file = io.open(file_path, "rb") + local raw_data = file:read("*all") + file:close() + + local love_file_data = love.filesystem.newFileData(raw_data, file_path) + local love_image = love.graphics.newImage(love_file_data) + return love_image +end + +local tilesheet = {} + +local tile_metatable = { + __index = { + draw = function(self, ...) + love.graphics.draw(self.image, self.quad, ...) + end, + } +} + +local tilesheet.load = function(data_or_path) + if type(data_or_path) == "table" then + local tile_image = load_image(data_or_path.image_path) + local tiles = {} + + for name, data in pairs(data_or_path.tiles) do + tiles[name] = setmetatable({ + image = tile_image, + quad = love.graphics.newQuad( (data.x - 1) * data_or_path.tile_size, (data.y - 1) * data_or_path.tile_size, data_or_path.tile_size, data_or_path.tile_size, tile_image ), + }, tile_metatable) + end + + return tiles + end +end + +return setmetatable(tilesheet, { + __call = function(self, ...) return tilesheet.load(...) end +})