package {
public class EventManager{
private static var interestsList:Object = new Object();
/**
* Lets the EventManager know that this component/module is interested in these events.
* <p/>
* Thereafter, when EventManager.fireEvent gets called for any correlating event, it will let the component know.
*
* @param component The component that is interested in the event.
* @param interests An array of interests. All events/interests are in this case are strings. Although it is very common/standard to set up an Events class with static vars for easy referenece/rememberance.
*/
public static function registerInterests(component:*, interests:Array):void{
for(var i:int = 0; i < interests.length; i ++){
if(EventManager.interestsList[interests[i]] is Array){
EventManager.interestsList[interests[i]].push(component);
}
else{EventManager.interestsList[interests[i]] = new Array(component);}
}
}
/**
* Lets the EventManager know that this component/module is no longer interested in these events.
* <p/>
* Thereafter, when EventManager.fireEvent gets called for any correlating event, it will no longer let the component know.
*
* @param component The component to unregister for listed events/interests.
* @param interests An array of interests. All events/interests are in this case are strings. Although it is very common/standard to set up an Events class with static vars for easy referenece/rememberance.
*/
public static function unregisterInterests(component:*, interests:Array):void{
for(var i:int = 0; i < interests.length; i ++){
if(EventManager.interestsList[interests[i]] is Array){
var interestIndex:int = EventManager.interestsList[interests[i]].indexOf(component);
if(interestIndex != -1){
EventManager.interestsList[interests[i]].splice(interestIndex, 1);
}
}
}
}
/**
* Fire an event, letting all interested components know of said event.
*
* @param event The event that is being fired.
* @param args An Object of arguments. It's an Object so as to be flexible/dynamic.
*/
public static function fireEvent(event:String, args:Object = null):void{
if(EventManager.interestsList[event] is Array){
for(var i:int = 0; i < EventManager.interestsList[event].length; i ++){
if(EventManager.interestsList[event][i] != null && EventManager.interestsList[event][i].catchEvent != null){
EventManager.interestsList[event][i].catchEvent(event, args);
}
else{
trace("WARNING!: catchEvent Function not found on " + EventManager.interestsList[event][i]);
}
}
}
}
}
}