 /* Implements SpriteKit specific wait methods for weapon protocol */
 extension SKWeapon where Self:SKSpriteNode {
     
+    /// Fires and disallow fire for rateOfFirePerSecond seconds
+    /// - Parameter afterFired: Optional block closure that is executed after the weapon fired
+    /// - Returns: void
     func fireAndWait(afterFired:(()->Void)?) {
         
         justFiring = true

 */
extension Weapon {
    
    func getRemainingShotsOfCurrentMagazine()->Int {
        return ammoOfCurrentMagazine
    }
    
    func allowedToReload()->Bool {
        return magazineSize > 0 && justReloading == false && justFiring == false
    }
    
    func allowedToFire()->Bool {
        return justFiring == false && justReloading == false && getRemainingShotsOfCurrentMagazine() > 0
    }
    
    func reload() {
        ammoOfCurrentMagazine = magazineSize
        remainingMagazines = remainingMagazines-1
    }
    
    func fire() {
        ammoOfCurrentMagazine = ammoOfCurrentMagazine-1
    }
    
    /* only fires and automatically reloads when it is allowed */
    func syncedFireAndReload(afterFired:(()->Void)?, afterReloadInit:(()->Void)?, afterReloadComplete:(()->Void)?) {
        
        print("syncedFireAndReload")

        
    }
    
    /// Only fires when it is allowed to fire
    func syncedFire(afterFired:(()->Void)?) {
        if allowedToFire() {
            fireAndWait(afterFired)
        }
    }
    
    /// Only reloads when it is allowed to reload
    func syncedReload(afterReloadInit:(()->Void)?, afterReloadComplete:(()->Void)?) {
        if allowedToReload() {
            // Reload
