lovexp/asteroids/phys.lua
Donald Ball f5df911707 fix atan issue
the love2d that I'm using doesn't have the new atan arity lol
2025-11-17 20:21:42 -05:00

39 lines
1.1 KiB
Lua

local inspect = require('inspect')
local phys = {
tau = 2 * math.pi
}
-- returns true if the two actors intersect
function phys.intersects(actor1, actor2)
return (actor1.x - actor2.x) ^ 2 + (actor1.y - actor2.y) ^ 2 <= (actor1.radius + actor2.radius) ^ 2
end
-- updates the actor's location by applying the passage of time
-- TODO spin
function phys.update(actor, dt)
assert(actor.speed >= 0)
local dv = actor.speed * dt
actor.x = actor.x + math.cos(actor.angle) * dv
actor.y = actor.y + math.sin(actor.angle) * dv
end
function phys.rotate(actor, angle)
actor.facing = (actor.facing + angle) % phys.tau
end
function phys.apply(actor, force)
local ax = math.cos(actor.angle) * actor.speed
local ay = math.sin(actor.angle) * actor.speed
local fx = math.cos(force.angle) * force.speed
local fy = math.sin(force.angle) * force.speed
local x = ax + fx
local y = ay + fy
local speed = math.sqrt(x ^ 2 + y ^ 2)
local angle = math.atan2(y, x) % phys.tau
actor.speed = speed
actor.angle = angle
end
return phys