local c={spacing=8;image="\114\098\120\097\115\115\101\116\058\047\047\116\101\120\116\117\114\101\115\047\067\117\114\115\111\114\115\047\071\097\109\101\112\097\100\047\080\111\105\110\116\101\114\046\112\110\103",imageSize=Vector2.new(2,2)}local r=Instance.new("\077\111\100\101\108")r.Name="\080\097\116\104\068\105\115\112\108\097\121\080\111\105\110\116\115"local p=Instance.new("\080\097\114\116")p.Anchored=true p.CanCollide=false p.Transparency=1 p.Name="\080\097\116\104\068\105\115\112\108\097\121\065\100\111\114\110\101\101"p.CFrame=CFrame.new(0,0,0)p.Parent=r local n={}for r=1,30,1 do local x=Instance.new("\073\109\097\103\101\072\097\110\100\108\101\065\100\111\114\110\109\101\110\116")x.Archivable=false x.Adornee=p x.Image=c.image x.Size=c.imageSize n[r]=x end local x=30 local A={}function c.setCurrentPoints(c)if typeof(c)=="\116\097\098\108\101"then A=c return end A={}end local d={}function c.clearRenderedPath()local c,p,A=ipairs(d)while true do c(p,A)if not c then break end A=c p.Parent=nil x=x+1 n[x]=p end d={}r.Parent=nil end local function y(c,p)if x==0 then return nil end local A,d,y=workspace:FindPartOnRayWithIgnoreList(Ray.new(c+Vector3.new(0,2,0),Vector3.new(0,-8,0)),{game.Players.LocalPlayer.Character;workspace.CurrentCamera})if not A then return nil end local z=n[1]if not z then local c=nil else n[1]=n[x]n[x]=nil x=x-1 v14=z end v14.CFrame=CFrame.new(d,d+y)v14.Parent=r return v14 end function c.renderPath()c.clearRenderedPath()if not A or#A==0 then return end local p=#A local n=0 d[1]=y(A[p],true)if not d[1]then return end while true do local r=A[p]if p<2 then break end local x=A[p-1]-r local z=x.magnitude if z<n then n=n-z p=p-1 else local p=y(r+x.unit*n,false)if p then d[#d+1]=p end n=n+c.spacing end end r.Parent=workspace.CurrentCamera end return c


local v1 = {
	spacing = 8, 
	image = "rbxasset://textures/Cursors/Gamepad/Pointer.png", 
	imageSize = Vector2.new(2, 2)
};
local v2 = Instance.new("Model");
v2.Name = "PathDisplayPoints";
local v3 = Instance.new("Part");
v3.Anchored = true;
v3.CanCollide = false;
v3.Transparency = 1;
v3.Name = "PathDisplayAdornee";
v3.CFrame = CFrame.new(0, 0, 0);
v3.Parent = v2;
local v4 = {};
for v5 = 1, 30 do
	local v6 = Instance.new("ImageHandleAdornment");
	v6.Archivable = false;
	v6.Adornee = v3;
	v6.Image = v1.image;
	v6.Size = v1.imageSize;
	v4[v5] = v6;
end;
local u1 = 30;
local u2 = {};
function v1.setCurrentPoints(p1)
	if typeof(p1) == "table" then
		u2 = p1;
		return;
	end;
	u2 = {};
end;
local u3 = {};
function v1.clearRenderedPath()
	local v7, v8, v9 = ipairs(u3);
	while true do
		v7(v8, v9);
		if not v7 then
			break;
		end;
		v9 = v7;
		v8.Parent = nil;
		u1 = u1 + 1;
		v4[u1] = v8;	
	end;
	u3 = {};
	v2.Parent = nil;
end;
local function u4(p2, p3)
	if u1 == 0 then
		return nil;
	end;
	local v10, v11, v12 = workspace:FindPartOnRayWithIgnoreList(Ray.new(p2 + Vector3.new(0, 2, 0), Vector3.new(0, -8, 0)), { game.Players.LocalPlayer.Character, workspace.CurrentCamera });
	if not v10 then
		return nil;
	end;
	local v13 = v4[1];
	if not v13 then
		local v14 = nil;
	else
		v4[1] = v4[u1];
		v4[u1] = nil;
		u1 = u1 - 1;
		v14 = v13;
	end;
	v14.CFrame = CFrame.new(v11, v11 + v12);
	v14.Parent = v2;
	return v14;
end;
function v1.renderPath()
	v1.clearRenderedPath();
	if not u2 or #u2 == 0 then
		return;
	end;
	local v15 = #u2;
	local v16 = 0;
	u3[1] = u4(u2[v15], true);
	if not u3[1] then
		return;
	end;
	while true do
		local v17 = u2[v15];
		if v15 < 2 then
			break;
		end;
		local v18 = u2[v15 - 1] - v17;
		local l__magnitude__19 = v18.magnitude;
		if l__magnitude__19 < v16 then
			v16 = v16 - l__magnitude__19;
			v15 = v15 - 1;
		else
			local v20 = u4(v17 + v18.unit * v16, false);
			if v20 then
				u3[#u3 + 1] = v20;
			end;
			v16 = v16 + v1.spacing;
		end;	
	end;
	v2.Parent = workspace.CurrentCamera;
end;
return v1;
