Signature
stock constraint_offset(low, high, seed, offset){ new numElements = high - low + 1; offset += seed - low; if(offset >= 0) { return low + (offset % numElements); } else { return high - (abs(offset) % numElements) + 1; } return 0; // Makes the compiler happy -_-}
Description
Computes an offset from a given value while constraining it between the
specified bounds, rolling over if necessary.
Notes
-
Example: The range is 1-5 and the base value (seed) is 3, the offset
that the value should be moved by is also 3. Offsetting the value by 3
would result in 6, but it is to be constrained between 1 and 5. With
clamp() this would result in 5, but this function rolls the value over
and returns 1 instead.
Parameters
- low — Lower bound
- high — Higher bound
- seed — Base value
- offset — Offset to move
Returns
Computed offset value between specified bounds