Moving the hard coded damage out of AttackSensor and letting Characters pass in a damage amount.
Moving the AttackSensor and MeleeAttackManager into their own module.
Cleaning up the AttackSensor a little: removed the KX_GameObject.__init__() call, which wasn't doing anything (the __new__ is where the magic is at). Also, just use *args for __new__ so we can easily add new arguments to __init__ without needing to update __new__.
Adding a RangeAttackManager that can shoot projectiles when its attack() method is called. UllerCharacter.right_attack_manager has been changed to a RangeAttackManager. Right now the RangeAttackManager grabs its owner's world position and forward vector as a start position and direction vector. This will eventually change to use the mouse.
Changing the MeleeAttackManager to take various attack arguments (like damage) upfront in its constructor instead of each attack call. It now matches the RangeAttackManager behavior.