     
 }
 
-/* Updates an SKLabelNode with new health points & vibrates */
-protocol DamageableUserCharacter:SKDamageableNode {
+
+/// Protocol that adds SKDamageEvents to SKDamagable
+protocol SKDamagableWithDamageEvents:class, SKDamagable, SKDamagableEventManager {
+
+    /// Adds and applies SKDamageEvent and subtracts health of node
+    func addAndApplyDamageEvent(event: SKDamageEvent) -> Void
+    
+}
+
+/// Default implementation for protocol SKDamagableWithDamageEvents
+extension SKDamagableWithDamageEvents {
+    
+    /// Adds and applies SKDamageEvent and subtracts health of node
+    func addAndApplyDamageEvent(event: SKDamageEvent) -> Void {
+        event.applied = true
+        event.appliedTime = NSDate().timeIntervalSince1970
+        damageEvents.append(event)
+        self.subtractHealthPoints(event.damagePoints)
+        print(self.getHealthPoints())
+    }
+
+}
+
+/// Updates an SKLabelNode with new health points & vibrates
+protocol DamageableUserCharacter:SKDamageableMaster, SKDamagableWithDamageEvents {
     var healthPointsLabelNode:SKLabelNode { get }
-    
-    func afterUpdateHealthPoints()
 }
 
 extension DamageableUserCharacter {

    func getHealthPoints()->Int {
        return self.healthPoints
    }
    
    func stopAction(actionKey:String) {
        self.removeActionForKey(actionKey)
    }
    
    func addAction(action: SKAction, withKey:String) {
        self.runAction(action, withKey: withKey)
    }
    
    func getAffectedSKNode() -> SKNode {
        return self as SKNode

}

/* Master node */
extension SKDamageableMaster where Self:SKNode  {

    func subtractHealthPoints(number:Int) {
        updateHealthPoints(healthPoints-number)
    }
    
