Only track lower and upper bounds in world space, and speak in terms of world space and chunks
57 lines
977 B
Go
57 lines
977 B
Go
package maths
|
|
|
|
// Abs gets the absolute value of an int
|
|
func Abs(x int) int {
|
|
if x < 0 {
|
|
return -x
|
|
}
|
|
return x
|
|
}
|
|
|
|
// Pmod is a mositive modulo
|
|
// golang's % is a "remainder" function si misbehaves for negative modulus inputs
|
|
func Pmod(x, d int) int {
|
|
if x == 0 || d == 0 {
|
|
return 0
|
|
}
|
|
x = x % d
|
|
if x >= 0 {
|
|
return x
|
|
} else if d < 0 {
|
|
return x - d
|
|
} else {
|
|
return x + d
|
|
}
|
|
}
|
|
|
|
// Max returns the highest int
|
|
func Max(x, y int) int {
|
|
if x < y {
|
|
return y
|
|
}
|
|
return x
|
|
}
|
|
|
|
// Min returns the lowest int
|
|
func Min(x, y int) int {
|
|
if x > y {
|
|
return y
|
|
}
|
|
return x
|
|
}
|
|
|
|
// RoundUp rounds a value up to the nearest multiple
|
|
func RoundUp(toRound int, multiple int) int {
|
|
remainder := Pmod(toRound, multiple)
|
|
if remainder == 0 {
|
|
return toRound
|
|
}
|
|
|
|
return (multiple - remainder) + toRound
|
|
}
|
|
|
|
// RoundDown rounds a value down to the nearest multiple
|
|
func RoundDown(toRound int, multiple int) int {
|
|
remainder := Pmod(toRound, multiple)
|
|
return toRound - remainder
|
|
}
|