public static function toBitset($mods)
{
if (!is_array($mods)) {
return 0;
}
$bitset = 0;
foreach (static::AVAILABLE_MODS as $availableMod) {
if (in_array($availableMod[1], $mods, true)) {
$bitset ^= 1 << $availableMod[0];
}
}
return $bitset;
}
public function scopeWithMods($query, $modsArray) { return $query->where(function ($q) use($modsArray) { if (in_array('NM', $modsArray, true)) { $q->orWhere('enabled_mods', 0); } $bitset = ModsHelper::toBitset($modsArray); if ($bitset > 0) { $q->orWhereRaw('enabled_mods & ? != 0', [$bitset]); } }); }