Use # operator for vector length

This commit is contained in:
Quinn
2021-12-28 15:53:58 -08:00
parent 491d94d647
commit f473777684
4 changed files with 10 additions and 10 deletions
+5 -5
View File
@@ -18,8 +18,7 @@ vec2 = {
end,
normal = function(self)
local length = self:length()
return vec2:new(self.x/length, self.y/length)
return vec2:new(self.x/#self, self.y/#self)
end,
bounce = function(self, n)
@@ -44,6 +43,7 @@ vec2.__mul = function(o1,o2)
end
vec2.__div = function(v,s) return vec2:new(v.x/s,v.y/s) end
vec2.__unm = function(v) return vec2:new(-v.x,-v.y) end
vec2.__len = function(v) return v:length() end
vec2.__tostring = function(v) return "{x: "..v.x..",y: "..v.y.."}" end
vec2.__index = vec2
@@ -113,7 +113,7 @@ ball = {
for b in all(balls) do
if (b.id != self.id and (collisions[b] == nil or collisions[b][self] == nil)) then
local diff = self.pos - b.pos
if (diff:length() < self.rad + b.rad) then
if (#diff < self.rad + b.rad) then
collisions[self] = collisions[self] or {}
collisions[self][b] = diff
end
@@ -185,7 +185,7 @@ function handle_collisions()
rewind = 0.1 * steps
s_xpoint = source.pos - source.vel * rewind
t_xpoint = target.pos - target.vel * rewind
until rewind > 1 or (s_xpoint - t_xpoint):length() >= source.rad + target.rad
until rewind > 1 or #(s_xpoint - t_xpoint) >= source.rad + target.rad
local s_newvel = collision_vel(s_xpoint, source.vel, t_xpoint, target.vel, source:mass(), target:mass())
local t_newvel = collision_vel(t_xpoint, target.vel, s_xpoint, source.vel, target:mass(), source:mass())
source.pos = s_xpoint + source.vel * rewind
@@ -201,7 +201,7 @@ function collision_vel(x1,v1,x2,v2,m1,m2)
m2 = m2 or 1
local x_diff = x1 - x2
local v_diff = v1 - v2
return v1 - x_diff * (2 * m2 / (m1 + m2)) * v_diff:dot(x_diff) / x_diff:length()^2
return v1 - x_diff * (2 * m2 / (m1 + m2)) * v_diff:dot(x_diff) / (#x_diff)^2
end
__gfx__