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