Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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]);
					}
				}
			}
		}
	}
}