/** * @author SamsamTS */ import com.samsamts.Events.*; class com.samsamts.Events.Event { //{ Author properties public static var className:String = "Event"; public static var classPackage:String = "com.samsamts.Events"; public static var version:String = "1.0.0"; public static var author:String = "SamsamTS"; public static var link:String = "http://www.samsamts.com/blog/"; //} public function Event() { m_arrHandlers = new Array(); } //{ Public /** * Add an EventHandler * @param handler * @return The event */ public function Add(handler:EventHandler):Event { Remove(handler); m_arrHandlers.push(handler); return this; } /** * Remove an EventHandler * @param handler * @return The event */ public function Remove(handler:EventHandler):Event { for (var i : Number = 0; i < m_arrHandlers.length; i++) { if(m_arrHandlers[i].Compare(handler)) { m_arrHandlers.splice(i,1); return this; } } return this; } /** * Trigger the event (it calls all EventHandlers) * @param sender Object sending the event * @param arg EventArgs to be transmitted */ public function Trigger(sender:Object, arg:EventArgs):Void { var arr:Array = m_arrHandlers.slice(); var l:Number = arr.length; for (var i:Number = 0; i < l; i++) { if(!arr[i].Call(sender, arg)) Remove(arr[i]); } } /** * Get the number of registered event handlers * @return number of registered event handlers */ public function get Count():Number { return m_arrHandlers.length; } public function toString():String { return "[Event]"; } //} //{ Private private var m_arrHandlers:Array; private var m_name:String; //} }