updated weapons so projectile is an abstract class that other projectile
types can implement