Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Hello, I have question with this GUI?

Asked by 3 years ago
Edited 3 years ago

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

0
Fix your code block. Dovydas1118 1495 — 3y

Answer this question