Collision group groups

#1

I have been working on a game for a reasonable amount of time now, and one thing I think would greatly improve the engine is some kind of group for groups in the collisionobjects. For example, I have many maps in my game. Each has a collisionobject set to the tilemap for the map. However, if I want to add a new group which collides with all the map geometry, I have to go through every single map and add that group to the collisionobject. If I forget one, then things seem like they’re working until I play that map and then the missing group becomes apparent. Better would be to have a group such as “map colliding groups” and then list all the collision groups that should collide with maps. Then, the maps could have a mask for the “map colliding group” which when compiled could expand out to the list of groups that maps should collide with. This would save a ton of time going forward as I add more content to the game.

0 Likes

#2

What’s the reasoning for adding unique collision group ids based on the map? Maybe there is a better way to tag the enemies of each unique map?

0 Likes

#3

Each enemy uses the “enemy” group in my game, but I have other groups that should collide with the level collisionobject. For example, right now my mask for the level looks like this: “default, items, player, enemy, projectile, breakable” However, if I were to add another group which collides with levels, then I must change this for all the levels instead of just having a group for groups used for all levels. In the case of when I added breakable objects, I had to modify all my levels to include “breakable”. I’m thinking I will add an “explosion” group perhaps eventually to handle explosions which I don’t want to pass through walls. These may interact in different ways than a projectile (since I’m using triggers for these.) However, I have ~20 maps already. So this requires updating 20 collisionobjects to include the new group.

0 Likes

#4

Another option would be to add the possibility to edit the collision groups at runtime (not currently possible as far as I know?). Then you could build your own logic around it. I don’t think Box2D supports “groups groups”, so may be a more clean approach.

2 Likes

#5

Issue: https://github.com/defold/defold/issues/3459

Go and vote!

2 Likes

#6

Runtime edits would be great, i think. Voted.

Having collision group groups, i think would not be worth implementing. Unless something has changed, I believe the max collision groups is still 16? I feel like a basic game design doc before starting to jump into adding groups and masks to objects basically solves this issue, at least for me.

Personally, since i almost never use dynamic collision objects, I tend to make very few groups (geometry, entity, item, player, maybe another 1 or 2), and use go.properties (if everything has a script attached) or a lua module of GOs w/ my own “sub-groupings” to compare against for handling kinematic collisions.

I have no idea if this is a “good” solution, or what kind of overhead it adds, but i ran hard into the 16 group limit a few years ago working on a jam game with much-too-granular collision groupings, and vowed never to rely on that again if I can get away with it.

4 Likes