From a3a4040662f6a562d59e2b25462c63aeab99b87f Mon Sep 17 00:00:00 2001 From: Eltrac Date: Sat, 22 Feb 2025 11:04:38 +0800 Subject: feat: enemy gets blocked by walls and obstacles --- objects/Enemy.lua | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'objects/Enemy.lua') diff --git a/objects/Enemy.lua b/objects/Enemy.lua index 05990f1..b61e3b5 100644 --- a/objects/Enemy.lua +++ b/objects/Enemy.lua @@ -16,16 +16,30 @@ function Enemy:new(name, location) return obj end +function Enemy:isBlocked() + +end + function Enemy:moveTowardPlayer(dt) - if self.x < G.player.x then - self.x = self.x + self.speed*dt - elseif self.x > G.player.x then - self.x = self.x - self.speed*dt - end + local dv = self.speed * dt + local dx, dy = 0, 0 - if self.y < G.player.y then - self.y = self.y + self.speed*dt - elseif self.y > G.player.y then - self.y = self.y - self.speed*dt + local function getDirection(axis, playerPos, direction, blockAxis) + if self[axis] < playerPos then + if not utils.isBlocked(self.body, self.x, self.y, direction, blockAxis, dv) then + return 1 + end + elseif self[axis] > playerPos then + if not utils.isBlocked(self.body, self.x, self.y, direction, blockAxis, dv) then + return -1 + end + end + return 0 end + + dx = getDirection("x", G.player.x, Direction.RIGHT, "x") + dy = getDirection("y", G.player.y, Direction.DOWN, "y") + + self.x = self.x + dx * dv + self.y = self.y + dy * dv end -- cgit v1.2.3