Players have collision group "player"
Enemies have collision group "enemy"
Blocks have collision group "ground"
Players don't collide with each other, but enemies and blocks. Likewise, enemies don't collide with each other but collide with players and blocks.
This is done with bitmasking, see the following pseudo-code
Should Players collide? No because the bitwise mask evaluates to 0
(player1.group & player2.mask) === 0
(0b001 & 0b110) === 0
Should Players and Enemies collide? Yes because the bitwise mask is non-zero
(player1.group & enemy1.mask) === 1
(0b001 & 0b101) === 1
Should Players and Blocks collide? Yes because the bitwise mask is non-zero
(player1.group & blocks1.mask) === 1
(0b001 & 0b011) === 1
STOP!! It is preferred that CollisionGroupManager.create is used to create collision groups unless you know how to construct the proper bitmasks. See https://github.com/excaliburjs/Excalibur/issues/1091 for more info.
Name of the collision group
32 bit category for the group, should be a unique power of 2. For example
32 bit mask of category, or
~category generally. For a category of
0b001, the mask would be
All CollisionGroup is a special group that collides with all other groups including itself,
it is the default collision group on colliders.
Get the category of the collision group, a 32 bit number which should be a unique power of 2
Get the mask for this collision group
Get the name of the collision group
Evaluates whether 2 collision groups can collide