Its not a complete answer, but for starters you can replace the "Rotate to Position" behavior (in the cannon actor) with a "Rotate to Angle" behavior. The formula for the angle would be: vectorToAngle( self.Position.X - game.Mouse.Position.X , self.Position.Y - game.Mouse.Position.Y )
Answers
vectorToAngle( self.Position.X - game.Mouse.Position.X , self.Position.Y - game.Mouse.Position.Y )
The trick is to reverse the subtractions. Instead of:
vectorToAngle( game.Mouse.Position.X - self.Position.X , game.Mouse.Position.Y - self.Position.Y )
you would use:
vectorToAngle( self.Position.X - game.Mouse.Position.X , self.Position.Y - game.Mouse.Position.Y )
It will take less than a minute to modify and test the cannon template. Try it! You might like it!