support multi-module (#4)

* add multimodule
* re-package modules
This commit is contained in:
Ilia Denisov
2026-02-22 08:57:19 +02:00
committed by GitHub
parent 9e36d7151e
commit 8f982278d2
132 changed files with 317 additions and 191 deletions
+81
View File
@@ -0,0 +1,81 @@
package util
import "math"
func ShortDistance(w, h uint32, x1, y1, x2, y2 float64) float64 {
return math.Hypot(deltas(w, h, x1, y1, x2, y2))
}
func NextTravelCoord(w, h uint32, x1, y1, x2, y2, delta float64) (float64, float64, bool) {
deltaX, deltaY := deltas(w, h, x1, y1, x2, y2)
distance := math.Hypot(deltaX, deltaY)
if distance <= delta {
return x2, y2, true
}
// [ ] refactor - remove extra vars
xa := 0.
ya := 0.
xb := deltaX
yb := deltaY
d := distance
d2 := delta
xc := xa - (d2*(xa-xb))/d
yc := ya - (d2*(ya-yb))/d
// ---
var tx, ty float64
if math.Abs(x2-x1) > float64(w/2) {
// moving across X boundary
if x2 < x1 {
// moving across higher border
tx = math.Mod(x1+xc, float64(w))
} else {
// moving across lower border
tx = x1 - xc
if tx < 0 {
tx = float64(w) + tx
}
}
} else {
if x2 < x1 {
tx = x1 - xc
} else {
tx = x1 + xc
}
}
if math.Abs(y2-y1) > float64(h/2) {
// moving across Y boundary
if y2 < y1 {
// moving across higher border
ty = math.Mod(y1+yc, float64(h))
} else {
// moving across lower border
ty = y1 - yc
if ty < 0 {
ty = float64(h) + ty
}
}
} else {
if y2 < y1 {
ty = y1 - yc
} else {
ty = y1 + yc
}
}
return tx, ty, false
}
func deltas(w, h uint32, x1, y1, x2, y2 float64) (float64, float64) {
dx := math.Abs(x2 - x1)
dy := math.Abs(y2 - y1)
if dx > float64(w/2) {
dx = float64(h) - dx
}
if dy > float64(h/2) {
dy = float64(h) - dy
}
return dx, dy
}