From 4b66d150145aad3ffa9c2c22a04630de905ce1be Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Fri, 27 Nov 2020 16:03:07 +0100 Subject: [PATCH] chore: port actors to rect and box --- birb/modules/world/actors/actor2D.lua | 11 ++++----- birb/modules/world/actors/actor3D.lua | 12 +++++---- birb/modules/world/actors/mixins/physics.lua | 26 ++++++-------------- 3 files changed, 19 insertions(+), 30 deletions(-) diff --git a/birb/modules/world/actors/actor2D.lua b/birb/modules/world/actors/actor2D.lua index 446b912..393edc9 100644 --- a/birb/modules/world/actors/actor2D.lua +++ b/birb/modules/world/actors/actor2D.lua @@ -22,13 +22,15 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ]] +local Rect = require "birb.objects.2D.rect" + local BaseActor = require("birb.modules.world.actors.mixins.base") local SpritedActor = require("birb.modules.world.actors.mixins.sprites") local TimedActor = require("birb.modules.world.actors.mixins.timers") local InputActor = require("birb.modules.world.actors.mixins.inputs") local PhysicalActor = require("birb.modules.world.actors.mixins.physics") -local Actor2D = Object:extend() +local Actor2D = Rect:extend() Actor2D:implement(BaseActor) Actor2D:implement(SpritedActor) Actor2D:implement(TimedActor) @@ -41,8 +43,9 @@ local Hitbox = require("birb.modules.world.actors.utils.hitbox2D") -- Initialise the actor and its base functions function Actor2D:new(world, type, x, y, w, h, isSolid) + Actor2D.super.new(self, x, y, w, h) self:init(world, type) - self:initPhysics(Hitbox, x, y, 0, w, h, 0, isSolid) + self:initPhysics(Hitbox, isSolid) self:initTimers() self:initSprite() self:initKeys() @@ -134,10 +137,6 @@ end -- DRAW FUNCTIONS -- Draw the actors. -function Actor2D:getShape() - return (self.x), (self.y), self.w, (self.h) -end - function Actor2D:draw() self:drawStart() local x, y = math.floor(self.x), math.floor(self.y) diff --git a/birb/modules/world/actors/actor3D.lua b/birb/modules/world/actors/actor3D.lua index a101ee9..7a479bd 100644 --- a/birb/modules/world/actors/actor3D.lua +++ b/birb/modules/world/actors/actor3D.lua @@ -22,7 +22,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ]] -local cwd = (...):gsub('%.actor3D$', '') .. "." +local BasicBox = require "birb.objects.3D.box" + local BaseActor = require("birb.modules.world.actors.mixins.base") local SpritedActor = require("birb.modules.world.actors.mixins.sprites") local TimedActor = require("birb.modules.world.actors.mixins.timers") @@ -30,7 +31,7 @@ local InputActor = require("birb.modules.world.actors.mixins.inputs") local PhysicalActor = require("birb.modules.world.actors.mixins.physics") local Shape3DActor = require("birb.modules.world.actors.mixins.shapes") -local Actor3D = Object:extend() +local Actor3D = BasicBox:extend() Actor3D:implement(BaseActor) Actor3D:implement(SpritedActor) Actor3D:implement(TimedActor) @@ -38,15 +39,16 @@ Actor3D:implement(InputActor) Actor3D:implement(PhysicalActor) Actor3D:implement(Shape3DActor) -local Hitbox = require(cwd .. "utils.hitbox3D") -local Boxes = require(cwd .. "utils.boxes") +local Hitbox = require("birb.modules.world.actors.utils.hitbox3D") +local Boxes = require("birb.modules.world.actors.utils.boxes") -- INIT FUNCTIONS -- Initialise the actor and its base functions function Actor3D:new(world, type, x, y, z, w, h, d, isSolid) + Actor3D.super.new(self, x, y, z, w, h, d) self:init(world, type) - self:initPhysics(Hitbox, x, y, z, w, h, d, isSolid) + self:initPhysics(Hitbox, isSolid) self:initTimers() self:initSprite() self:initShape(Boxes, true) diff --git a/birb/modules/world/actors/mixins/physics.lua b/birb/modules/world/actors/mixins/physics.lua index 4bc2fad..d6c5e2b 100644 --- a/birb/modules/world/actors/mixins/physics.lua +++ b/birb/modules/world/actors/mixins/physics.lua @@ -3,15 +3,9 @@ PhysicalActor = Object:extend() -- PHYSICS FUNCTIONS -- Raw implementation of everything common in physics -function PhysicalActor:initPhysics(hitboxObj, x, y, z, w, h, d, isSolid) - self:setCoordinate(x, y, z) - +function PhysicalActor:initPhysics(hitboxObj, isSolid) self.isSolid = isSolid or false - self.w = w or 0 - self.h = h or 0 - self.d = d or 0 - self.xsp = 0 self.ysp = 0 self.zsp = 0 @@ -29,12 +23,6 @@ function PhysicalActor:initPhysics(hitboxObj, x, y, z, w, h, d, isSolid) self:addUpdateFunction(self.autoMove) end -function PhysicalActor:setCoordinate(x, y, z, w, h, d) - self.x = x or self.x - self.y = y or self.y - self.z = z or self.z -end - function PhysicalActor:setBounceFactor(newBounceFactor) self.bounceFactor = newBounceFactor or 0 end @@ -57,7 +45,9 @@ function PhysicalActor:getFuturePosition(dt) local dx, dy, dz dx = self.x + self.xsp * dt dy = self.y + self.ysp * dt - dz = self.z + self.zsp * dt + if (self.z ~= nil) then + dz = self.z + self.zsp * dt + end return dx, dy, dz end @@ -65,7 +55,9 @@ end function PhysicalActor:applyFriction(dt) self.xsp = utils.math.toZero(self.xsp, self.xfrc * dt) self.ysp = utils.math.toZero(self.ysp, self.yfrc * dt) - self.zsp = utils.math.toZero(self.zsp, self.zfrc * dt) + if (self.z ~= nil) then + self.zsp = utils.math.toZero(self.zsp, self.zfrc * dt) + end end function PhysicalActor:solveAllCollisions(cols) @@ -89,10 +81,6 @@ end -- Handle coordinate -- Will be replaced by functions inside Actors or Rects/Point -function PhysicalActor:getCenter() - return (self.x + (self.w / 2)), (self.y + (self.h / 2)), (self.z + (self.d / 2)) -end - function PhysicalActor:getViewCenter() return self:getCenter() end