sprite renderer and parallax drifting thing renderer

This commit is contained in:
Kistaro Windrider 2024-02-29 19:58:39 -08:00
parent bf6fa03374
commit 79d6321891
Signed by: kistaro
SSH Key Fingerprint: SHA256:TBE2ynfmJqsAf0CP6gsflA0q5X5wD5fVKWPsZ7eVUg8

View File

@ -1485,9 +1485,72 @@ function spark:draw()
spr(48+self.f\2, self.x, self.y)
end
-- other fields: level, item
-- level must provide:
-- function :pdone(item)
-- field .pdx (scrolling parallax dx)
-- item must provide:
-- drawable api
-- .x readwrite (draw coord)
-- .w (width)
parallax = {
dx=0,
z=1,
}
mknew(parallax)
function parallax:u()
local item = self.item
if item:u() then
self.level:pdone(self)
return true
end
item.x += self.dx
item.x += self.level.pdx * self.z
if item.x > 256 or item.x + item.w < -128 then
self.level:pdone(self)
return true
end
end
function parallax:draw()
self.item:draw()
end
spritem = {
s = {0},
sw = 1,
sh = 1,
i = 1,
xf = -1,
f = 4,
x = 0,
y = 0,
}
mknew(spritem, function(self)
self.w = (self.sw or spritem.sw) << 3
self.h = (self.sh or spritem.sh) << 3
end)
function spritem:u()
self.xf += 1
if self.xf > self.f then
self.i += 1
if (self.i > #self.s) self.i = 1
self.xf = 0
end
end
function spritem:draw()
spr(self.s[self.i], self.x, self.y, self.sw, self.sh, self.flipx, self.flipy)
end
arcade_level = {
score=0,
wordwait = 90,
pdx=0,
}
mknew(arcade_level, function(x)
x.phin = toyphin.new{