Love the game. Can I suggest you explain, at the start of the game, that once the ball is full you can re-click to dash?
Also, I love the upgrades and the way they can be dragged, but could you do an alternate display of the upgrades just showing the next one available for each path, to avoid scrolling around looking at what's still left? Or at least a zoom on the upgrades? Or both?
Oh, and there seems to be two 'Combo Bonus 2' boxes, you select one and the other is selected automatically (but it throws off the pricing down that branch)
And I think perhaps a little work on syncing the bat position with the dash direction? My guess is you are using a delta (amount bat moves) to rotate it rather than an absolute (bat position x multiplier = dash direction), so it sometimes gets out of sync.
EDIT: I gotta say, the end game physics goes really funky. I mean, I've got balls going through boxes and the bat (losing a life unfairly); I've got dashes that make the UI and the noise and then do not fire - the ball just drops; I've got weird bounces off blocks and the bat and the tower wall; I've got level resets being missed, or happening late and losing a life (quite often I'm getting BOTH a life lost and a level passed, which should not be possible); and so on. I think in your Update() function (or whatever Godot uses for it) you may need to look not only at where the ball ends up after you add in the time (or the delta, or whatever it's called), but also what it travelled through on the way - in other words, look at the line of travel from start point to end point (rather than just the end point) and see if it intersects something (a box, a bat, a level marker, the tower wall) and where.