Показать сообщение отдельно
  #15 (permalink)  
Старый 16.09.2017, 00:06
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Стоит еще отметить, что это 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);
}
Ответить с цитированием