Log In  


a little function i wrote for fun ...! it lets you draw a sprite as if it was a rectangle :]
works best when the sprite is evenly divisible by 3 both ways ... but it will not cause any errors if that isn't the case

i could certainly make the code smaller, but i feel like working on other things at the moment, so you can have it as it currently is 🤲

function sprrect(x, y, w, h, s)
	s = get_spr(s)
	local slice_w, slice_h = s:attribs()
	slice_w = slice_w\3
	slice_h = slice_h\3
	local slices = {}

	-- split into 3x3 slices
	for _y = 0,2 do
		local row = {}
		for _x = 0,2 do
			local slice = userdata("u8", slice_w, slice_h)
			s:blit(slice, _x*slice_w,_y*slice_h,0,0, slice_w, slice_h)
			add(row, slice)
		end
		add(slices, row)
	end

	-- draw corners
	spr(slices[1][1], x - slice_w, y - slice_h)
	spr(slices[1][3], x + w, y - slice_h)
	spr(slices[3][1], x - slice_w, y + h)
	spr(slices[3][3], x + w, y + h)

	-- draw edges
	---- top
		clip(x, y - slice_h, w, slice_h)
		for _x = 0, w, slice_w do
			spr(slices[1][2], x + _x, y - slice_h)
		end
	---- bottom
		clip(x, y + h, w, slice_h)
		for _x = 0, w, slice_w do
			spr(slices[3][2], x + _x, y + h)
		end
	---- left
		clip(x - slice_w, y, slice_w, h)
		for _y = 0, h, slice_h do
			spr(slices[2][1], x - slice_w, y + _y)
		end
	---- right
		clip(x + w, y, slice_w, h)
		for _y = 0, h, slice_h do
			spr(slices[2][3], x + w, y + _y)
		end

	-- draw center
		clip(x, y, w, h)
		for _x = 0, w, slice_w do
			for _y = 0, h, slice_h do
				spr(slices[2][2], x + _x, y + _y)
			end
		end
	clip()
end
3


1

incredibly useful, thank you for sharing it!


thank you !! i am glad you think so :]



[Please log in to post a comment]