From 85a6620dafcbc6a13d696d10ab092aa9c75ead6c Mon Sep 17 00:00:00 2001 From: Tyler Scott Date: Fri, 11 Feb 2022 21:55:00 +0700 Subject: [PATCH] Make ceiling drop after every n bubbles --- main.lua | 66 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 16 deletions(-) diff --git a/main.lua b/main.lua index 689304c..77cf4be 100644 --- a/main.lua +++ b/main.lua @@ -118,7 +118,7 @@ local function move_bubble(x, y, velocity_x, velocity_y) local should_stop = false -- collision with ceiling - if new_y - game.bubble_radius <= game.level_top then + if new_y - game.bubble_radius <= game.ceiling_bottom then should_stop = true end @@ -350,6 +350,11 @@ function love.load(arg) } game.current_level = 1 + game.bubbles_launched = 0 + game.ceiling_drops_after = 5 + game.ceiling_drop_tween = nil + game.ceiling_should_drop = false + game.bubble_slots = load_level( game.levels[game.current_level], game.bubble_diameter, game.row_gap ) @@ -364,10 +369,11 @@ function love.load(arg) game.level_top = game.bubble_radius game.level_right = game.level_left + game.level_width game.level_bottom = game.level_top + game.level_height + game.ceiling_bottom = game.level_top for i = 1, #game.bubble_slots do game.bubble_slots[i].x = game.bubble_slots[i].x + game.level_left - game.bubble_slots[i].y = game.bubble_slots[i].y + game.level_top + game.bubble_slots[i].y = game.bubble_slots[i].y + game.ceiling_bottom end game.launcher_image = love.graphics.newImage('images/launcher.png') @@ -388,11 +394,10 @@ function love.load(arg) bubble_types[#bubble_types+1] = bubble_type end end - game.next_bubble_index = 1 game.next_bubble = { x = game.launcher_x, y = game.launcher_y, - bubble_type = get_next_bubble_type(game.next_bubble_index, bubble_types), + bubble_type = get_next_bubble_type(game.bubbles_launched+1, bubble_types), velocity_x = 0, velocity_y = 0 } @@ -425,6 +430,23 @@ function love.update(dt) end end + if game.ceiling_drop_tween then + local old_y = game.ceiling_bottom + game.ceiling_drop_tween.t = game.ceiling_drop_tween.t + 1 + game.ceiling_bottom = easing.outBack( + game.ceiling_drop_tween.t, + game.ceiling_drop_tween.b, + game.ceiling_drop_tween.c, + game.ceiling_drop_tween.d + ) + for i = 1, #game.bubble_slots do + game.bubble_slots[i].y = game.bubble_slots[i].y + (game.ceiling_bottom - old_y) + end + if game.ceiling_drop_tween.t == game.ceiling_drop_tween.d then + game.ceiling_drop_tween = nil + end + end + if game.next_bubble and (game.next_bubble.velocity_x ~= 0 or game.next_bubble.velocity_y ~= 0) then @@ -445,6 +467,15 @@ function love.update(dt) game.bubble_slots[movement_info.nearest_slot_index].bubble_type = game.next_bubble.bubble_type + if game.ceiling_should_drop then + game.ceiling_drop_tween = { + t = 0, + d = 30, + b = game.ceiling_bottom, + c = game.bubble_diameter + } + end + local matches = find_matches(movement_info.nearest_slot_index) if #matches >= 3 then game.next_bubble = nil @@ -523,11 +554,10 @@ function love.update(dt) end end -- get next bubble - game.next_bubble_index = game.next_bubble_index + 1 game.next_bubble = { x = game.launcher_x, y = game.launcher_y, - bubble_type = get_next_bubble_type(game.next_bubble_index, bubble_types), + bubble_type = get_next_bubble_type(game.bubbles_launched+1, bubble_types), velocity_x = 0, velocity_y = 0 } @@ -612,13 +642,6 @@ function love.draw(alpha) game.bubble_radius, game.bubble_radius ) - else - love.graphics.circle( - 'line', - slot.x, - slot.y, - game.bubble_radius - ) end end @@ -627,9 +650,9 @@ function love.draw(alpha) love.graphics.rectangle( 'line', game.level_left, - game.level_top, + game.ceiling_bottom, game.level_width, - game.level_height + game.level_height - game.ceiling_bottom ) -- draw launcher @@ -732,12 +755,23 @@ function love.draw(alpha) end function love.mousepressed(x, y, button, is_touch, presses) - if button == 1 and game.next_bubble then + if button == 1 and game.next_bubble and + game.next_bubble.x == game.launcher_x and + game.next_bubble.y == game.launcher_y and + game.next_bubble.velocity_x == 0 and + game.next_bubble.velocity_y == 0 then local diff_x = x - game.launcher_x local diff_y = y - game.launcher_y local dist = math.sqrt(diff_x * diff_x + diff_y * diff_y) game.next_bubble.velocity_x = diff_x / dist * game.bubble_speed game.next_bubble.velocity_y = diff_y / dist * game.bubble_speed + + game.bubbles_launched = game.bubbles_launched + 1 + + -- if ceiling_should_drop is true, it will create a tween to drop the + -- ceiling (and bubbles) after the bubble that was just launched comes to a + -- stop in love.update() + game.ceiling_should_drop = game.bubbles_launched % game.ceiling_drops_after == 0 end end