diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/objs/player.lua | 2 | ||||
| -rw-r--r-- | src/objs/specks.lua | 30 |
2 files changed, 23 insertions, 9 deletions
diff --git a/src/objs/player.lua b/src/objs/player.lua index caf2afd..66ea379 100644 --- a/src/objs/player.lua +++ b/src/objs/player.lua @@ -98,6 +98,8 @@ function new_player(x, y) add_comp(ent, "Speck_System") ent.speck_sys.interval = 0.05 + ent.speck_sys.spawn_amount_max = 10 + ent.speck_sys.lifetime_max = 0.6 ent.speck_sys.lifetime_min = 0.3 diff --git a/src/objs/specks.lua b/src/objs/specks.lua index 485a58a..7bd3c78 100644 --- a/src/objs/specks.lua +++ b/src/objs/specks.lua @@ -20,6 +20,9 @@ function Speck_Sys.new() self.free_ids = {} self.free_ids_size = 0 + self.spawn_amount_min = 1 + self.spawn_amount_max = 1 + self.scale_curve = lerp self.scale_start_min = 0.8 self.scale_start_max = 1.25 @@ -60,14 +63,11 @@ function Speck_Sys:check_bounce(i) to_tile_coords(self.data.pos[i].x, self.data.pos[i].y)) end -function Speck_Sys:update(dt) +function Speck_Sys:spawn_particles() local data = self.data + local amt = lmath.random(self.spawn_amount_min, self.spawn_amount_max) - -- particle spawning - self.spawn_timer = self.spawn_timer - dt - if self.spawn_timer <= 0 then - self.spawn_timer = self.interval - + for i = 1, amt do local id if self.free_ids_size > 0 then id = self.free_ids[self.free_ids_size] @@ -87,9 +87,9 @@ function Speck_Sys:update(dt) beta = randf_range(-beta, beta) local rvx = (data.vel[id].x * math.cos(beta)) - - (data.vel[id].y * math.sin(beta)) + - (data.vel[id].y * math.sin(beta)) local rvy = (data.vel[id].x * math.sin(beta)) - + (data.vel[id].y * math.cos(beta)) + + (data.vel[id].y * math.cos(beta)) data.vel[id].x = rvx data.vel[id].y = rvy @@ -102,6 +102,18 @@ function Speck_Sys:update(dt) data.scale_end[id] = randf_range( self.scale_end_min, self.scale_end_max) end +end + +function Speck_Sys:update(dt) + local data = self.data + + -- particle spawning + self.spawn_timer = self.spawn_timer - dt + if self.spawn_timer <= 0 then + self.spawn_timer = self.interval + + self:spawn_particles() + end -- particles processing for i = 1, data.size do @@ -154,7 +166,7 @@ function Speck_Sys:draw() local w, h = self.texture:getDimensions() lg.draw( - self.texture, data.pos[i].x, data.pos[i].y, 0, scale, scale, w/2, h/2 + self.texture, data.pos[i].x, data.pos[i].y, 0, scale, scale, w / 2, h / 2 ) ::next_speck_draw:: end |
