As explained by the title, I have a script which creates UI Frames and puts them into a circular pattern, I’ve already converted their position and scale to offset, but I don’t know how to convert the radius (Their distance from the center of the screen) to offset. What do I have to do and where do I begin in order to convert radius (A number) and influence it with the screen size to create a scaled radius?
Any help would be much appreciated.
local function CreateCircles(SpellName)
Active = true
ActiveSpell = SpellName
for _, v in ipairs(MainFrame:GetChildren()) do
if v:IsA("Frame") and v.Name ~= "LinesFrame" then
v:Destroy()
end
end
for _, v in ipairs(LineFolder:GetChildren()) do
v:Destroy()
end
Circles = {}
CurrentIndex = 1
local Config = SpellCastingInfo:FindSpellInfo(SpellName)
if not Config then return end
local TimeLimit = Config.TimeLimit
local ManaCircleCount = Config.ManaCircleCount
local ManaCircleSize = Config.ManaCircleSize
local Radius = Config.Radius
local angleStep = (2 * math.pi) / ManaCircleCount
for i = 1, ManaCircleCount do
local newCircle = TemplateCircle:Clone()
newCircle.Visible = true
newCircle.Name = "Circle_" .. i
newCircle.Size = UDim2.fromScale(ManaCircleSize / GuiObj.AbsoluteSize.Y, ManaCircleSize / GuiObj.AbsoluteSize.Y)
if i == 1 then
newCircle.ManaImage.ImageColor3 = Color3.new(1, 0.827451, 0.396078)
end
if i == ManaCircleCount then
newCircle.ManaImage.ImageColor3 = Color3.new(0.729412, 0, 0.0117647)
end
local angle = (i - 1) * angleStep
local x = math.cos(angle) * Radius
local y = math.sin(angle) * Radius
local OffsetPos = UDim2.fromOffset(MainFrame.AbsoluteSize.X/2.1 + x - ManaCircleSize/2, MainFrame.AbsoluteSize.Y/2.1 + y - ManaCircleSize/2)
newCircle.Position = UDim2.fromScale(OffsetPos.X.Offset / GuiObj.AbsoluteSize.X, OffsetPos.Y.Offset / GuiObj.AbsoluteSize.Y)
newCircle.Parent = MainFrame
table.insert(Circles, newCircle)
end
end
I’m mainly focusing on this part of the function:
local Radius = Config.Radius
local angleStep = (2 * math.pi) / ManaCircleCount
for i = 1, ManaCircleCount do
local newCircle = TemplateCircle:Clone()
newCircle.Visible = true
newCircle.Name = "Circle_" .. i
newCircle.Size = UDim2.fromScale(ManaCircleSize / GuiObj.AbsoluteSize.Y, ManaCircleSize / GuiObj.AbsoluteSize.Y)
if i == 1 then
newCircle.ManaImage.ImageColor3 = Color3.new(1, 0.827451, 0.396078)
end
if i == ManaCircleCount then
newCircle.ManaImage.ImageColor3 = Color3.new(0.729412, 0, 0.0117647)
end
local angle = (i - 1) * angleStep
local x = math.cos(angle) * Radius
local y = math.sin(angle) * Radius
local OffsetPos = UDim2.fromOffset(MainFrame.AbsoluteSize.X/2.1 + x - ManaCircleSize/2, MainFrame.AbsoluteSize.Y/2.1 + y - ManaCircleSize/2)
newCircle.Position = UDim2.fromScale(OffsetPos.X.Offset / GuiObj.AbsoluteSize.X, OffsetPos.Y.Offset / GuiObj.AbsoluteSize.Y)
newCircle.Parent = MainFrame
table.insert(Circles, newCircle)
end


