class nape.dynamics.InteractionGroup

Available on all platforms

InteractionGroups are another way of filtering interactions. *

* InteractionGroups form tree structures which are checked along side InteractionFilters * when deciding if two Shapes should interact. *

* InteractionGroups are assigned to any Interactor (not just Shapes), and two Shapes will * interact only if the most recent common ancestor in the InteractionGroup tree permits it. *

* For the purposes of the search, if any Interactor has no InteractionGroup assigned, we * search up the Compound tree first. *

 *            _Group1
 *           /   |
 *          /  Group2      Group3
 *         /    |    \       |                 Group1
 *     Body1   /      Cmp1   |                 /   \           Group3
 *    /    \  /      /    \  |      ==>    Shp1    Group2        |
 * Shp1   Shp2   Body2     Cmp2                    /    \      Shp4
 *                 |         |                  Shp2    Shp3
 *                Shp3     Body3
 *                           |
 *                         Shp4
 * 
* If we look at which InteractionGroup is used for which Shape following this rule, then * the left graph can be transformed into an InteractionGroup tree on the right and we get * that the MRCA (Most recent common ancestors) are such that: *
 * MRCA(Shp1, Shp3) == Group1;
 * MRCA(Shp2, Shp3) == Group2;
 * MRCA(Shp4,   # ) == null;
 * 
* If we were to set up the groups such that Group1.ignore = false and * Group2.ignore = true; then shapes 1 and 3 would not be permitted to * interact, whilst shapes 2 and 3 would be permitted. *
* As the MRCA for shape 4 with any other is null, then the value of Group3's ignore field * is irrelevant, but the existance of Group3 is not as it serves to otherwise prevent Shape 4 * from being permitted to interact with shapes 2 and 3. *

* InteractionGroup's can be fairly expressive, but they are strictly less powerful than * InteractionFilters. InteractionGroup's have their place however as there is no limit * to the number of Groups you can use.

Instance Fields

var group:Null<InteractionGroup>

Parent group in InteractionGroup tree. * @default null

var groups:InteractionGroupList

Immutable set of children of Interaction groups. *

* You cannot assign or remove children in this manner, you must do it via setting * the childs parent group to this/null. *

* This list is immutable.

var ignore:Bool

Ignore property, set to true so that objects will not interact. * @default false

var interactors:InteractorList

Set of active interactors using this group. *

* Active interactors meaning those that are part of a Space. *

* This list is immutable.

function new(?ignore:Bool = false):Void

Construct a new InteractionGroup. * *

ignore

Whether interactors should be ignored. (default false)

function toString():String

@private