From e9754dc1ddf7e7854a0fb317ca89ec85fc3e910b Mon Sep 17 00:00:00 2001 From: binarycat Date: Sat, 26 Feb 2022 15:12:25 -0500 Subject: [PATCH] walljumps --- code/debug.lua | 1 + code/entities/player.lua | 12 ++++++++++++ code/entity.lua | 3 ++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/code/debug.lua b/code/debug.lua index 5a9e094..68c61cf 100644 --- a/code/debug.lua +++ b/code/debug.lua @@ -22,6 +22,7 @@ function DebugUI() end end -- player isOnGroundCheck + --love.graphics.main_Player love.graphics.setColor(1,0,0) end diff --git a/code/entities/player.lua b/code/entities/player.lua index ea2d811..824cc25 100644 --- a/code/entities/player.lua +++ b/code/entities/player.lua @@ -14,6 +14,8 @@ function Player:New(x,y) o.jumpImpulse = 3.5 -- gameworld pixels + self.wallJumpImpulse = { x = 2.5, y = 3.5 } + o.coyoteAmount = 5 -- int o.coyoteValue = 5 -- frames @@ -46,6 +48,7 @@ function Player:New(x,y) o.canFall = true o.canFriction = true o.maskType = animation.moth_mask + o.wallHit = 0 o.anchorRespawn = { x = o.pos.x, @@ -93,6 +96,9 @@ function Player:Smart() if self.coyoteValue > 0 then self.vel.y = -self.jumpImpulse self.coyoteValue = 0 + elseif self.wallHit ~= 0 then + self.vel.y = -self.wallJumpImpulse.y + self.vel.x = -self.wallJumpImpulse.x * self.wallHit end end end @@ -233,7 +239,9 @@ function Player:DoPhysics() -- horizontal collision if not self:isCollidingAt(self.pos.x + self.vel.x + self.move_x, self.pos.y, LoadedObjects.Collisions) then self.pos.x = self.pos.x + self.vel.x + self.move_x + self.wallHit = 0 else + self.wallHit = math.sign(self.vel.x + self.move_x) self.vel.x = 0 end @@ -313,3 +321,7 @@ function Player:Unhook() self.isHooked = false self.hookAnchor = nil end + +function Player:Debug() + love.graphics.print("wallHit: "..self.wallHit) +end diff --git a/code/entity.lua b/code/entity.lua index 9bb582f..b43df21 100644 --- a/code/entity.lua +++ b/code/entity.lua @@ -158,7 +158,8 @@ function Entity:getBoundingBox(animation,top,left,bottom,right) self.boxCollision.to.y = animation.imgs[1]:getHeight()/2 + bottom end --- returns true if theres a collision at that point. also marks collisioned tile as collision true +-- checks if the the reciever would collide with an object if it was positioned at the given point. +-- also marks collisioned tile as collision true function Entity:isCollidingAt(x,y,object) for _, collision in pairs(object) do if collision.disable then