void OnCollisionEnter2D(Collision2D collision)
    {
        GameObject explosionInst = Instantiate(shellExplosion, this.transform.position, this.transform.rotation);

        ShellController shellC = explosionInst.GetComponent <ShellController>();

        shellC.playerM = playerM;
        shellC.Init(BalanceTweaks.GlobalInstance.explosiveGun.shellDamage, 0, 1.1f);
    }
    public void Fire()
    {
        if (timeAccumulator > weaponTweaks.fireDelaySeconds)
        {
            float anglePerShell = weaponTweaks.shotSpread / weaponTweaks.shellsPerShot;
            float startAngle    = this.transform.rotation.eulerAngles.z - (weaponTweaks.shotSpread / 2);
            float endAngle      = startAngle + weaponTweaks.shotSpread;

            for (int i = 0; i < weaponTweaks.shellsPerShot; i++)
            {
                float shellAngle = Random.Range(startAngle, endAngle);

                GameObject shellInst = Instantiate(weaponTweaks.shellPrefab, shellSpawn.position, Quaternion.Euler(0, 0, shellAngle), playerM.gameObject.transform);

                shellInst.layer = LAYER_START_INDEX + playerM.playerNum;

                ShellController shellC = shellInst.GetComponent <ShellController>();
                shellC.playerM = playerM;
                shellC.Init(weaponTweaks.shellDamage, weaponTweaks.shellSpeed, weaponTweaks.shellDestroyTime);
            }

            timeAccumulator = 0.0F;
        }
    }