summaryrefslogtreecommitdiff
path: root/obj.lua
diff options
context:
space:
mode:
authorthe lemons <citrons@mondecitronne.com>2023-04-24 15:20:36 -0500
committerthe lemons <citrons@mondecitronne.com>2023-04-24 15:20:36 -0500
commit425c5dae3521479a694528dff33d32989662dda7 (patch)
tree5623e58763c41bd6a3c2e86691295751e21326b3 /obj.lua
parent0d2f8775b11b604adc0f9adf73c8f6379e075ad5 (diff)
obj:avel_to_accel (broken)
Diffstat (limited to 'obj.lua')
-rw-r--r--obj.lua33
1 files changed, 33 insertions, 0 deletions
diff --git a/obj.lua b/obj.lua
index f93eae9..e8aa32e 100644
--- a/obj.lua
+++ b/obj.lua
@@ -202,6 +202,39 @@ function obj:energy()
return 1 + avel*avel + vx*vx + vy*vy
end
+function obj:observe_avel(o)
+ return o.data.avel - self.data.avel
+end
+
+function obj:observe_vel(o)
+ local vx, vy = unpack(self.data.vel)
+ local ovx, ovy = unpack(o.data.vel)
+ return ovx - vx, ovy - vy
+end
+
+function obj:observe_pos(o)
+ local px, py = unpack(self.data.pos)
+ local opx, opy = unpack(o.data.pos)
+ return opx - px, opy - py
+end
+
+function obj:avel_to_accel(o, ax, ay)
+ local ovx, ovy = self:observe_vel(o)
+ local nvx, nvy = ovx + ax, ovy + ay
+ local v = util.magnitude{ovx, ovy}
+ local nv = util.magnitude{nvx, nvy}
+ local ne = v*v - nv*nv
+ local avel = self:observe_avel(o)
+ local ave = avel*avel + ne
+ if ave < 0 then
+ return false
+ end
+ local vx, vy = unpack(self.data.vel)
+ o.data.avel = self.data.avel + (math.sqrt(ave) * (avel >= 0 and 1 or -1))
+ o.data.vel = {vx + nvx, vy + nvy}
+ return true
+end
+
function obj:in_hitbox(px, py)
local x, y = unpack(self.data.pos)
local dx, dy = x - px, y - py