Стоит еще отметить, что это PLAYER | SHOT | LINE - битовая маска, до 32 констант можно создать и комбинировать их в разные маски, что весьма удобно:
const TYPE_NAME01 = 1 << 0, // ...0000000001 (2) 1 (10)
TYPE_NAME02 = 1 << 1, // ...0000000010 (2) 2 (10)
TYPE_NAME03 = 1 << 2, // ...0000000100 (2) 4 (10)
TYPE_NAME04 = 1 << 3, // ...0000001000 (2) 8 (10)
TYPE_NAME05 = 1 << 4, // ...0000010000 (2) 16 (10)
TYPE_NAME06 = 1 << 5, // ...0000100000 (2) 32 (10)
TYPE_NAME07 = 1 << 6, // ...0001000000 (2) 64 (10)
TYPE_NAME08 = 1 << 7, // ...0010000000 (2) 128 (10)
TYPE_NAME09 = 1 << 8, // ...0100000000 (2) 256 (10)
TYPE_NAME10 = 1 << 9, // ...1000000000 (2) 512 (10)
// ... ... ...
// TYPE_NAME32 = 1 << 31,// ...10000000000000000000000000000000 (2) 2147483648 (10)
TYPE_GROUP1 = TYPE_NAME01 | TYPE_NAME02 | TYPE_NAME03 | TYPE_NAME04 | TYPE_NAME05, // ...0000011111 (2) 31 (10)
TYPE_GROUP2 = TYPE_NAME06 | TYPE_NAME07 | TYPE_NAME08 | TYPE_NAME09 | TYPE_NAME10, // ...1111100000 (2) 992 (10)
TYPE_ALL = TYPE_GROUP1 | TYPE_GROUP2 ; // ...1111111111 (2) 1023 (10)
demo(TYPE_ALL, 'all');
demo(TYPE_GROUP1, 'group 1');
demo(TYPE_GROUP2, 'group 2');
demo(TYPE_ALL ^ TYPE_NAME03 ^ TYPE_NAME08, '(^) all types except 3 and 8'); // ...1101111011 (2) 891 (10)
demo(TYPE_ALL & ~TYPE_NAME03 & ~TYPE_NAME08, '(& ~) all types except 3 and 8'); //
demo(TYPE_NAME03 | TYPE_GROUP2 ^ TYPE_NAME08, 'only type 3 and group 2 except type 8'); // ...1101100100 (2) 868 (10)
function demo(type, note) {
const mask = [null, null, null, null, null, null, null, null, null, null];
if (type & TYPE_NAME01) mask[9] = '01';
if (type & TYPE_NAME02) mask[8] = '02';
if (type & TYPE_NAME03) mask[7] = '03';
if (type & TYPE_NAME04) mask[6] = '04';
if (type & TYPE_NAME05) mask[5] = '05';
if (type & TYPE_NAME06) mask[4] = '06';
if (type & TYPE_NAME07) mask[3] = '07';
if (type & TYPE_NAME08) mask[2] = '08';
if (type & TYPE_NAME09) mask[1] = '09';
if (type & TYPE_NAME10) mask[0] = '10';
console.log(mask, note);
}