mirror of
https://github.com/airstruck/luigi.git
synced 2025-12-18 18:06:44 +00:00
80 lines
1.7 KiB
Lua
80 lines
1.7 KiB
Lua
local REL = (...):gsub('[^.]*$', '')
|
|
|
|
local sdl = require(REL .. 'sdl')
|
|
|
|
local SpriteBatch = setmetatable({}, { __call = function (self, ...)
|
|
local object = setmetatable({}, { __index = self })
|
|
return object, self.constructor(object, ...)
|
|
end })
|
|
|
|
--[[
|
|
spriteBatch = SpriteBatch( image, size )
|
|
|
|
Arguments
|
|
|
|
Image image
|
|
The Image to use for the sprites.
|
|
number size (1000)
|
|
The max number of sprites.
|
|
|
|
Returns
|
|
|
|
SpriteBatch spriteBatch
|
|
The new SpriteBatch.
|
|
--]]
|
|
function SpriteBatch:constructor (image)
|
|
self.image = image
|
|
self.sprites = {}
|
|
end
|
|
|
|
function SpriteBatch:clear ()
|
|
self.sprites = {}
|
|
end
|
|
|
|
--[[
|
|
id = SpriteBatch:add( quad, x, y, r, sx, sy )
|
|
|
|
Arguments
|
|
|
|
Quad quad
|
|
The Quad to add.
|
|
number x
|
|
The position to draw the object (x-axis).
|
|
number y
|
|
The position to draw the object (y-axis).
|
|
number r (0)
|
|
Orientation (radians). (not implemented)
|
|
number sx (1)
|
|
Scale factor (x-axis).
|
|
number sy (sx)
|
|
Scale factor (y-axis).
|
|
|
|
Returns
|
|
|
|
number id
|
|
An identifier for the added sprite.
|
|
--]]
|
|
function SpriteBatch:add (quad, x, y, r, sx, sy)
|
|
local sprites = self.sprites
|
|
|
|
sprites[#sprites + 1] = { quad = quad, x = x, y = y,
|
|
sx = sx or 1, sy = sy or 1 }
|
|
end
|
|
|
|
function SpriteBatch:draw ()
|
|
local image = self.image
|
|
local renderer = image.sdlRenderer
|
|
local texture = image.sdlTexture
|
|
|
|
for _, sprite in ipairs(self.sprites) do
|
|
local quad = sprite.quad
|
|
local w = math.ceil(quad[3] * sprite.sx)
|
|
local h = math.ceil(quad[4] * sprite.sy)
|
|
local src = sdl.Rect(quad)
|
|
local dst = sdl.Rect(sprite.x, sprite.y, w, h)
|
|
sdl.renderCopy(renderer, texture, src, dst)
|
|
end
|
|
end
|
|
|
|
return SpriteBatch
|