diff --git a/birb/modules/world/actors/actor2D.lua b/birb/modules/world/actors/actor2D.lua index a3830db..c3638f8 100644 --- a/birb/modules/world/actors/actor2D.lua +++ b/birb/modules/world/actors/actor2D.lua @@ -96,16 +96,16 @@ end function Actor2D:move(dx, dy) local cols, colNumber = {}, 0 if (self.isDestroyed == false) then - self.x, self.y, cols, colNumber = self.mainHitbox:checkCollision(dx, dy, self.filter) + self.x, self.y, cols, colNumber = self.mainHitbox:checkCollisionAtPoint(dx, dy, self.filter) self.mainHitbox:updatePosition() end return self.x, self.y, cols, colNumber end -function Actor2D:checkCollision(dx, dy) +function Actor2D:checkCollisionAtPoint(dx, dy) local x, y, cols, colNumber = dx, dy, {}, 0 if (self.isDestroyed == false) then - x, y, cols, colNumber = self.mainHitbox:checkCollision(dx, dy, self.filter) + x, y, cols, colNumber = self.mainHitbox:checkCollisionAtPoint(dx, dy, self.filter) end return self.x, self.y, cols, colNumber end @@ -123,7 +123,7 @@ end function Actor2D:checkGround() local dx, dy = self.x, self.y + utils.math.sign(self.grav) - local newx, newy, cols, colNumber = self:checkCollision(dx, dy) + local newx, newy, cols, colNumber = self:checkCollisionAtPoint(dx, dy) for i, col in ipairs(cols) do if (col.type == "touch") or (col.type == "bounce") or (col.type == "slide") then @@ -145,15 +145,15 @@ end -- HITBOXES FUNCTIONS -- Functions related to actor hitboxes -function Actor2D:checkHitboxCollisions(name, filter) - self:checkHitboxCollisionsAtPoint(name, self.x, self.y, filter) +function Actor2D:applyHitboxCollisions(name, filter) + self:applyHitboxCollisionsAtPoint(name, self.x, self.y, filter) end -function Actor2D:checkHitboxCollisionsAtPoint(name, dx, dy, filter) +function Actor2D:applyHitboxCollisionsAtPoint(name, dx, dy, filter) local x, y, cols, colNumber = dx, dy, {}, 0 local filter = filter or self.filter if (self.isDestroyed == false) and (self.hitboxes[name] ~= nil) then - x, y, cols, colNumber = self.hitboxes[name]:checkCollision(dx, dy, filter) + x, y, cols, colNumber = self.hitboxes[name]:checkCollisionAtPoint(dx, dy, filter) local type = self.hitboxes[name].type for i, col in ipairs(cols) do @@ -161,7 +161,7 @@ function Actor2D:checkHitboxCollisionsAtPoint(name, dx, dy, filter) end end - return x, y, cols, colNumber + return cols, colNumber end -- DRAW FUNCTIONS diff --git a/birb/modules/world/actors/actor3D.lua b/birb/modules/world/actors/actor3D.lua index 1b3a595..75e47e6 100644 --- a/birb/modules/world/actors/actor3D.lua +++ b/birb/modules/world/actors/actor3D.lua @@ -111,7 +111,7 @@ function Actor3D:move(dx, dy, dz) local cols, colNumber = {}, 0 local oldx, oldy, oldz = self.x, self.y, self.z if (self.isDestroyed == false) then - self.x, self.y, self.z, cols, colNumber = self.mainHitbox:checkCollision(dx, dy, dz, self.filter) + self.x, self.y, self.z, cols, colNumber = self.mainHitbox:checkCollisionAtPoint(dx, dy, dz, self.filter) self.mainHitbox:updatePosition() self.world:updateShape(self) end @@ -125,10 +125,10 @@ function Actor3D:move(dx, dy, dz) return self.x, self.y, self.z, cols, colNumber end -function Actor3D:checkCollision(dx, dy, dz) +function Actor3D:checkCollisionAtPoint(dx, dy, dz) local x, y, z, cols, colNumber = dx, dy, dz, {}, 0 if (self.isDestroyed == false) then - x, y, z, cols, colNumber = self.mainHitbox:checkCollision(dx, dy, dz, self.filter) + x, y, z, cols, colNumber = self.mainHitbox:checkCollisionAtPoint(dx, dy, dz, self.filter) end return self.x, self.y, self.z, cols, colNumber end @@ -147,7 +147,7 @@ end function Actor3D:checkGround() local dx, dy, dz = self.x, self.y, self.z - utils.math.sign(self.grav) - local newx, newy, newz, cols, colNumber = self:checkCollision(dx, dy, dz) + local newx, newy, newz, cols, colNumber = self:checkCollisionAtPoint(dx, dy, dz) for i, col in ipairs(cols) do if (col.type == "touch") or (col.type == "bounce") or (col.type == "slide") then if not (self.grav == 0) then @@ -168,15 +168,15 @@ end -- HITBOXES FUNCTIONS -- Functions related to actor hitboxes -function Actor3D:checkHitboxCollisions(name, filter) - self:checkHitboxCollisionsAtPoint(name, self.x, self.y, self.z, filter) +function Actor3D:applyHitboxCollisions(name, filter) + return self:applyHitboxCollisionsAtPoint(name, self.x, self.y, self.z, filter) end -function Actor3D:checkHitboxCollisionsAtPoint(name, dx, dy, dz, filter) +function Actor3D:applyHitboxCollisionsAtPoint(name, dx, dy, dz, filter) local x, y, z, cols, colNumber = dx, dy, dz, {}, 0 local filter = filter or self.filter if (self.isDestroyed == false) and (self.hitboxes[name] ~= nil) then - x, y, z, cols, colNumber = self.hitboxes[name]:checkCollision(dx, dy, dz, filter) + x, y, z, cols, colNumber = self.hitboxes[name]:checkCollisionAtPoint(dx, dy, dz, filter) local type = self.hitboxes[name].type for i, col in ipairs(cols) do @@ -184,7 +184,7 @@ function Actor3D:checkHitboxCollisionsAtPoint(name, dx, dy, dz, filter) end end - return x, y, z, cols, colNumber + return cols, colNumber end -- SHADOW FUNCTIONS diff --git a/birb/modules/world/actors/mixins/physics.lua b/birb/modules/world/actors/mixins/physics.lua index 02c62c1..93a0c6b 100644 --- a/birb/modules/world/actors/mixins/physics.lua +++ b/birb/modules/world/actors/mixins/physics.lua @@ -226,7 +226,7 @@ end function PhysicalActor:checkHitboxesCollisions(filter) for k, v in pairs(self.hitboxes) do - self:checkHitboxCollisions(k, filter) + self:applyHitboxCollisions(k, filter) end end diff --git a/birb/modules/world/actors/utils/hitbox2D.lua b/birb/modules/world/actors/utils/hitbox2D.lua index 3b7625e..32d3e29 100644 --- a/birb/modules/world/actors/utils/hitbox2D.lua +++ b/birb/modules/world/actors/utils/hitbox2D.lua @@ -115,7 +115,11 @@ end -- COLLISION FUNCTIONS -- Handle Hitbox position -function Hitbox2D:checkCollision(dx, dy, filter) +function Hitbox2D:checkCollision(filter) + return self:checkCollisionAtPoint(self.owner.x, self.owner.y, filter) +end + +function Hitbox2D:checkCollisionAtPoint(dx, dy, filter) self:updatePosition() local dx, dy = self.ox + dx, self.oy + dy diff --git a/birb/modules/world/actors/utils/hitbox3D.lua b/birb/modules/world/actors/utils/hitbox3D.lua index 77a0ab8..c8d76b3 100644 --- a/birb/modules/world/actors/utils/hitbox3D.lua +++ b/birb/modules/world/actors/utils/hitbox3D.lua @@ -118,7 +118,11 @@ end -- COLLISION FUNCTIONS -- Handle Hitbox position -function Hitbox3D:checkCollision(dx, dy, dz, filter) +function Hitbox3D:checkCollision(filter) + return self:checkCollisionAtPoint(self.owner.x, self.owner.y, self.owner.z, filter) +end + +function Hitbox3D:checkCollisionAtPoint(dx, dy, dz, filter) self:updatePosition() local dx, dy = self.ox + dx, self.oy + dy, self.oz + dz