Major Refactoring to generic gun class