At least three different weapon types should exist.
TYPE 1: The "normal" weapon type fires a single projectile quickly and with moderate damage, similar to early shooting mechanics in the "Shooting Mechanics" issue. ("Pistol" type)
TYPE 2: The "fast" weapon type fires similarly to type 1, but can be held down and fires projectiles in quick succession with low damage. ("Machine gun" type)
TYPE 3: The "spread" weapon fires multiple high-damage, slow projectiles at once. It should have a slow cooldown. ("Shotgun" type)
The implementer is free to add more types if desired, within reason.
For now, the method by which the player selects a gun should be an enum, with each enum value correlating to a weapon type.
No model of any type is needed to test fire the weapon types.
NOTE: All information about the weapons is left purposefully vague in terms of exact speed and damage values. The implementer is free to interpret the language within this issue, within reason. In other words, exact values are left up to the implementer.