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

2 comments

0

There is a property of frames called ClipsDescandants, try that out

0

ClipsDescendant doesn't work on rotated guis