         self.runAction(waitSequenceAction)
     }
     
+    
+    /// Reloads and waits for reloadTimeSeconds seconds
+    /// - Parameter afterReloadInit: Optional block closure that is executed after the weapon starts to reload
+    /// - Parameter afterReloadComplete: Optional block closure that is executed after the weapon was reloaded
+    /// - Returns: Void
     func reloadAndWait(afterReloadInit:(()->Void)?, afterReloadComplete:(()->Void)?) {
         
         justReloading = 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")

    }
}*/

/* Basic weapon protocol */
protocol Weapon:class {

    /// Time that should be waited for before it is allowed to fire again
    var rateOfFirePerSecond:NSTimeInterval { get set }
    
    /// Ammo of the current magazine
    var ammoOfCurrentMagazine:Int { get set }
    
    /// Ammo capacity of one magazine
    var magazineSize:Int { get set }
    
    /// Remaining available magazines
    var remainingMagazines:Int { get set }
    
    /// Time it should take to reload the weapon
    var reloadTimeSeconds:NSTimeInterval { get set }
    
    /// Damage points every shot should subtract
    var damagePoints:Int { get set }
    
    /// Is true if weapon is just firing, false if not
    var justFiring:Bool { get set }
    
    /// Is True if weapon is just being reloaded, false if not
    var justReloading:Bool { get set }
    
    /// Set to true if weapon should be reloaded automatically when the magazine is empty, false if not
    var autoReload:Bool { get set }
    
    func getRemainingShotsOfCurrentMagazine() -> Int
    
    func reload()

    func reloadAndWait(afterReloadInit:(()->Void)?, afterReloadComplete:(()->Void)?) -> Void
    
    func fire() -> Void
    func fireAndWait(afterFired:(()->Void)?) -> Void
    func allowedToReload() -> Bool
    func allowedToFire() -> Bool
    
