So recently I wanted to impletment a pathfinding system from scratch but I can't get it to work -.It uses the a star pathfinding algorithm. the pivot is stuck in one place.- It seems like the pivot got blocked by evaluated points squares - i give up ,
- im also a beginner so im bad ,heres the code:
-results : https://imgur.com/a/PdlypjY
can someone please help
function searchPath(start,goal,moveSpan,filteredParts)
local function getDistance(x1,y1,x2,y2) -- refer y to z (CF)
return math.sqrt ( math.pow ( x2 - x1, 2 ) + math.pow ( y2 - y1, 2 ) )
end
local skip = 0
local open = {}
local closed = {}
local fcost = {}
local gcost = {}
local paths = {}
local path = Instance.new("Part",script)
path.Name = "path"
path.CFrame = start
path.Size = Vector3.new(moveSpan,moveSpan,moveSpan)
path.Anchored = true
path.BrickColor = BrickColor.new(37)
local endingGoal = Instance.new("Part",script)
endingGoal.Name = "goal"
endingGoal.CFrame = goal
endingGoal.BrickColor = BrickColor.new(21)
endingGoal.Size = Vector3.new(moveSpan,moveSpan,moveSpan)
endingGoal.Transparency = 0.4
endingGoal.Anchored = true
for i = 1,1 do
table.insert(open,path.CFrame)
local widedede = getDistance(path.CFrame.X,path.CFrame.Z,goal.X,goal.Z)
table.insert(fcost,widedede)
table.insert(gcost,0)
end
local currentNode = path.CFrame
repeat
wait()
local prev = path.CFrame
print(#open," ",#closed)
if skip ~= 1 then
local ensure = 0
local auxList = fcost
table.sort(auxList, function(a, b) return a < b end)
local currentNode = auxList[1]
for i,v in pairs(fcost) do
if fcost[i] == currentNode then
table.insert(closed,open[i])
ensure = open[i]
table.remove(open,i)
table.remove(fcost,i)
table.remove(gcost,i)
end
end
currentNode = ensure
path.CFrame = currentNode
end
path.CFrame = currentNode
if currentNode == goal then
print("Goal reached [2] - ",path.CFrame)
break
end
print("bruh")
local currentCHg = getDistance(currentNode.X,currentNode.Z,start.X,start.Z)
skip = 0
local function getChildsOFobj(objPATH,fromCF,times,mSpan,from)
--objPATH.Name = "yessir"
--objPATH.Size = Vector3.new(moveSpan,moveSpan,moveSpan)
--objPATH.Anchored = true
local dir = 0
objPATH.CFrame = fromCF
for i=1,times do
wait()
dir += 1
print(dir)
if dir == 1 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(mSpan,0,0)
elseif dir == 2 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(0,0,mSpan)
elseif dir == 3 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(-mSpan,0,0)
elseif dir == 4 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(0,0,-mSpan)
elseif dir == 5 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(-mSpan,0,0)
objPATH.CFrame = objPATH.CFrame * CFrame.new(0,0,-mSpan)
elseif dir == 6 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(-mSpan,0,0)
objPATH.CFrame = objPATH.CFrame * CFrame.new(0,0,mSpan)
elseif dir == 7 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(mSpan,0,0)
objPATH.CFrame = objPATH.CFrame * CFrame.new(0,0,-mSpan)
elseif dir == 8 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(mSpan,0,0)
objPATH.CFrame = objPATH.CFrame * CFrame.new(0,0,mSpan)
end
print(open,"|",closed)
local allowLoop = 0
local sus = objPATH:Clone()
sus.Parent = script
sus.Transparency = 0.4
sus.BrickColor = BrickColor.new(6)
sus.Name = "TRACER"
allowLoop = 0
for i,v in pairs(closed) do
if closed[i] == objPATH.CFrame then
allowLoop = 2
end
end
local curTemp = getDistance(objPATH.CFrame.X,objPATH.CFrame.Z,currentNode.X,currentNode.Z)
local currentGch = currentCHg + moveSpan
local temp = getDistance(objPATH.CFrame.X,objPATH.CFrame.Z,goal.X,goal.Z)
local currentFch = currentGch + temp
if allowLoop ~= 1 then
for i,v in pairs(open) do
wait()
if open[i] == objPATH.CFrame then
print(open[i])
local auxiList = gcost
table.sort(auxiList, function(a, b) return a < b end)
local min = auxiList[1]
if currentGch > min or currentGch >= min then
fromCF = prev
allowLoop = 1
end
end
if allowLoop == 0 then
table.insert(open,objPATH.CFrame)
table.insert(gcost,currentGch)
table.insert(fcost,currentFch)
end
end
wait()
print("bruh")
if dir == 1 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(-mSpan,0,0)
elseif dir == 2 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(0,0,-mSpan)
elseif dir == 3 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(mSpan,0,0)
elseif dir == 4 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(0,0,mSpan)
elseif dir == 5 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(mSpan,0,0)
objPATH.CFrame = objPATH.CFrame * CFrame.new(0,0,mSpan)
elseif dir == 6 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(mSpan,0,0)
objPATH.CFrame = objPATH.CFrame * CFrame.new(0,0,-mSpan)
elseif dir == 7 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(-mSpan,0,0)
objPATH.CFrame = objPATH.CFrame * CFrame.new(0,0,mSpan)
elseif dir == 8 then
objPATH.CFrame = objPATH.CFrame * CFrame.new(-mSpan,0,0)
objPATH.CFrame = objPATH.CFrame * CFrame.new(0,0,-mSpan)
end
end
end
objPATH.CFrame = fromCF
end
getChildsOFobj(path,currentNode,4,moveSpan,currentNode)
until #open < 1
print("DONE [4]")
print(path.Position)
if path.CFrame ~= goal then
warn("Failed in finding path")
print(path.Position)
elseif path.CFrame == goal then
print("Sucess in finding path")
print(path.Position)
end
return paths
end
wait(3)
local paths = searchPath(CFrame.new(0,0,0),CFrame.new(15,0,1),1)

2 comments
No, i meant like a custom one aside from roblox's algorithm. Cause i want to make a custom one for my 2D gui based game on roblox
Oh, well sorry, Im not good at GUI, sorry If this doesn't work