utils.go 886 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package astar0
  2. import (
  3. "slices"
  4. )
  5. func Abs(n int32) int32 {
  6. y := n >> 31
  7. return (n ^ y) - y
  8. }
  9. func Min(a, b int32) int32 {
  10. if a < b {
  11. return a
  12. } else {
  13. return b
  14. }
  15. }
  16. func InList(list []*Node, x, y int32) bool {
  17. for _, itemNode := range list {
  18. if itemNode.x == x && itemNode.y == y {
  19. return true
  20. }
  21. }
  22. return false
  23. }
  24. func GetRectanglePoint(list []*Node) (minX, minY, maxX, maxY int32) {
  25. var (
  26. xList []int32
  27. yList []int32
  28. )
  29. for _, node := range list {
  30. xList = append(xList, node.x)
  31. yList = append(yList, node.y)
  32. }
  33. minX = slices.Min(xList)
  34. minY = slices.Min(yList)
  35. maxX = slices.Max(xList)
  36. maxY = slices.Max(yList)
  37. return
  38. }
  39. func BuildPathing(node *Node) []*Node {
  40. if node == nil {
  41. return nil
  42. }
  43. var list []*Node
  44. for {
  45. list = append([]*Node{node}, list...)
  46. if node.parent == nil {
  47. break
  48. }
  49. node = node.parent
  50. }
  51. return list
  52. }