summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthe lemons <citrons@mondecitronne.com>2022-12-21 19:14:31 -0600
committerthe lemons <citrons@mondecitronne.com>2022-12-21 19:14:31 -0600
commit7e2bfd0c143f6f11063c9d0b39602599c14c44b0 (patch)
tree6d498377ff9cd98141f412866711dc651fd7c926
parenta06622361d858c4d9c78c15323fc0d0e17e94110 (diff)
elasticity
-rw-r--r--obj.lua20
1 files changed, 16 insertions, 4 deletions
diff --git a/obj.lua b/obj.lua
index 59a68d5..1b0bb0f 100644
--- a/obj.lua
+++ b/obj.lua
@@ -75,13 +75,15 @@ function obj:tick(...)
local dx, dy = ox - x, oy - y
if dx*dx + dy*dy < dist*dist then
local angle = math.atan2(dy, dx)
+ self:collision(o, angle)
+ o:collision(self, pi - angle)
-- reposition self outside of collided object
self.data.pos[1] =
self.data.pos[1] - math.cos(angle) * dist + dx
self.data.pos[2] =
self.data.pos[2] - math.sin(angle) * dist + dy
- self:collision(o, angle)
- o:collision(self, pi - angle)
+ self:collision_exit(o, angle)
+ o:collision_exit(self, pi - angle)
end
end
end
@@ -107,8 +109,18 @@ function obj:draw(...)
love.graphics.pop()
end
-function obj:collision(collided)
- return self:overload("collision", collided)
+function obj:collision(collided, angle)
+ self.force = {collided.data.vel[1] * math.cos(angle),
+ collided.data.vel[2] * math.sin(angle)}
+ return self:overload("collision", collided, angle, self.force)
+end
+
+function obj:collision_exit(collided, angle)
+ self.data.vel[1] = self.data.vel[1] + self.force[1]
+ self.data.vel[2] = self.data.vel[2] + self.force[2]
+ collided.data.vel[1] = collided.data.vel[1] - self.force[1]
+ collided.data.vel[2] = collided.data.vel[2] - self.force[2]
+ return self:overload("collision_exit", collided, angle, self.force)
end
function obj:remove()