Refactoring projectile launch with  callback support