It is in ScreenGUI. I have problem with show at specific distance and always on top? How to fix it? Here's the script.

	local Markers = {}
local Screen = script.Parent.Holder.AbsoluteSize
local T = game:GetService("TweenService")

for i,v in pairs(game.ReplicatedStorage.Markers:GetChildren()) do
	local Marker = script.Sample:Clone()
	Marker.Parent = script.Parent.Holder
	Marker.ImageColor3 = v.Config.MarkerColor.Value
	Marker.RotateLabel.Arrow.ImageColor3 = v.Config.MarkerColor.Value
	Marker.Icon.Image = v.Config.Icon.Value
	table.insert(Markers,{Marker,v})
end

function ClampMarkerToBorder(X,Y,Absolute)
	X = Screen.X - X
	Y = Screen.Y - Y
	
	local DistanceToXBorder = math.min(X,Screen.X-X)
	local DistanceToYBorder = math.min(Y,Screen.Y-Y)
	
	if DistanceToYBorder < DistanceToXBorder then 
		if Y < (Screen.Y-Y) then
			return math.clamp(X,0,Screen.X-Absolute.X),0
		else
			return math.clamp(X,0,Screen.X-Absolute.X),Screen.Y - Absolute.Y
		end
	else
		if X < (Screen.X-X) then
			return 0,math.clamp(Y,0,Screen.Y-Absolute.Y)
		else
			return Screen.X - Absolute.X,math.clamp(Y,0,Screen.Y-Absolute.Y)
		end
	end
end

game:GetService("RunService").Heartbeat:Connect(function()
	for i,Stat in pairs(Markers) do
		local Marker = Stat[1]
		local Location = Stat[2]
		Marker.Visible = Location.Config.Enabled.Value
		
		if Location.Config.Enabled.Value then
			local MarkerPosition , MarkerVisible = game.Workspace.CurrentCamera:WorldToScreenPoint(Location.Position)
			local MarkerRotation = game.Workspace.CurrentCamera.CFrame:Inverse()*Location.CFrame
			local MarkerAbsolute = Marker.AbsoluteSize
			
			local MarkerPositionX = MarkerPosition.X - MarkerAbsolute.X/2
			local MarkerPositionY = MarkerPosition.Y - MarkerAbsolute.Y/2
			
			if MarkerPosition.Z < 0  then
				MarkerPositionX,MarkerPositionY = ClampMarkerToBorder(MarkerPositionX,MarkerPositionY,MarkerAbsolute)
			else
				if MarkerPositionX < 0 then
					MarkerPositionX = 0
				elseif MarkerPositionX > (Screen.X - MarkerAbsolute.X) then
					MarkerPositionX = Screen.X - MarkerAbsolute.X
				end
				if MarkerPositionY < 0 then
					MarkerPositionY = 0
				elseif MarkerPositionY > (Screen.Y - MarkerAbsolute.Y) then
					MarkerPositionY = Screen.Y - MarkerAbsolute.Y
				end
			end
				
			Marker.RotateLabel.Visible = not MarkerVisible
			Marker.RotateLabel.Rotation = 90 + math.deg(math.atan2(MarkerRotation.Z,MarkerRotation.X))
			Marker.Position = UDim2.new(0,MarkerPositionX,0,MarkerPositionY)
			
			T:Create(Marker,TweenInfo.new(.5),{ImageColor3 = Location.Config.MarkerColor.Value}):Play()
			T:Create(Marker.RotateLabel.Arrow,TweenInfo.new(.5),{ImageColor3 = Location.Config.MarkerColor.Value}):Play()
			local CurrentTime = tick()
			if Location.Config.BurstType.Value == "Normal" then
				if math.floor((CurrentTime%1.5)*100)/100 <= .01 then
					local Burst = script.BurstRings:Clone()
					Burst.ImageColor3 = Location.Config.MarkerColor.Value
					Burst.Parent = Marker
					T:Create(Burst,TweenInfo.new(1),{Size = UDim2.new(2,0,2,0),ImageTransparency = 1}):Play()
					game.Debris:AddItem(Burst,1)
				end
			elseif Location.Config.BurstType.Value == "Police" then
				if math.floor((CurrentTime%1.5)*100)/100 <= .01 then
					warn("Blue")
					local Burst = script.BurstRings:Clone()
					Burst.ImageColor3 = Color3.fromRGB(82,124,174)
					Burst.Parent = Marker
					T:Create(Burst,TweenInfo.new(1),{Size = UDim2.new(2,0,2,0),ImageTransparency = 1}):Play()
					game.Debris:AddItem(Burst,1)
				elseif math.floor((CurrentTime%.75)*100)/100 <= .01 then
					warn("Red")
					local Burst = script.BurstRings:Clone()
					Burst.ImageColor3 = Color3.fromRGB(255,89,89)
					Burst.Parent = Marker
					T:Create(Burst,TweenInfo.new(1),{Size = UDim2.new(2,0,2,0),ImageTransparency = 1}):Play()
					game.Debris:AddItem(Burst,1)
				end
			end
		end
	end
end)

The video: https://streamable.com/7fexjc

1 comment

0

Fix your code block.