summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthe lemons <citrons@mondecitronne.com>2022-12-21 20:11:05 -0600
committerthe lemons <citrons@mondecitronne.com>2022-12-21 20:11:05 -0600
commit93037f358c167425e9e4f071c72f4e07aa5f2fad (patch)
tree0b0e478cc2a52ce4fee2edcaf37953026e837cc2
parent7e2bfd0c143f6f11063c9d0b39602599c14c44b0 (diff)
transfer of angular velocity
-rw-r--r--obj.lua18
1 files changed, 10 insertions, 8 deletions
diff --git a/obj.lua b/obj.lua
index 1b0bb0f..c5681dc 100644
--- a/obj.lua
+++ b/obj.lua
@@ -51,18 +51,17 @@ function obj:init(...)
self.chunk = world.chunk(unpack(self.data.pos))
self.chunk.objects[self.id] = self
world.objects[self.id] = self
+ self.data.vel = self.data.vel or {0, 0}
+ self.data.avel = self.data.avel or 0
return self:overload("init", ...)
end
function obj:tick(...)
- if self.data.vel then
- local vx, vy = unpack(self.data.vel)
- self.data.pos[1] = self.data.pos[1] + vx
- self.data.pos[2] = self.data.pos[2] + vy
- end
- if self.data.avel then
- self.data.angle = (self.data.angle or 0) + self.data.avel / pi
- end
+ local vx, vy = unpack(self.data.vel)
+ self.data.pos[1] = self.data.pos[1] + vx
+ self.data.pos[2] = self.data.pos[2] + vy
+
+ self.data.angle = (self.data.angle or 0) + self.data.avel / pi
if self.hitbox then
local x, y = unpack(self.data.pos)
@@ -112,6 +111,7 @@ end
function obj:collision(collided, angle)
self.force = {collided.data.vel[1] * math.cos(angle),
collided.data.vel[2] * math.sin(angle)}
+ self.torque = -collided.data.avel
return self:overload("collision", collided, angle, self.force)
end
@@ -120,6 +120,8 @@ function obj:collision_exit(collided, angle)
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]
+ self.data.avel = self.data.avel + self.torque
+ collided.data.avel = collided.data.avel + self.torque
return self:overload("collision_exit", collided, angle, self.force)
end