         return magazineSize > 0 && justReloading == false && justFiring == false
     }
     
-    /// tells you if it is allowed to fire. depending if weapon is just firing or just reloading
+    /// tells you if it is allowed to fire. depending if weapon is just firing or just reloading. If infiniteAmmo is true it will return true even if ammoOfCurrentMagazine is 0
     /// - Returns: Bool
     func allowedToFire()->Bool {
-        return justFiring == false && justReloading == false && ammoOfCurrentMagazine > 0
+        return justFiring == false && justReloading == false && (infiniteAmmo == true || ammoOfCurrentMagazine > 0)
     }
     
     /// reloads the weapon. it discards current ammoOfCurrentMagazine and use a new magazine to refill it

        }
            
        let waitSequenceAction = SKAction.sequence([rateOfFireWait, allowFireBlock])
        self.runAction(waitSequenceAction)
    }
    
    

 
 Usage in SpriteKit:
 
 1) Create a an instance of a SKWeapon conform class (you may use SKWeaponGenerator)
 
 2) a) If you don't want to care a lot about when it should be allowed to fire (i.e. when the user touches your fire button) just call syncedFireAndReload(). It will try to fire everytime its possible and reloads automatically after a defined time span. Optionally you can pass hooks in form of blocks for the previously mentioned events
 
    b) Create your own fire logic with help of the available methods and variables

