diff options
| author | ne_mene <[email protected]> | 2026-03-14 11:50:03 +0100 |
|---|---|---|
| committer | ne_mene <[email protected]> | 2026-03-14 11:50:03 +0100 |
| commit | 07ffb903dd30bc855692e36a37d3503d5a6cec75 (patch) | |
| tree | f94d6dfe0f18a21745d1e83465b1d57fd861c6a3 /src/objs/specks.lua | |
| parent | 045c1478627cf63c00ad87348816189c87c3ffbc (diff) | |
coyote time
Diffstat (limited to 'src/objs/specks.lua')
| -rw-r--r-- | src/objs/specks.lua | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/objs/specks.lua b/src/objs/specks.lua new file mode 100644 index 0000000..a3a21c5 --- /dev/null +++ b/src/objs/specks.lua @@ -0,0 +1,59 @@ +Speck_Sys = {} +Speck_Sys.__index = Speck_Sys + +function Speck_Sys.new(texture) + local self = setmetatable({}, Speck_Sys) + + self.data = { + size = 0, + pos = {}, + vel = {}, + + lifetime = {}, + lifetime_max = {}, + + scale_start = {}, + scale_end = {} + } + + self.scale_curve = lerp + self.scale_min = 1 + self.scale_max = 1 + + self.scale_end_min = 1 + self.scale_end_max = 1 + + self.texture = texture +end + +function Speck_Sys:process(dt) + local data = self.data + + for i = 1, data.size do + -- dead particles skip + if data.lifetime[i] <= 0 then + goto next_speck_process + end + + data.pos[i].x = data.pos[i].x + data.vel[i].x * dt + data.pos[i].y = data.pos[i].y + data.vel[i].y * dt + + data.lifetime[i] = data.lifetime[i] - dt + + ::next_speck_process:: + end +end + +function Speck_Sys:draw() + local scale_curve = self.scale_curve + local data = self.data + + for i = 1, data.size do + local anim = data.lifetime[i] / data.lifetime_max[i] + local scale = scale_curve(self.scale_start, self.scale_end, anim) + + lg.draw( + self.texture, data.pos[i].x, data.pos[i].y + ) + end +end |
