源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

152 行
2.7 KiB

  1. local acos = math.acos
  2. local clamp = Mathf.Clamp
  3. local sqrt = Mathf.Sqrt
  4. local setmetatable = setmetatable
  5. local rawset = rawset
  6. local rawget = rawget
  7. local Vector2 = {}
  8. local get = tolua.initget(Vector2)
  9. Vector2.__index = function(t,k)
  10. local var = rawget(Vector2, k)
  11. if var == nil then
  12. var = rawget(get, k)
  13. if var ~= nil then
  14. return var(t)
  15. end
  16. end
  17. return var
  18. end
  19. Vector2.__call = function(t, x, y)
  20. return Vector2.New(x, y)
  21. end
  22. function Vector2.New(x, y)
  23. -- print(debug.traceback(""))
  24. -- print("2222222222222222222222222 Vector2.New")
  25. local v = {x = x or 0, y = y or 0}
  26. setmetatable(v, Vector2)
  27. return v
  28. end
  29. function Vector2:Set(x,y)
  30. self.x = x or 0
  31. self.y = y or 0
  32. end
  33. function Vector2:Get()
  34. return self.x, self.y
  35. end
  36. function Vector2:SqrMagnitude()
  37. return self.x * self.x + self.y * self.y
  38. end
  39. function Vector2:Clone()
  40. return Vector2.New(self.x, self.y)
  41. end
  42. function Vector2:Normalize()
  43. local v = self:Clone()
  44. return v:SetNormalize()
  45. end
  46. function Vector2:SetNormalize()
  47. local num = self:Magnitude()
  48. if num == 1 then
  49. return self
  50. elseif num > 1e-05 then
  51. self:Div(num)
  52. else
  53. self:Set(0,0)
  54. end
  55. return self
  56. end
  57. function Vector2.Dot(lhs, rhs)
  58. return lhs.x * rhs.x + lhs.y * rhs.y
  59. end
  60. function Vector2.Angle(from, to)
  61. return acos(clamp(Vector2.Dot(from:Normalize(), to:Normalize()), -1, 1)) * 57.29578
  62. end
  63. function Vector2.Magnitude(v2)
  64. return sqrt(v2.x * v2.x + v2.y * v2.y)
  65. end
  66. function Vector2:Div(d)
  67. self.x = self.x / d
  68. self.y = self.y / d
  69. return self
  70. end
  71. function Vector2:Mul(d)
  72. self.x = self.x * d
  73. self.y = self.y * d
  74. return self
  75. end
  76. function Vector2:Add(b)
  77. self.x = self.x + b.x
  78. self.y = self.y + b.y
  79. return self
  80. end
  81. function Vector2:Sub(b)
  82. self.x = self.x - b.x
  83. self.y = self.y - b.y
  84. return
  85. end
  86. Vector2.__tostring = function(self)
  87. return string.format("[%f,%f]", self.x, self.y)
  88. end
  89. Vector2.__div = function(va, d)
  90. return Vector2.New(va.x / d, va.y / d)
  91. end
  92. Vector2.__mul = function(va, d)
  93. return Vector2.New(va.x * d, va.y * d)
  94. end
  95. Vector2.__add = function(va, vb)
  96. return Vector2.New(va.x + vb.x, va.y + vb.y)
  97. end
  98. Vector2.__sub = function(va, vb)
  99. return Vector2.New(va.x - vb.x, va.y - vb.y)
  100. end
  101. Vector2.__unm = function(va)
  102. return Vector2.New(-va.x, -va.y)
  103. end
  104. Vector2.__eq = function(va,vb)
  105. return va.x == vb.x and va.y == vb.y
  106. end
  107. get.up = function() return Vector2.New(0,1) end
  108. get.right = function() return Vector2.New(1,0) end
  109. get.zero = function() return Vector2.New(0,0) end
  110. get.one = function() return Vector2.New(1,1) end
  111. get.magnitude = Vector2.Magnitude
  112. get.normalized = Vector2.Normalize
  113. get.sqrMagnitude = Vector2.SqrMagnitude
  114. UnityEngine.Vector2 = Vector2
  115. setmetatable(Vector2, Vector2)
  116. return Vector2