I would suggest using some simple math or tween for the bar. Then have the script check if the players health is under 50% then for the circle you can do what Roblox dose for there proximity prompts. What they basically do is have a gradient and then they use math to change the orientation and size of it so it looks like a circular moving bar. (So yeah what you are already doing is good )
So something like this maby…
local gradient = imageLabel:FindFirstChildOfClass("UIGradient")
-- assume health is from 0 to 100
function updateHealthbar(health)
local percent = math.clamp(health / 100, 0, 1)
if percent > 0.5 then
-- Reveal left-to-right bar
local t = (percent - 0.5) * 2 -- Remap 0.5–1 to 0–1
gradient.Rotation = 0
gradient.Offset = Vector2.new(-1 + t, 0) -- Shift from -1 to 0
else
-- Reveal circular part
local t = percent * 2 -- Remap 0–0.5 to 0–1
gradient.Rotation = 90 -- or 180 depending on circle layout
gradient.Offset = Vector2.new(-1 + t, 0) -- Shift again
end
end
While this response is nice this isnt exactly what im looking for i already know how i would need to do it
This is the code i currently have the math might be a bit messy, (gradient starts at 1,1 and not at 0,0)
im also calculating it by 1.1 cause it otherwise looks weird
( also sorry i decided to make it start at 40% now and not 50%)
local HPbar = game.Workspace["3DHPBARATTEMPT"]
local Gradient = script.Parent.UIGradient
local CircularStart = 0.4
HPbar:GetAttributeChangedSignal("HP"):Connect(function()
local HP = HPbar:GetAttribute("HP")
if HP > 40 then
HP = 80 + (HP-90)
end
local Calc = math.clamp(HP/100,0,1) * 1.1
if Calc > CircularStart then
Gradient.Rotation = 0
Gradient.Offset = Vector2.new(Calc,1)
else
--empty cause idk what to calculate
end
end)
the thing i would need to rotate the gradient and change the offset at the same time while the health changes, atleast thats what im guessing i have to do
i have been at this for a few hours already and just cant figure out the math
cause the health ends here