Find matches after launched bubble collision

main
Tyler Scott 2022-02-06 08:07:07 +07:00
parent 7ace7cca72
commit 4410d32776
1 changed files with 27 additions and 0 deletions

View File

@ -91,6 +91,31 @@ local function find_nearest_slot(x, y)
return nearest_slot_index return nearest_slot_index
end end
local function find_matches(start_index)
local bubble_type = game.bubble_slots[start_index].bubble_type
local to_check = {start_index}
local matches = {start_index}
local visited = {}
visited[start_index] = true
while #to_check > 0 do
local current_index = table.remove(to_check)
local slot = game.bubble_slots[current_index]
for i = 1, #slot.neighbours do
local neighbour_index = slot.neighbours[i]
local neighbour = game.bubble_slots[neighbour_index]
if not visited[neighbour_index] and neighbour.bubble_type == bubble_type then
matches[#matches+1] = neighbour_index
to_check[#to_check+1] = neighbour_index
end
visited[neighbour_index] = true
end
end
return matches
end
function love.load(arg) function love.load(arg)
if arg[#arg] == "debug" then require("lldebugger").start() end if arg[#arg] == "debug" then require("lldebugger").start() end
@ -255,6 +280,8 @@ function love.update(dt)
game.next_bubble.y = game.bubble_slots[nearest_slot_index].y game.next_bubble.y = game.bubble_slots[nearest_slot_index].y
game.next_bubble.velocity_x = 0 game.next_bubble.velocity_x = 0
game.next_bubble.velocity_y = 0 game.next_bubble.velocity_y = 0
local matches = find_matches(nearest_slot_index)
else else
game.next_bubble.x = next_x game.next_bubble.x = next_x
game.next_bubble.y = next_y game.next_bubble.y = next_y