physics_collision_groups.dart 837 Bytes
Newer Older
1 2 3 4 5 6 7 8 9
part of flutter_sprites;

class _PhysicsCollisionGroups {

  _PhysicsCollisionGroups() {
    // Make sure there is a default entry in the groups
    getBitmaskForKeys(["Default"]);
  }

10
  Map<Object,int> keyLookup = <Object,int>{};
11 12 13

  List<Object> getKeysForBitmask(int bitmask) {
    List<Object> keys = [];
14
    keyLookup.forEach((Object key, int value) {
15
      if (value & bitmask != 0) {
16 17 18
        keys.add(key);
      }
    });
19
    return keys;
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
  }

  int getBitmaskForKeys(List<Object> keys) {
    if (keys == null) {
      return 0xffff;
    }

    int bitmask = 0;

    for (Object key in keys) {
      int value = keyLookup[key];
      if (value == null) {
        assert(keyLookup.length < 16);
        value = 1 << keyLookup.length;
        keyLookup[key] = value;
      }
      bitmask |= value;
    }
    return bitmask;
  }
}