diff options
| author | Eltrac <hi@guhub.cn> | 2025-02-22 11:04:38 +0800 |
|---|---|---|
| committer | Eltrac <hi@guhub.cn> | 2025-02-22 11:04:38 +0800 |
| commit | a3a4040662f6a562d59e2b25462c63aeab99b87f (patch) | |
| tree | 97fed3382234a80a109f2c1895f7628ca14fc6af /objects/Enemy.lua | |
| parent | 6b8a96f358de168aeb107c6cb42e595ba19cd01f (diff) | |
feat: enemy gets blocked by walls and obstacles
Diffstat (limited to 'objects/Enemy.lua')
| -rw-r--r-- | objects/Enemy.lua | 32 |
1 files changed, 23 insertions, 9 deletions
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 |
