summaryrefslogtreecommitdiff
path: root/objects/Enemy.lua
diff options
context:
space:
mode:
authorEltrac <hi@guhub.cn>2025-02-22 11:04:38 +0800
committerEltrac <hi@guhub.cn>2025-02-22 11:04:38 +0800
commita3a4040662f6a562d59e2b25462c63aeab99b87f (patch)
tree97fed3382234a80a109f2c1895f7628ca14fc6af /objects/Enemy.lua
parent6b8a96f358de168aeb107c6cb42e595ba19cd01f (diff)
feat: enemy gets blocked by walls and obstacles
Diffstat (limited to 'objects/Enemy.lua')
-rw-r--r--objects/Enemy.lua32
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