diff --git a/lib/body.lua b/lib/body.lua index 83bccb6..006c2dc 100644 --- a/lib/body.lua +++ b/lib/body.lua @@ -696,7 +696,7 @@ function body:drawPolyShadow(light) for i = 1, #self.data, 2 do local vertex = vector(self.data[i], self.data[i + 1]) - local nextVertex = vector(self.data[(i + 2) % 8], self.data[(i + 2) % 8 + 1]) + local nextVertex = vector(self.data[(i + 2) % #self.data], self.data[(i + 2) % #self.data + 1]) local startToEnd = nextVertex - vertex if vector(startToEnd.y, -startToEnd.x) * (vertex - lightPosition) > 0 then local point1 = (lh - (vertex * light.z))/height_diff diff --git a/lib/init.lua b/lib/init.lua index c9a5610..84425f9 100644 --- a/lib/init.lua +++ b/lib/init.lua @@ -298,15 +298,23 @@ function light_world:newBody(type, ...) return self.bodies[#self.bodies] end +function light_world:is_body(target) + return target.type ~= nil +end + +function light_world:is_light(target) + return target.angle ~= nil +end + function light_world:remove(to_kill) - if to_kill:is_a(Body) then + if self:is_body(to_kill) then for i = 1, #self.bodies do if self.bodies[i] == to_kill then table.remove(self.bodies, i) return true end end - elseif to_kill:is_a(Light) then + elseif self:is_light(to_kill) then for i = 1, #self.lights do if self.lights[i] == to_kill then table.remove(self.lights, i)