Util for robotlegs framework to allow a single command to be mapped to a combination of events
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Robotlegs utility, tested against robotlegs v1.0 thru 1.4

Full test coverage is provided with asunit 3.

No swc as you should compile from source to ensure it extends the same version of robotlegs as the rest of your project.


In your context:

// implement this interface:
import org.robotlegs.core.ICompoundCommandContext;

protected var _compoundCommandMap:ICompoundCommandMap;

public function get compoundCommandMap():ICompoundCommandMap
    return _compoundCommandMap || (_compoundCommandMap = new CompoundCommandMap(eventDispatcher, injector, reflector));

public function set compoundCommandMap(value:ICompoundCommandMap):void
    _compoundCommandMap = value;

override protected function mapInjections():void
    injector.mapValue(ICompoundCommandMap, compoundCommandMap);

Where you want to map commands to multiple events:

// params: command, isOneShot, requireInOrder
compoundCommandMap.mapToEvents(SomeAwesomeCommand, true, true)
	.addRequiredEvent(SomeEvent.SOMETHING_HAPPENED, SomeEvent)
	.addRequiredEvent(SomeOtherEvent.SOMETHING_ELSE_HAPPENED, SomeOtherEvent, 'somethingElseHappened')
	.addRequiredEvent(SomeOtherEvent.STUFF_HAPPENED, SomeOtherEvent, 'stuffHappened');

In the command itself - named injection only required where you have multiple events of the same event class:

public var someEvent:SomeEvent;

public var somethingElseEvent:SomeOtherEvent;

public var stuffHappenedEvent:SomeOtherEvent;

etc - but there's a common use case where you'd only be interested in the fact that all 3 events have fired and wouldn't need the events at all, or would only need the last one.

ICompoundCommandMap has an API with 3 functions:

function mapToEvents(commandClass:Class, oneshot:Boolean = false, requiredInOrder:Boolean = false):ICompoundCommandConfig;
function hasCompoundCommand(commandClass:Class):Boolean;

function unmapCompoundCommand(commandClass:Class):ICompoundCommandConfig;

ICompoundCommandConfig - returned when mapping / unmapping - has the API:

function addRequiredEvent(eventType:String, eventClass:Class = null, named:String = ""):ICompoundCommandConfig;

function get requiredEvents():Array; 			// all events set using addRequiredEvent
function get remainingRequiredEvents():Array; 	// events that have not yet fired

function get requiredInOrder():Boolean; 		/* whether the events are only picked up in order - 
										   		ie event2 is ignored until after event1 is received */ 

function get eventsAsPayloads():Array; 			/* returns an array of the events that have arrived so
												   far as a strong typed IEventAsPayload with 3 properties:
										   		   the event, the event class and the event name,
												   if it was mapped with a name  */

function get oneshot():Boolean;					// whether this command is unmapped after one execution	

See tests/org/robotlegs/base/CompoundCommandMapTest for full usage examples.