From f47377768490a27cfccb9d17e5aaedbe9d9fd8f1 Mon Sep 17 00:00:00 2001 From: Quinn Date: Tue, 28 Dec 2021 15:53:58 -0800 Subject: [PATCH] Use # operator for vector length --- ball.lua | 2 +- main.lua | 4 ++-- qphys.p8 | 10 +++++----- vec2.lua | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ball.lua b/ball.lua index eef9fec..00d2060 100644 --- a/ball.lua +++ b/ball.lua @@ -44,7 +44,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 diff --git a/main.lua b/main.lua index 869a7de..3d37049 100644 --- a/main.lua +++ b/main.lua @@ -49,7 +49,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 @@ -65,5 +65,5 @@ 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 diff --git a/qphys.p8 b/qphys.p8 index dc4c597..8225c04 100644 --- a/qphys.p8 +++ b/qphys.p8 @@ -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__ diff --git a/vec2.lua b/vec2.lua index 3b7c92d..030332b 100644 --- a/vec2.lua +++ b/vec2.lua @@ -15,8 +15,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) @@ -41,6 +40,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