From 0421bd4954a4459117702a6d6623586411f7ad3f Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Fri, 7 May 2021 19:07:18 +0200 Subject: [PATCH] improvement: put automove in physic mixin --- .../birb/modules/world/actors/actor2D.lua | 17 +++-------------- .../birb/modules/world/actors/actor3D.lua | 17 +++-------------- .../modules/world/actors/mixins/physics.lua | 16 +++++++++++++--- 3 files changed, 19 insertions(+), 31 deletions(-) diff --git a/sonic-radiance.love/birb/modules/world/actors/actor2D.lua b/sonic-radiance.love/birb/modules/world/actors/actor2D.lua index 185323d..9bbcdc4 100644 --- a/sonic-radiance.love/birb/modules/world/actors/actor2D.lua +++ b/sonic-radiance.love/birb/modules/world/actors/actor2D.lua @@ -57,21 +57,10 @@ end -- PHYSICS FUNCTIONS -- Handle movement and collisions. -function Actor2D:autoMove(dt) - self:updateHitboxes() - self.onGround = false - self:applyGravity(dt) - +function Actor2D:moveToFuturePosition(dt) local dx, dy = self:getFuturePosition(dt) - local newx, newy, cols, colNumber = self:move(dx, dy) - - -- apply after the movement the friction, until the player stop - -- note: the friction is applied according to the delta time, - -- thus the friction should be how much speed is substracted in 1 second - - self:solveAllCollisions(cols) - - self:applyFriction(dt) + local _, _, cols, colNumber = self:move(dx, dy) + return cols, colNumber end function Actor2D:changeSpeedToCollisionNormal(normal) diff --git a/sonic-radiance.love/birb/modules/world/actors/actor3D.lua b/sonic-radiance.love/birb/modules/world/actors/actor3D.lua index 1c0d527..d1e93d2 100644 --- a/sonic-radiance.love/birb/modules/world/actors/actor3D.lua +++ b/sonic-radiance.love/birb/modules/world/actors/actor3D.lua @@ -67,21 +67,10 @@ end -- PHYSICS FUNCTIONS -- Handle movement and collisions. -function Actor3D:autoMove(dt) - self:updateHitboxes() - self.onGround = false - self:applyGravity(dt) - +function Actor3D:moveToFuturePosition(dt) local dx, dy, dz = self:getFuturePosition(dt) - local newx, newy, newz, cols, colNumber = self:move(dx, dy, dz) - - -- apply after the movement the friction, until the player stop - -- note: the friction is applied according to the delta time, - -- thus the friction should be how much speed is substracted in 1 second - - self:solveAllCollisions(cols) - - self:applyFriction(dt) + local _, _, _, cols, colNumber = self:move(dx, dy, dz) + return cols, colNumber end function Actor3D:changeSpeedToCollisionNormal(normal) diff --git a/sonic-radiance.love/birb/modules/world/actors/mixins/physics.lua b/sonic-radiance.love/birb/modules/world/actors/mixins/physics.lua index eb898cc..2b221c9 100644 --- a/sonic-radiance.love/birb/modules/world/actors/mixins/physics.lua +++ b/sonic-radiance.love/birb/modules/world/actors/mixins/physics.lua @@ -127,9 +127,19 @@ function PhysicalActor:checkGround() end function PhysicalActor:autoMove(dt) - -- The base actor don't have coordinate - -- so the autoMove is only usefull to its - -- 2D and 3D childrens + self:updateHitboxes() + self.onGround = false + self:applyGravity(dt) + + local cols, colNumber = self:moveToFuturePosition(dt) + + -- apply after the movement the friction, until the player stop + -- note: the friction is applied according to the delta time, + -- thus the friction should be how much speed is substracted in 1 second + + self:solveAllCollisions(cols) + + self:applyFriction(dt) end -- HITBOX FUNCTIONS