if not isPathBlocked(enemy, normalizedDirX, normalizedDirY) then.
enemy:setPosition(ex + normalizedDirX * enemy.speed * dt, ey + normalizedDirY * enemy.speed * dt)
else.
-- Engel algılandığında farklı yönler dene.
local directions = {
{0, 1}, -- Aşağı.
{0, -1}, -- Yukarı.
{1, 0}, -- Sağ.
{-1, 0}, -- Sol.
{math.cos(math.pi / 4), math.sin(math.pi / 4)}, -- 45 derece.
{math.cos(-math.pi / 4), math.sin(-math.pi / 4)}, -- -45 derece.
{math.cos(math.pi / 2), math.sin(math.pi / 2)}, -- 90 derece.
{math.cos(-math.pi / 2), math.sin(-math.pi / 2)} -- -90 derece.
}
-- Engelden uzaklaşma ve en iyi yönü bulma.
local moved = false.
for i, dir in ipairs(directions) do.
local testDirX, testDirY = dir[1], dir[2]
if not isPathBlocked(enemy, testDirX, testDirY) then.
enemy:setPosition(ex + testDirX * enemy.speed * dt, ey + testDirY * enemy.speed * dt)
moved = true.
break.
end.
end.
end.
function isPathBlocked(enemy, dirX, dirY)
local ex, ey = enemy:getPosition()
local futureX = ex + dirX * 5 -- Birkaç piksel ileri bak (5 px)
local futureY = ey + dirY * 5
local colliders = world:queryRectangleArea(futureX - 20, futureY - 40, 40, 80, {'Platform'}) -- Engelleri kontrol et.
return #colliders > 0 -- Eğer engel varsa true döner.
end