Use eship_collider for ship collisions, too.

This commit is contained in:
2025-06-20 17:56:57 -07:00
parent ecddb56d72
commit d3351d9a05

View File

@ -238,14 +238,17 @@ function updategame()
lst:strip(call_move) lst:strip(call_move)
end end
-- eship collider will be used
-- both for pship and pbullets.
local eship_collider = collider.new{from=eships}
if not ps.dead then if not ps.dead then
ps:move() ps:move()
local pbox = hurtbox(ps) local pbox = hurtbox(ps)
eships:strip(function(es) for es in all(eship_collider:get_collisions(pbox)) do
if(not collides(pbox, hurtbox(es))) return
ps:hitship(es) ps:hitship(es)
return es:hitship(ps) if(es:hitship(ps)) eship_collider:yoink(es)
end) end
ebullets:strip(function(eb) ebullets:strip(function(eb)
-- loopify this when split moves implemented -- loopify this when split moves implemented
eb:move() eb:move()
@ -257,12 +260,8 @@ function updategame()
ebullets:strip(call_move) ebullets:strip(call_move)
end end
-- many bullets and many enemy ships;
-- use bucket collider for efficiency
local eship_collider = collider.new{from=eships}
pbullets:strip(function(pb) pbullets:strip(function(pb)
for es in all(eship_collider:get_collisions(pb)) do for es in all(eship_collider:get_collisions(hurtbox(pb))) do
if (es:hitbullet(pb)) eship_collider:yoink(es) if (es:hitbullet(pb)) eship_collider:yoink(es)
if (pb:hitship(es)) return true if (pb:hitship(es)) return true
end end
@ -1469,10 +1468,9 @@ function collider:yoink(item)
end end
end end
function collider:get_collisions(item) function collider:get_collisions(box)
local found = { } local found = { }
local seen = { } local seen = { }
local box = hurtbox(item)
local bucket_ids = collider_indexes(box) local bucket_ids = collider_indexes(box)
for b_idx in all(bucket_ids) do for b_idx in all(bucket_ids) do
local bucket = self[b_idx] local bucket = self[b_idx]