In Sovereignty, we don’t really want to allow unlimited/infinite and no-lag weapons fire. Therefore, we need to enable a Cooldown (CD) on player input of the weapons that are capable of being fired.
After further refactoring, this method will be for the primary single-shot laser, which can eventually be upgraded to a double-shot laser. In addition, the goal is to have three weapons systems — primary (lasers and twin lasers), secondary (various kinds of missiles), and auxiliary (special weapons, such as EMP bursts, space mines, and ion weapons that can disable shields). I’m also interested in a once-per-minute ult that they can leverage as an ace up their sleeve. Although, I’m still determining what an appropriate input scheme should be — do the users swap between systems and always fire using a single key? After considering this for a bit, I decided to go down the path of the MOBA — QWER! Of course, we’re using W as an alternate to move up, so we’ll use spacebar for primary weapons, Q for secondary weapons, E for auxiliary weapons, and R for the ults. This way a user can press four “weapons” keys simultaneously, allowing for some interesting combinations. That being the case, I expect to see the variables actually be _canFirePrimary, _canFireSecondary, _canFireAuxiliary, and _canFireUltimate. The _fireRates would probably also have to include the weapon system in the names. This is what it looks like afterwards:
Then, that being the case, let’s update our weapons input tracking methods:
Beyond this, the logic is fairly similar and straight forward per ability/weapons system: check to see the appropriate key has been pressed and that the game time exceeds the previous cooldown offset, then instantiate an instance of that weapons systems’ prefab with appropriate position offset and direction/velocity.
So all we have to do is make sure that the appropriate weapons prefabs are set on the player object, or add in some logic to disallow firing if they haven’t yet “picked up” or “earned” the other weapons systems (meaning that the prefab is currently set to null).