Skip to content

Commit a6b60ca

Browse files
committed
fix: don't draw particles on top of target position
1 parent f71deed commit a6b60ca

3 files changed

Lines changed: 26 additions & 13 deletions

File tree

lua/smear_cursor/animation.lua

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,10 @@ local function update_particles(time_interval)
252252
table.remove(particles, i)
253253
else
254254
particle.velocity[1] = particle.velocity[1] * velocity_conservation_factor
255-
+ config.particle_gravity * (time_interval / 1000)
255+
+ (config.particle_gravity + config.particle_random_velocity * (math.random() - 0.5))
256+
* (time_interval / 1000)
256257
particle.velocity[2] = particle.velocity[2] * velocity_conservation_factor
258+
+ config.particle_random_velocity * (math.random() - 0.5) * (time_interval / 1000)
257259
particle.position[1] = particle.position[1]
258260
+ (particle.velocity[1] * (time_interval / 1000)) / draw.BLOCK_ASPECT_RATIO
259261
particle.position[2] = particle.position[2] + (particle.velocity[2] * (time_interval / 1000))
@@ -420,7 +422,12 @@ local function animate()
420422
or math.abs(target_center[2] - current_center[2]) < 1 / 8
421423
local drawn_corners = straight_line and current_corners or shrink_volume(current_corners)
422424

423-
local target_reached = false
425+
local target_reached = (
426+
current_center[1] >= target_corners[1][1]
427+
and current_center[1] <= target_corners[3][1]
428+
and current_center[2] >= target_corners[1][2]
429+
and current_center[2] <= target_corners[3][2]
430+
)
424431
for i = 1, 4 do
425432
-- stylua: ignore
426433
if (
@@ -451,7 +458,7 @@ local function animate()
451458
gradient_length_squared > 1 and gradient_direction[2] / gradient_length_squared or 0,
452459
}
453460

454-
draw.draw_particles(particles)
461+
draw.draw_particles(particles, target_position)
455462
draw.draw_quad(drawn_corners, target_position, cursor_is_vertical_bar(), gradient_origin, gradient_direction_scaled)
456463
redraw_cmd_mode(must_redraw_cmd_mode)
457464
end

lua/smear_cursor/config.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ M.particle_max_lifetime = 300 -- milliseconds
147147
M.particle_lifetime_distribution_exponent = 5
148148
M.particle_max_initial_velocity = 10 -- characters width per second
149149
M.particle_velocity_from_cursor = 0.2 -- 0: none, 1: full
150+
M.particle_random_velocity = 100 -- characters width per second
150151
M.particle_damping = 0.2
151152
M.particle_gravity = 20 -- characters width per second squared
152153
M.min_distance_emit_particles = 1.5 -- character widths

lua/smear_cursor/draw.lua

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,8 @@ local function draw_braille_character(row, col, cell, hl_group, zindex)
891891
M.draw_character(row, col, braille_characters[braille_index], hl_group, zindex)
892892
end
893893

894-
M.draw_particles = function(particles)
894+
M.draw_particles = function(particles, target_position)
895+
if target_position == nil then target_position = { 0, 0 } end
895896
local cells = {}
896897

897898
for _, particle in ipairs(particles) do
@@ -908,6 +909,8 @@ M.draw_particles = function(particles)
908909

909910
for row, row_cells in pairs(cells) do
910911
for col, cell in pairs(row_cells) do
912+
if row == target_position[1] and col == target_position[2] then goto continue end
913+
911914
local num_dots = (cell[1][1] > 0 and 1 or 0)
912915
+ (cell[2][1] > 0 and 1 or 0)
913916
+ (cell[3][1] > 0 and 1 or 0)
@@ -927,15 +930,17 @@ M.draw_particles = function(particles)
927930
local shade = math.min(1, lifetime_sum / num_dots / config.particle_max_lifetime)
928931
local hl_group_index = round(shade * config.color_levels)
929932

930-
if hl_group_index > 0 then
931-
draw_braille_character(
932-
row,
933-
col,
934-
cell,
935-
color.get_hl_group({ level = hl_group_index }),
936-
config.windows_zindex - 1
937-
)
938-
end
933+
if hl_group_index == 0 then goto continue end
934+
935+
draw_braille_character(
936+
row,
937+
col,
938+
cell,
939+
color.get_hl_group({ level = hl_group_index }),
940+
config.windows_zindex - 1
941+
)
942+
943+
::continue::
939944
end
940945
end
941946
end

0 commit comments

Comments
 (0)