added weapon factory class