diff --git a/main.lua b/main.lua index 1e4f466..8fcb375 100644 --- a/main.lua +++ b/main.lua @@ -177,13 +177,9 @@ local function move_bubble(x, y, velocity_x, velocity_y) } end -local function generate_aim_guide(towards_x, towards_y) - -- TODO: don't allow aiming backwards - local diff_x = towards_x - game.launcher_x - local diff_y = towards_y - game.launcher_y - local dist = math.sqrt(diff_x * diff_x + diff_y * diff_y) - local velocity_x = diff_x / dist * game.bubble_speed - local velocity_y = diff_y / dist * game.bubble_speed +local function generate_aim_guide(angle) + local velocity_x = math.cos(angle) * game.bubble_speed + local velocity_y = math.sin(angle) * game.bubble_speed local new_x = game.launcher_x local new_y = game.launcher_y local radius = 5 @@ -354,7 +350,7 @@ local function start_level() game.show_aim_guide = true game.aim_guide = {} - generate_aim_guide(game.window_width / 2, game.window_height / 2) + generate_aim_guide(game.launcher_rotation) game.bursting_bubbles = {} game.falling_bubbles = {} @@ -527,7 +523,7 @@ function love.update(dt) game.ceiling_drop_tween = nil end if game.show_aim_guide then - generate_aim_guide(love.mouse:getX(), love.mouse:getY()) + generate_aim_guide(game.launcher_rotation) end end @@ -632,7 +628,7 @@ function love.update(dt) end if game.show_aim_guide then - generate_aim_guide(love.mouse:getX(), love.mouse:getY()) + generate_aim_guide(game.launcher_rotation) end -- calculate remaining bubble types @@ -952,13 +948,13 @@ function love.mousepressed(x, y, button, is_touch, presses) game.current_bubble.y == game.launcher_y and game.current_bubble.velocity_x == 0 and game.current_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) - -- TODO: don't allow shooting backwards - game.current_bubble.velocity_x = diff_x / dist * game.bubble_speed - game.current_bubble.velocity_y = diff_y / dist * game.bubble_speed + -- use the angle from mousemoved to calculate the velocity so that shooting + -- backwards is not possible + game.current_bubble.velocity_x = + math.cos(game.launcher_rotation) * game.bubble_speed + game.current_bubble.velocity_y = + math.sin(game.launcher_rotation) * game.bubble_speed game.bubbles_launched = game.bubbles_launched + 1 @@ -973,13 +969,24 @@ function love.mousemoved(x, y, dx, dy, is_touch) if not game.game_over then local diff_x = x - game.launcher_x local diff_y = y - game.launcher_y - local rotation = math.atan2(diff_y, diff_x) - if rotation >= -tau * 7 / 16 and rotation <= -tau / 16 then - game.launcher_rotation = rotation + local angle = math.atan2(diff_y, diff_x) + + -- force angle to be positive + if y < game.launcher_y then + angle = angle + tau end + -- don't allow aiming backwards + if (angle >= 0 and angle <= tau / 4) or angle >= tau * 25 / 26 then + angle = tau * 25 / 26 + elseif angle >= tau / 4 and angle <= tau * 14 / 26 then + angle = tau * 14 / 26 + end + + game.launcher_rotation = angle + if game.show_aim_guide then - generate_aim_guide(x, y) + generate_aim_guide(game.launcher_rotation) end end end