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

How to have a minimap delete a frame if it leaves frame border?

Asked by
stepatron 103
5 years ago
Edited 5 years ago

So I have this minimap, which DOES work, but when I go too far, the frame of the part goes past the minimap itself! How do I fix this and not have the frame spawn if it goes too far past that distance? P.S. the mini map is a circle decal

local player = game:GetService("Players").LocalPlayer
local character = player.Character or player.CharacterAdded:wait()
local torso = character:WaitForChild("HumanoidRootPart")
local head = character:WaitForChild("Head")

local main = script.Parent.Main                         --Frame to contain Everything
local map = main.Map                                    --Image label to create a circular GUI for the minimap
local mapParts = game.Workspace.MiniMup

local content = game:GetService("ContentProvider")
local arrow = "rbxassetid://1940322272"
content:Preload(arrow)

function createFrame(part)
    map:ClearAllChildren()
    local torsoPos = CFrame.new(torso.CFrame.p)
    local position = torsoPos:toObjectSpace(part.CFrame)                                                            
    local relPos = CFrame.new(-position.X + (map.Size.X.Offset/2), 0, -position.Z + (map.Size.Y.Offset/2))
    local object = Instance.new("Frame", map)

    object.Name = part.Name 
    object.BackgroundColor3 = part.Color
    object.BorderSizePixel = 0.1
    object.Size = UDim2.new(0, (part.Size.X) + 5, 0, (part.Size.Z) + 5)
    object.Position = UDim2.new(0, (relPos.X) - (object.Size.X.Offset)/2, 0, (relPos.Z) - (object.Size.Y.Offset)/2)
    map.Rotation =  math.deg(math.atan2(head.CFrame.lookVector.X, head.CFrame.lookVector.Z))
end


function createPlayerFrame(part)
    local torsoPos = CFrame.new(torso.CFrame.p)
    local enemyTorsoPos = torsoPos:toObjectSpace(part.CFrame)
    local relativePos = CFrame.new(-enemyTorsoPos.X + (map.Size.X.Offset/2), 0, -enemyTorsoPos.Z + (map.Size.Y.Offset/2))

    local enemyPlayer = Instance.new("Frame", map)

    enemyPlayer.BackgroundColor3 = Color3.new(1,1,1)
    enemyPlayer.Size = UDim2.new(0, 7.5, 0, 7.5)
    enemyPlayer.Name = part.Name
    enemyPlayer.BorderSizePixel = 0

    enemyPlayer.Position = UDim2.new(0, (relativePos.X) - (enemyPlayer.Size.X.Offset)/2, 0, (relativePos.Z) - (enemyPlayer.Size.Y.Offset)/2)
end

function buildMap()
    local playerPos = Instance.new("ImageLabel", main)

    playerPos.BackgroundTransparency = 1
    playerPos.Name = "Player"
    playerPos.Image = arrow
    playerPos.Size = UDim2.new(0,15,0,15)
    playerPos.Position = UDim2.new(0, 92.5, 0, 92.5)

    for i,v in ipairs(mapParts:GetChildren()) do
        if v:IsA("Model") then
            for a,b in ipairs(v:GetChildren()) do
                if #v:GetChildren() > 10 then
                elseif b:IsA("Part") or b:IsA("UnionOperation") or b:IsA("MeshPart") then
                    createFrame(b)
                end
            end
        elseif v:IsA("Part") or v:IsA("UnionOperation") or v:IsA("MeshPart") then
            createFrame(v)
        end
    end

    --Part that triggers the createPlayFrame function!
    for c, d in ipairs(game.Workspace:GetChildren()) do
        if d:FindFirstChild("Humanoid") and d:IsA("Model") and d.Name ~= player.Name then
            local enemyTorso = d:FindFirstChild("HumanoidRootPart")
            createPlayerFrame(enemyTorso)
        end
    end
end

while wait(1/25) do
    buildMap()
end
0
There is a property of frames called ClipsDescandants, try that out theCJarmy7 1293 — 5y
0
ClipsDescendant doesn't work on rotated guis stepatron 103 — 5y

Answer this question