|
1
|
function scr_array_to_bitmask(arg0, arg1 = 1)
|
|
2
|
{
|
|
3
|
var maxvalue = power(2, arg1) - 1;
|
|
4
|
var newFlag = 0;
|
|
5
|
var arrayLength = array_length(arg0);
|
|
6
|
if (arrayLength > floor(18 / arg1))
|
|
7
|
scr_debug_printscr_debug_print
function scr_debug_print()
{
if (!scr_debug())
exit;
}
function scr_debug_clear_all()
{
} ("Warning! values_to_bitmask: Array too long. Truncating to " + string(floor(18 / arg1)));
|
|
8
|
for (var i = 0; i < min(arrayLength, floor(18 / arg1)); i++)
|
|
9
|
{
|
|
10
|
var value = arg0[i];
|
|
11
|
if (value > maxvalue || value < 0 || floor(value) != value)
|
|
12
|
{
|
|
13
|
scr_debug_printscr_debug_print
function scr_debug_print()
{
if (!scr_debug())
exit;
}
function scr_debug_clear_all()
{
} ("Warning! values_to_bitmask: Value " + string(i) + "is too large, too small or not an integer.");
|
|
14
|
value = clamp(floor(value), 0, maxvalue);
|
|
15
|
scr_debug_printscr_debug_print
function scr_debug_print()
{
if (!scr_debug())
exit;
}
function scr_debug_clear_all()
{
} ("Fixed Value: " + string(value));
|
|
16
|
}
|
|
17
|
newFlag |= ((value & maxvalue) << (i * arg1));
|
|
18
|
}
|
|
19
|
return newFlag;
|
|
20
|
}
|
|
21
|
|
|
22
|
function scr_bitmask_to_array(arg0, arg1, arg2 = 1)
|
|
23
|
{
|
|
24
|
var mask = power(2, arg2) - 1;
|
|
25
|
var values = array_create(arg1);
|
|
26
|
for (var i = 0; i < arg1; i++)
|
|
27
|
values[i] = (arg0 >> (i * arg2)) & mask;
|
|
28
|
return values;
|
|
29
|
}
|
|
30
|
|
|
31
|
function scr_set_bitmask_value(arg0, arg1, arg2, arg3 = 1)
|
|
32
|
{
|
|
33
|
var maxvalue = power(2, arg3) - 1;
|
|
34
|
if (arg2 > maxvalue || arg2 < 0 || floor(arg2) != arg2)
|
|
35
|
{
|
|
36
|
scr_debug_printscr_debug_print
function scr_debug_print()
{
if (!scr_debug())
exit;
}
function scr_debug_clear_all()
{
} ("Warning! scr_set_bitmask_value: Value " + string(arg2) + " is too large, too small or not an integer.");
|
|
37
|
arg2 = clamp(floor(arg2), 0, maxvalue);
|
|
38
|
scr_debug_printscr_debug_print
function scr_debug_print()
{
if (!scr_debug())
exit;
}
function scr_debug_clear_all()
{
} ("Fixed Value: " + string(arg2));
|
|
39
|
}
|
|
40
|
if (arg1 > (18 / arg3))
|
|
41
|
scr_debug_printscr_debug_print
function scr_debug_print()
{
if (!scr_debug())
exit;
}
function scr_debug_clear_all()
{
} ("ERROR: WRITING OUT OF BITMASK BOUNDS");
|
|
42
|
arg0 &= ~(maxvalue << (arg1 * arg3));
|
|
43
|
arg0 |= ((arg2 & maxvalue) << (arg1 * arg3));
|
|
44
|
return arg0;
|
|
45
|
}
|
|
46
|
|
|
47
|
function scr_get_bitmask_value(arg0, arg1, arg2 = 1)
|
|
48
|
{
|
|
49
|
var maxvalue = power(2, arg2) - 1;
|
|
50
|
return (arg0 >> (arg1 * arg2)) & maxvalue;
|
|
51
|
}
|